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.通用注意事项
- 由于chromedriver.exe与msedgedriver.exe需要与本地浏览器版本一致,而不同电脑上的浏览器版本可能不一致,这时使用WebDriverManager来自动下载chromedriver是比较好的解决办法。
WebDriverManager.chromedriver().setup();
当使用java.awt.Robot来模拟键盘操作时,需要设置环境变量java.awt.headless=false或者如下设置:
//Headless模式是系统的一种配置模式。在系统可能缺少显示设备、键盘或鼠标这些外设的情况下可以使用该模式。 System.setProperty("java.awt.headless", "false");
若自己下载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);
对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();
定焦dom,可以激活某个元素,可以使被被滚动条遮盖的内容显示出来,变为可操作。
JavascriptExecutor executor = (JavascriptExecutor) mDriver; executor.executeScript("arguments[0].focus();", element);
滑动滚动条
((JavascriptExecutor) mDriver).executeScript("arguments[0].scrollIntoView();",element);
关闭通过window.open()打开的对话框:
JavascriptExecutor executor = (JavascriptExecutor) mDriver; executor.executeScript("window.opener = null;window.open('','_self'); window.close(); ");
判断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;}
的
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的注意事项
- IEDriverServer的版本要与Selenimu的版本一致;
- IEDriverServer的32位版本更稳定,不管Windows操作系统s是32位还是64位,尽量使用32位版本;
- 在使用前,需要在程序中定位IEDriverServer的位置;如下java配置:
System.setProperty("webdriver.ie.driver", "D:\\BrowserDriver\\IEDriverServer.exe");
- Internet设置的安全设置,4个区域的启用保护模式设置全启用;
- Internet设置的高级设置中,取消“启用增强保护模式”;
- IE浏览器的运行速度相对于火狐和chrome等其它浏览器来说,速度要慢,所以更容易遇到“NoSuchElementFound”的异常,在对元素定位时尽量使用CSS Selector和xpath,在自动化测试中尽量使用火狐或谷歌做为默认的主测浏览器;
- “NoSuchElementFound”异常的解决办法之一是:在每次定位之前至少等待2秒,并且通过WebDriverWait.until进行查找元素,且等待时间不低于20秒。其实这两个等待时间是可以根据机器情况进行调整的,需要具体情况具体分析。
- “NoSuchElementFound”异常的解决办法之二是:当前iedriverserver.exe已经对xpath有比较好的支持,但是可以通过比较详细和精确的xpath的描述来查找元素。
- html元素在IE浏览器中核其他浏览器中的属性可能有些差异,也可能大小写不一致,所以若是需要支持多种浏览器,或者通过chrome浏览器调试,但应用时使用IE 浏览器时,若遇到找不到元素的异常,xpath或cssSelector定位在多种浏览器之间是否一致。
- WebElement.click()函数无效,建议使用
String js = "arguments[0].click();";JavascriptExecutor executor = (JavascriptExecutor) mDriver;return executor.executeScript(js,element);
或者new Actions(driver).click().perform();
- 有些电脑,在初次启动IE时,会有一个防火墙的弹窗提示,选择允许,再次运行脚本即可;
- 若IE已经合并进Edge浏览器,则在Edge的设置-默认浏览器-Internet Explorer 兼容性;禁用“让Internet Explorer在Edge中打开网页”,且不允许在 Internet Explorer 模式下重新加载网站。在Internet选项-高级中取消“启用第三方浏览器扩展”。
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%
对于通过js控制显示的Input控件,通过element.sendKey(value)无法修改,可以使用js修改,如下:
String js String.format("arguments[0].value = '%s';",value); JavascriptExecutor executor = (JavascriptExecutor) mDriver; executor.executeScript(js,element);
参考:
- 《解决Selenium 调用IEDriverServer打开IE浏览器》
- 《使用Selenium启动IE浏览器》
- 《Selenium工作原理》
Selenium使用经验总结相关推荐
- Robot Framework Selenium UI自动化测试 --- 进阶篇
回顾: 如果您对Robot Framework Selenium(以下简称RFS)没有基础概念和使用经验,请先阅读入门篇,入门篇对RFS有基础的介绍和使用教程. 展望: ...
- 一个使用 selenium 模块爬取(Twitter、New York Times)网站的可配置爬虫代码
Selenium_Crawler 一个使用 selenium 模块爬取(Twitter.New York Times)网站的可配置爬虫代码 代码更新 3/11/2021 修改报错信息不明确的bug 更 ...
- 洞见 SELENIUM 自动化测试
洞见SELENIUM自动化测试 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够在项目中持之以恒的实践自动化测试的团队,却依旧不是非常多.有的团队知道 ...
- selenium是什么
2019独角兽企业重金招聘Python工程师标准>>> 原 以后再有人问你selenium是什么,你就把这篇文章给他 置顶 2018年08月22日 20:37:19 TestingG ...
- 【python】 selenium中webdriver对网页标签的查找
webdriver可以根据标签的属性.ID.名称等元素进行查找,并完成一些简单的操作 在很多教程和书本中都会有find_element_by_name.find_element_by_id等函数去找标 ...
- 预见自动化测试 | 基于 SELENIUM 的自动化测试架构
基于 SELENIUM 的自动化测试架构 非常感谢各位查阅本篇文章,笔者在此感谢各位. 目前市面上有分门别类的自动化测试工具,这篇文章将讨论开源自动化测试工具 Selenium的使用,以及围绕该工具进 ...
- selenium浏览器自动化测试框架文档(修正版)
写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够在项目中持之以恒的实践自动化测试的团队,却依旧不是非常多.有的团队知道怎么做,做的还不够好:有的团队还 ...
- Python:Selenium和PhantomJS
Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上, ...
- python+selenium浏览器常用操作(一)
1.导入selenium自定义的webdriver.后续可通过调用此协议启动各大浏览器 from selenium import webdriver #浏览器 from selenium.webdri ...
最新文章
- 手机连接投影机的步骤_投影机和电视机怎么选?看这一篇就够了!
- 11.6 如何使用内嵌资源类(ResourceRetriever)?
- 2021-01-07 matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法
- Eclipse中启动tomcat报错:A child container failed during start
- UIColor之【扩展:#FFFFFF -UIColor】
- JavaScript实现表单的分向提交
- 移动web开发之rem布局(rem基础、媒体查询、 less 基础、rem适配方案)
- RHEL 5.1 下面安装tftp服务
- DSSM,Deep Structured Semantic Models
- python管道怎么使用_Python – 如何使用管道执行shell命令?
- 元宇宙不是 PPT:已经发展到这个地步了
- python批量自动填写网页表单_Python爬虫自动填写调查表
- 德育知识元素挖掘系统设计 软件工程 spring boot + Vue.js + python机器学习
- Flink(三十七)—— Flink 清理过期 Checkpoint 目录的正确姿势
- HTML之部分易忘点
- 6-3 读文章(*)
- U-BOOT中文文档 概述与配置选项
- ecshop被加入了黑链
- 【无标题】输入和输出
- JavaScript变量详解加实例教程