webdriver学习笔记
该篇文章记录本人在学习及使用webdriver做自动化测试时遇到的各种问题及解决方式,问题比较杂乱。问题的解决方式来源五花八门,如有疑问请随时指正一遍改正。
1、WebDriver入门
//webdriver打开浏览器并自动打开相应的测试地址
public static void main(String[] args) {
WebDriver driver = new ChromeDriver(); // create a chrome driver
driver.manage().window().maximize(); // max size the chrome window
driver.get(URL); // open URL with the chrome browser
}
2、webdriver报不可见元素异常方法总结(Element is not currently visible)
1 、用xpath定位时,定位到了两个相同的元素,那么会默认找出第一个元素
某div的脚本如下要想找出该div则必须加上其属性:
<div id="ext-comp-1714" class=" x-window x-window-plain x-window-dlg" style="position: absolute; z-index: 9013; visibility: hidden; display: block;">
WebElement close=driver.findElement(By.xpath("//div[contains(@style,' visibility: hidden')]
也可这样用:driver.findElement
(By.xpath("//div[contains(@style,'visibility: visible')]/div[1] /div[@class='x-tool x-tool-close']"))
3、WebDriver_如何判断WebElement元素对象是否存在
selenium中如果去寻找元素,而元素不存在的话,通常会抛出NoSuchElementException 导致测试失败,但有时候,我们需要去确保页面元素不存在,才是我们正确的验收条件下面的方法可以用来判定页面元素是否存在

4、WebDriver的双击事件
webdriver脚本如下所示,双击没反应
Actions action=new Actions(driver);
action.doubleClick(driver.findElement(By.xpath("//table/tbody/tr/td[10]/div[contains(text(),'测试')]")));
解决方法:.perform()
action.doubleClick(driver.findElement(By.xpath("//table/tbody/tr/td[10]/div[contains(text(),'测试')]"))).perform();
5、Selenium By.Xpath 用法
经典例子:
xpath="//input[@name='wirelessResult'][@value='1']"
xpath="//div[contains(@style,'visibility: visible')]//span/b[contains(text(),'系统异常')]"
findElement(By.xpath("//span[contains(text(),'"+spanContains+"')]"));可以通过传参的方式找到元素
td[not(contains(@style,' display: none'))]
div[@class=' x-panel x-panel-noborder' or @class='x-panel x-panel-noborder']
6、Element已经过时
没有和当前页面进行绑定,主要是页面刷新或者跳转引起的。需要重新获取一次元素,抛出异常如下:
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
利用PageFactory可以解决该问题
一个下拉框是由div组成的,

7、Selenium中的几种等待方式
编写脚本的过程中一直使用Thread.sleep(3000)设置等待时间,但是这样设置的话存在不稳定因素,容易造成时间的浪费,通过在网上查找,找到如下的解决方法:
1、Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wait)
隐性等待:指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间。默认值是0,但是设置之后,这个时间将在WebDriver对象实例整个生命周期都起作用(实践证明-影响性能)

显式等待:指在代码进行下一步操作之前等待某一个条件的发生。最不好的情况是使用Thread.sleep()去设置一段确认的时间去等待。因为一个元素的加载时间有长有短,你在设置sleep的时间之前要自己把握长短,太短容易超时,太长浪费时间。selenium webdriver提供了一些方法帮助我们等待正好需要等待的时间。利用WebDriverWait类和ExpectedCondition接口就能实现这一点。

上面的代码WebDriverWait类的构造方法接受了一个WebDriver对象和一个等待最长时间(10秒)。然后调用until方法,其中重写了ExpectedCondition接口中的apply方法,让其返回一个WebElement,即加载完成的元素,然后点击。默认情况下,WebDriverWait每500毫秒调用一次ExpectedCondition,直到有成功的返回,当然如果超过设定的值还没有成功的返回,将抛出异常。
备注:如果一个无素没有出现都会默认等待你所设定的时间,直到超时或者元素出现,所以等待的时间也尽量不要设置的太长,影响性能
8、WebDriver执行JS
1)在某个已经定位了的元素上执行js,解决方式:
WebElement ele = driver.findElement(By.id("js")); // locate web element
((JavascriptExecutor) driver).executeScript("arguments[0].onclick=function(){alert('js has been execute!');}",ele); // add js on the web element
ele.click();
2)获取不到页面上input元素的值,解决方式:

