该篇文章记录本人在学习及使用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. 【Win 10 应用开发】Web授权示例:获取新浪微博的授权码

    在使用类似微博的开放API的时候,会涉及到授权的问题,就拿微博来说,当用户在你的应用中需要调用微博API来处理一些事情时,你首先要让用户登录微博,得到用户授权后,才能调用微博API. 授权通常通过一个 ...

  2. 前端学HTTP之报文起始行

    前面的话 如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了.HTTP报文是在HTTP应用程序之间发送的简单的格式化数据块,每条报文都包含一条来自客户端的请求,或者一条来自服务器的 ...

  3. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  4. geotrellis使用(二十三)动态加载时间序列数据

    目录 前言 实现方法 总结 一.前言        今天要介绍的绝对是华丽的干货.比如我们从互联网上下载到了一系列(每天或者月平均等)的MODIS数据,我们怎么能够对比同一区域不同时间的数据情况,采用 ...

  5. Oracle体系结构总结

    1.Oracle 体系结构摘要图 2.Oracle 体系结构相关笔记 1.Oracle 体系结构摘要图 2.Oracle 体系结构相关笔记 可参考Oracle Architecture系列随堂笔记: ...

  6. 本博客现已迁移到chuxiuhong.com

    欢迎大家访问,我会暂时保留这个博客的更新,实现两个博客的同步. 新博客地址: http://chuxiuhong.com

  7. WCF Basics - FAQs Series【WCF基础----问答系列教程】

    WCF学习系列一[WCF Interview Questions-Part 1 翻译系列] WCF学习系列二---[WCF Interview Questions – Part 2 翻译系列] WCF ...

  8. .NET 实现并行的几种方式(一)

    好久没有更新了,今天来一篇,算是<同步与异步>系列的开篇吧,加油,坚持下去(PS:越来越懒了). 一.Thread 利用Thread 可以直接创建和控制线程,在我的认知里它是最古老的技术了 ...

  9. 几道web前端练习题目

    在 HTML 语言中,以下哪个属性不是通用属性?A]<class>B]<title>C]<href>D]<style> 在线练习:http://hove ...

  10. C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现

    ”摇一摇周边“是微信提供的一种新的基于位置的连接方式.用户通过“摇一摇”的“周边”页卡,可以与线下商户进行互动,获得商户提供的个性化的服务.微信4月份有一个赠送摇一摇设备的活动,我们有幸获得赠送资格, ...