该篇文章记录本人在学习及使用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学习笔记的更多相关文章

  1. Python3+Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )

    !/usr/bin/env python -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )'''from selenium im ...

  2. Python3+Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)'''from sel ...

  3. Python3+Selenium3+webdriver学习笔记12(js操作应用:滚动条 日历 内嵌div)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记12(js操作应用:滚动条 日历 内嵌div)'''from ...

  4. Python3+Selenium3+webdriver学习笔记11(cookie处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium im ...

  5. Python3+Selenium3+webdriver学习笔记10(元素属性、页面源码)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记10(元素属性.页面源码)'''from selenium i ...

  6. Python3+Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)'''from seleni ...

  7. Python3+Selenium3+webdriver学习笔记8(单选、复选框、弹窗处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记8(单选.复选框.弹窗处理)''' from selenium ...

  8. Selenium WebDriver 学习笔记

    1. 打开VS2012 2. 新建工程(单元测试工程或控制台程序都可以, 看需求) 3. 工具->NuGet程序包管理器->程序包管理器控制台 4. 输入"Install-Pac ...

  9. selenium webdriver 学习笔记(三)

    selenium webdriver 一.上传文件操作 上传文件夹一般要打开一个本地窗口,从窗口选择本地文件添加.所以一般会卡在如何操作本地窗口添加上传文件. 其实,在selenium webdriv ...

随机推荐

  1. DBUtil数据库连接单例 —— 简单不简单

    单例大概是我最早产生明确模式意识的设计模式,因为它足够简单粗暴,目的足够明确. 单例么,就是不管怎么访问,都返回一个单一实例就好了,我最早应用在数据库的DBUtil中. public class DB ...

  2. 用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树

    这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托,表达式树这些应用.今天我尝试用简单的方法叙述一下,让大家在五 ...

  3. 读书笔记--SQL必知必会11--使用子查询

    11.1 子查询 查询(query),任何SQL语句都是查询.但此术语一般指SELECT语句. SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询. 作为子查询的SELECT语句只能 ...

  4. MySQL用户管理

    主要总结MySQL进行用户管理的基本实现,包含MySQL登录,添加用户,删除用户,为用户分配权限,移除某用户的权限,修改密码,查看权限等基本操作,所有命令均亲测实现.本博文是本人的劳动成果所得,在博客 ...

  5. 《HelloGitHub月刊》第09期

    <HelloGitHub>第09期 兴趣是最好的老师,<HelloGitHub>就是帮你找到兴趣! 前言 转眼就到年底了,月刊做到了第09期,感谢大家一路的支持和帮助

  6. 设置nginx禁止IP直接访问,只能通过指定的域名访问

    nginx的版本是1.2.1. 设置配置文件disableip.conf: server {     listen 80;     server_name _;     return500; } 这是 ...

  7. 百度EChart3初体验

    由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...

  8. conversations.im

    最后在即时消息  https://conversations.im/ https://github.com/chrisballinger/ 对话是Android 4.0的Jabber / XMPP客户 ...

  9. C#基础知识六之委托(delegate、Action、Func、predicate)

    1. 什么是委托 官方解释 委托是定义方法签名的类型,当实例化委托时,您可以将其实例化与任何具有兼容签名的方法想关联,可以通过委托实例调用方法. 个人理解 委托通俗一点说就是把一件事情交给别人来帮助完 ...

  10. 报错:已有打开的与此命令相关联的 DataReader,必须首先将它关闭。

    SqlParameter[] sp = { new SqlParameter("@nGridID",SqlDbType.BigInt), new SqlParameter(&quo ...