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浏览器:

           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);

4.使用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);

参考:

  1. 《解决Selenium 调用IEDriverServer打开IE浏览器》
  2. 《使用Selenium启动IE浏览器》
  3. 《Selenium工作原理》

Selenium使用经验总结相关推荐

  1. Robot Framework Selenium UI自动化测试 --- 进阶篇

    回顾:          如果您对Robot Framework Selenium(以下简称RFS)没有基础概念和使用经验,请先阅读入门篇,入门篇对RFS有基础的介绍和使用教程. 展望:       ...

  2. 一个使用 selenium 模块爬取(Twitter、New York Times)网站的可配置爬虫代码

    Selenium_Crawler 一个使用 selenium 模块爬取(Twitter.New York Times)网站的可配置爬虫代码 代码更新 3/11/2021 修改报错信息不明确的bug 更 ...

  3. 洞见 SELENIUM 自动化测试

    洞见SELENIUM自动化测试 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够在项目中持之以恒的实践自动化测试的团队,却依旧不是非常多.有的团队知道 ...

  4. selenium是什么

    2019独角兽企业重金招聘Python工程师标准>>> 原 以后再有人问你selenium是什么,你就把这篇文章给他 置顶 2018年08月22日 20:37:19 TestingG ...

  5. 【python】 selenium中webdriver对网页标签的查找

    webdriver可以根据标签的属性.ID.名称等元素进行查找,并完成一些简单的操作 在很多教程和书本中都会有find_element_by_name.find_element_by_id等函数去找标 ...

  6. 预见自动化测试 | 基于 SELENIUM 的自动化测试架构

    基于 SELENIUM 的自动化测试架构 非常感谢各位查阅本篇文章,笔者在此感谢各位. 目前市面上有分门别类的自动化测试工具,这篇文章将讨论开源自动化测试工具 Selenium的使用,以及围绕该工具进 ...

  7. selenium浏览器自动化测试框架文档(修正版)

    写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够在项目中持之以恒的实践自动化测试的团队,却依旧不是非常多.有的团队知道怎么做,做的还不够好:有的团队还 ...

  8. Python:Selenium和PhantomJS

    Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上, ...

  9. python+selenium浏览器常用操作(一)

    1.导入selenium自定义的webdriver.后续可通过调用此协议启动各大浏览器 from selenium import webdriver #浏览器 from selenium.webdri ...

最新文章

  1. 手机连接投影机的步骤_投影机和电视机怎么选?看这一篇就够了!
  2. 11.6 如何使用内嵌资源类(ResourceRetriever)?
  3. 2021-01-07 matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法
  4. Eclipse中启动tomcat报错:A child container failed during start
  5. UIColor之【扩展:#FFFFFF -UIColor】
  6. JavaScript实现表单的分向提交
  7. 移动web开发之rem布局(rem基础、媒体查询、 less 基础、rem适配方案)
  8. RHEL 5.1 下面安装tftp服务
  9. DSSM,Deep Structured Semantic Models
  10. python管道怎么使用_Python – 如何使用管道执行shell命令?
  11. 元宇宙不是 PPT:已经发展到这个地步了
  12. python批量自动填写网页表单_Python爬虫自动填写调查表
  13. 德育知识元素挖掘系统设计 软件工程 spring boot + Vue.js + python机器学习
  14. Flink(三十七)—— Flink 清理过期 Checkpoint 目录的正确姿势
  15. HTML之部分易忘点
  16. 6-3 读文章(*)
  17. U-BOOT中文文档 概述与配置选项
  18. ecshop被加入了黑链
  19. 【无标题】输入和输出
  20. JavaScript变量详解加实例教程

热门文章

  1. Unity算法——矩形技能伤害判断
  2. 尝试Houdini的Maya插件
  3. 电脑老是蓝屏是什么原因?有没有办法彻底解决?
  4. win10 系统下本地 IIS 管理器 MIME 类型添加
  5. C++ RTTI详解
  6. 技术领导力,2019年文章精选55篇:中台架构、大佬故事、职场管理干货
  7. 如何给目标机器人建模并仿真【数学/控制意义】
  8. 天地图-第七篇-按轨迹运动
  9. CSS中的文字对齐问题
  10. 【NOI2014】起床困难综合症