解决方法:
JavascriptExecutor js = (JavascriptExecutor) driver;
String sheetNo =(String) js.executeScript("return document.getElementById('sheetNo').value");
webdriver学习笔记的更多相关文章
- Python3+Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )
!/usr/bin/env python -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )'''from selenium im ...
- Python3+Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)'''from sel ...
- Python3+Selenium3+webdriver学习笔记12(js操作应用:滚动条 日历 内嵌div)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记12(js操作应用:滚动条 日历 内嵌div)'''from ...
- Python3+Selenium3+webdriver学习笔记11(cookie处理)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium im ...
- Python3+Selenium3+webdriver学习笔记10(元素属性、页面源码)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记10(元素属性.页面源码)'''from selenium i ...
- Python3+Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)'''from seleni ...
- Python3+Selenium3+webdriver学习笔记8(单选、复选框、弹窗处理)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记8(单选.复选框.弹窗处理)''' from selenium ...
- Selenium WebDriver 学习笔记
1. 打开VS2012 2. 新建工程(单元测试工程或控制台程序都可以, 看需求) 3. 工具->NuGet程序包管理器->程序包管理器控制台 4. 输入"Install-Pac ...
- selenium webdriver 学习笔记(三)
selenium webdriver 一.上传文件操作 上传文件夹一般要打开一个本地窗口,从窗口选择本地文件添加.所以一般会卡在如何操作本地窗口添加上传文件. 其实,在selenium webdriv ...
随机推荐
- 推荐几款jquery图片切换插件
一.前言 毕业季到了,大家都在匆匆忙忙的记录大学里最美好的时光,照片中各种花式.各种姿势都涌现出来了.这么多的照片怎么展示出来给自己的好友看呢?有人选择做成视频,有人选择ps之后做成图片集,而我选择利 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...
- DDD 领域驱动设计-如何控制业务流程?
上一篇:<DDD 领域驱动设计-如何完善 Domain Model(领域模型)?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply.Sa ...
- react-native学习笔记--首次安装apk到小米5报错
本文直接引用大神文档: [WINDOWS环境 React Native初识]com.android.ddmlib.InstallException: Failed to establish sessi ...
- Gate Of Babylon bzoj 1272
Gate Of Babylon (1s 128MB) babylon [问题描述] [输入格式] [输出格式] [样例输入] 2 1 10 13 3 [样例输出] 12 [样例说明] [数据范围] 题 ...
- dpkg:处理软件包dradis (--configure)时出错
dpkg:处理软件包dradis (--configure)时出错!解决方案:1.将info文件夹更名%mv /var/lib/dpkg/info /var/lib/dpkg/info_old2.新建 ...
- jdk源码分析红黑树——插入篇
红黑树是自平衡的排序树,自平衡的优点是减少遍历的节点,所以效率会高.如果是非平衡的二叉树,当顺序或逆序插入的时候,查找动作很可能会遍历n个节点 红黑树的规则很容易理解,但是维护这个规则难. 一.规则 ...
- Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结
Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结 1. 什么是可扩展的应用程序?1 2. 松耦合(ioc)2 3. 接口的思考 2 4. 单一用途&模块化,小粒度化2 ...
- 2D动画的制作
通过css3的transform transition可以实现平移,旋转,缩放,拉伸等效果 1.缩放 -webkit-transform: scale(1); -moz-transform: sca ...
- AgilePoint实例属性修改
流程实例中的参数存放在WF_CUSTOM_ATTRS表的WF_CUSTOM_ATTRS字段,为ntext类型,里面存放的是XML,不能直接修改 update [APData].[dbo].[WF_ ...