Selenium使用经验总结

1.Selenium工作原理

Selenium用来模拟人工操作浏览器,是业界很常用的Web测试工具,支持C#,java,python,js等主流语言。

我们常用的是Selenium WebDriver,其包括两部分,Selenium开发语言包和各种浏览器的DriverServer。我们通过编程操作Selenium,Selenium以json格式向DriverServer发送远程指令,DriverServer建立一个本地的微型http服务,启动相应浏览器,在浏览器中执行指令。

2.Selenium使用经验

Selenium对每个浏览器的支持都需要DriverServer,但是仅有IE浏览器的IEDriverSever.exe的版本仅需与Selenium开发包版本一致即可,而其他浏览器需要与本地浏览器的版本一致,甚至精确到小版本。若使用多台电脑做测试,且浏览器版本不一致,下载相应的DriderSever版本就是比较头痛的事。幸好,现在有webdrivermanager可供使用,会自动下载符合浏览器版本的driverserver。由于各种driverserver的大小不一样,所在的服务器不一样,在国内的访问情况各有不同。

本人是使用java做开发,所以,下面的内容以java距离分析问题。

3.通用注意事项

  1. 由于chromedriver.exe与msedgedriver.exe需要与本地浏览器版本一致,而不同电脑上的浏览器版本可能不一致,这时使用WebDriverManager来自动下载chromedriver是比较好的解决办法。
    WebDriverManager.chromedriver().setup();

  2. 当使用java.awt.Robot来模拟键盘操作时,需要设置环境变量java.awt.headless=false或者如下设置:

    //Headless模式是系统的一种配置模式。在系统可能缺少显示设备、键盘或鼠标这些外设的情况下可以使用该模式。
    System.setProperty("java.awt.headless", "false");
  3. 若自己下载driverserver,需要注意driverserver存放位置,以及配置位置。

    String driverPath = "toPath/IEDriverServer.exe";
    //chrome浏览器位置设置
    System.setProperty("webdriver.chrome.driver", driverPath);
    //edge浏览器位置设置
    System.setProperty("webdriver.edge.driver", driverPath);
    //ie浏览器位置设置
    System.setProperty("webdriver.ie.driver", driverPath);

  4. 对WebElement的操作尽量使用Actions,而不是直接使用WebElement的方法。特别是WebElement的方法对IE上的非可交互dom是失效的。

    //通过下面操作代替WebElement.click()
    new Actions(driver).click(element).perform();
    //清除Input值除外,应通过下面操作代替WebElement.clear()
    WebElement.sendKeys(Keys.DELETE);
    //通过下面操作代替WebElement.sendKeys(Keys)
    new Actions(driver).sendKeys(element,Keys).perform();
    //并且通过Actions还可以模拟鼠标操作和键盘操作
    new Actions(driver).sendKeys(Keys.ARROW_DOWN).perform();
    new Actions(mDriver).contextClick(element).perform();

  5. 定焦dom,可以激活某个元素,可以使被被滚动条遮盖的内容显示出来,变为可操作。

    JavascriptExecutor executor = (JavascriptExecutor) mDriver;
    executor.executeScript("arguments[0].focus();", element);

  6. 滑动滚动条

    ((JavascriptExecutor) mDriver).executeScript("arguments[0].scrollIntoView();",element);

  7. 关闭通过window.open()打开的对话框:

    JavascriptExecutor executor = (JavascriptExecutor) mDriver;
    executor.executeScript("window.opener = null;window.open('','_self'); window.close(); ");

  8. 判断checkbox是否被选中:

     public boolean isChecked(By by){
            WebElement element = findElement(by);
            try{
                if(element != null && "input".equals(element.getTagName()) && "checkbox".equals(element.getAttribute("type"))){
                    return "true".equals(element.getAttribute("checked"));
                }
            }catch (Exception ex){}
            return false;
        }

  9. Selenium 4以后,可以通过Edge的IE兼容性,通过IEDriverServer调用Edge浏览器,(当前不需要这么麻烦了,由于微软已计划使用Edge替换IE,可以通过系统设置来达到同样目的,在Internet选项-高级中取消“启用第三方浏览器扩展”。):

           InternetExplorerOptions options = new InternetExplorerOptions();
            //4.0.0之后支持IE附在Edge浏览器上。
            options.ignoreZoomSettings();
            options.attachToEdgeChrome();
            options.withEdgeExecutablePath("C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe");
            mDriver = new InternetExplorerDriver(options);
  10.  为了提高使用Selenium的效率,可以在同一台电脑上跑多个Selenium机器人。但是Windows一般仅支持服务器版操作系统的多用户同时操作,且需要按用户数收费。为了解决这个问题,我们可以通过在一个系统中开多个系统账户,保持系统用户在后台运行,通过切换用户来查看系统运行情况。

