该篇文章记录本人在学习及使用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. ★Kali信息收集~4.DNS系列

    ★.1host:DNS信息 参数: 一般情况下,host查找的是A,AAAA,和MX的记录 案例: DNS服务器查询  host -t ns 域名 A记录和MX记录查询  host 域名(host - ...

  2. 【WPF】运用MEF实现窗口的动态扩展

    若干年前,老周写了几篇有关MEF的烂文,简单地说,MEF是一种动态扩展技术,比如可以指定以某个程序集或某个目录为搜索范围,应用程序在运行时会自动搜索符合条件的类型,并自动完成导入,这样做的好处是,主程 ...

  3. 【原】SDWebImage源码阅读(一)

    [原]SDWebImage源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 一直没有系统地读过整套源码,就感觉像一直看零碎的知识点,没有系统读过一本专业经典书 ...

  4. Android自定义控件之自定义属性

    前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性.本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解.有关原理知识请参考Android自定义控 ...

  5. SQL Server-数据类型(七)

    前言 前面几篇文章我们讲解了索引有关知识,这一节我们再继续我们下面内容讲解,简短的内容,深入的理解,Always to review the basics. 数据类型 SQL Server支持两种字符 ...

  6. YYModel 源码解读(二)之YYClassInfo.h (2)

    /** Instance variable information. */ @interface YYClassIvarInfo : NSObject @property (nonatomic, as ...

  7. H5图片裁剪升级版

    前段时间做了个跟裁剪相关的活动<用H5中的Canvas等技术制作海报>,这次公司要做个与奥运相关的活动,扫车牌赢奖. 于是我就在上一个活动的基础上,将代码重新封装一下,并且将计算方式写的更 ...

  8. spring boot(五):spring data jpa的使用

    在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...

  9. 编写高质量代码:改善Java程序的151个建议(第4章:字符串___建议56~59)

    建议56:自由选择字符串拼接方法 对一个字符串拼接有三种方法:加号.concat方法及StringBuilder(或StringBuffer ,由于StringBuffer的方法与StringBuil ...

  10. JDBC 练习

    建立两个表,一个水果表一个用户表. 1.要求输入账号和密码,登陆成功显示欢迎界面,失败提示错误 2.显示选择界面,输入不同的数字,显示不同的内容,,并实现不同的功能,并返回界面 import java ...