4.使用ChromeDriver的注意事项

  1. Chrome默认情况下,仅支持在第一个登录的账户中打开界面。切换到其他账户后,打开Chrome后并不能显示浏览器界面,也是在第一个账户下显示。为了解决此问题,需要为每个账户下的Chrome设置参数“--user-data-dir”默认值为“C:\Users\Administrator\AppData\Local\Google\Chrome\User Data”。只要为每个账户下的Chrome设置单独的用户数据地址,就可以在每个账户下打开浏览器。Edge设置相同。
     // 浏览器存储用户配置文件的目录。
     String localappdata = System.getenv("LOCALAPPDATA");
     String userDataDir = String.format("--user-data-dir=%s/Google/Chrome/User Data",localappdata);
     options.addArguments(userDataDir);
     // 选择要与启动的第一个浏览器关联的配置文件目录。
     options.addArguments("--profile-directory=Default");

5.使用IEDriverServer的注意事项

  1. IEDriverServer的版本要与Selenimu的版本一致;
  2. IEDriverServer的32位版本更稳定,不管Windows操作系统s是32位还是64位,尽量使用32位版本;
  3. 在使用前,需要在程序中定位IEDriverServer的位置;如下java配置:
    
    System.setProperty("webdriver.ie.driver", "D:\\BrowserDriver\\IEDriverServer.exe");

  4. Internet设置的安全设置,4个区域的启用保护模式设置全启用;
  5. Internet设置的高级设置中,取消“启用增强保护模式”;
  6. IE浏览器的运行速度相对于火狐和chrome等其它浏览器来说,速度要慢,所以更容易遇到“NoSuchElementFound”的异常,在对元素定位时尽量使用CSS Selector和xpath,在自动化测试中尽量使用火狐或谷歌做为默认的主测浏览器;
  7. “NoSuchElementFound”异常的解决办法之一是:在每次定位之前至少等待2秒,并且通过WebDriverWait.until进行查找元素,且等待时间不低于20秒。其实这两个等待时间是可以根据机器情况进行调整的,需要具体情况具体分析。
  8. “NoSuchElementFound”异常的解决办法之二是:当前iedriverserver.exe已经对xpath有比较好的支持,但是可以通过比较详细和精确的xpath的描述来查找元素。
  9. html元素在IE浏览器中核其他浏览器中的属性可能有些差异,也可能大小写不一致,所以若是需要支持多种浏览器,或者通过chrome浏览器调试,但应用时使用IE 浏览器时,若遇到找不到元素的异常,xpath或cssSelector定位在多种浏览器之间是否一致。
  10. WebElement.click()函数无效,建议使用
        String js = "arguments[0].click();";
        JavascriptExecutor executor = (JavascriptExecutor) mDriver;
        return executor.executeScript(js,element);

    或者new Actions(driver).click().perform();

  11. 有些电脑,在初次启动IE时,会有一个防火墙的弹窗提示,选择允许,再次运行脚本即可;
  12. 若IE已经合并进Edge浏览器,则在Edge的设置-默认浏览器-Internet Explorer 兼容性;禁用“让Internet Explorer在Edge中打开网页”,且不允许在 Internet Explorer 模式下重新加载网站。在Internet选项-高级中取消“启用第三方浏览器扩展”。
  13. E浏览器的缩放比率(zoom level)要是默认的100%,否则要报下面类似的错误:

    Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Unexpected error launching Internet Explorer. Browser zoom level was set to 130%. It should be set to 100%
    

  14. 对于通过js控制显示的Input控件,通过element.sendKey(value)无法修改,可以使用js修改,如下:

    String js String.format("arguments[0].value = '%s';",value);
    JavascriptExecutor executor = (JavascriptExecutor) mDriver;
    executor.executeScript(js,element);

  15. Windows11下已完全禁用IE浏览器,当双击IE浏览器图标时,会自动跳转打开Edge。通过取消“启用第三方浏览器扩展”也不能解决。只能通过vb脚本来解决。创建vbs文件,内容如下:
    CreateObject("InternetExplorer.Application").Enable=true

    保存后,双击即可打开IE浏览器。

参考:

  1. 解决Selenium 调用IEDriverServer打开IE浏览器
  2. 使用Selenium启动IE浏览器
  3. Selenium工作原理
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: 在C#中使用Selenium进行自动化测试可以通过Selenium WebDriver来实现。Selenium WebDriver提供了直观易懂、简练的编程接口,可以方便地进行web自动化测试。你可以在需要Selenium的项目上右键,点击【管理NuGet程序包】,然后搜索selenium,安装Selenium.Support即可(也可以只安装Selenium.WebDriver)。同时,在项目的(.cs)文件中添加以下引用:using OpenQA.Selenium; using OpenQA.Selenium.Remote; using OpenQA.Selenium.Edge;(根据需要添加其他浏览器的引用,比如Chrome需要安装chromedriver)。\[1\]\[2\]如果你在使用C#操作Selenium时遇到问题,可以参考一些经验总结的教程,这些教程可以帮助你解决一些常见的问题。未来可能还会提供更多关于基于登录机制和交互等操作的C# Selenium教程,以及将C#作为脚本语言来完成的脚本式.Net Selenium教程。\[3\] #### 引用[.reference_title] - *1* [C# 使用Selenium](https://blog.csdn.net/yangyong1250/article/details/128892399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C# Selenium使用及诸多事项-I](https://blog.csdn.net/m0_37667916/article/details/104358336)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WalsonTung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值