WebDriver API——延时操作及元素等待
在自动化测试过程当中,受网络、测试设备等诸多因素的影响,我们经常需要在自动化测试脚本中添加一些延时来更好的定位元素来进行一系列的操作。
一般有这么几种方式:
1.implicitlyWait。识别对象时的超时时间。过了这个时间如果对象还没找到的话就会抛出NoSuchElement异常
2.setScriptTimeout。异步脚本的超时时间。webdriver 可以异步执行脚本,这个是设置异步执行脚本脚本返回结果的超时时间。
3.pageLoadTimeout。页面加载时的超时时间。因为webdriver 会等页面加载完毕在进行后面的操作,所以如果页面在这个超时时间内没有加载完成,那么webdriver 就会抛出异常。
4.Thread.sleep()。这是一种挂起线程然后重新唤醒的方式,不建议使用,占用系统线程资源。
package com.testngDemo; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait; public class Demo_TimeControl { public static void main(String args[])
{
WebDriver driver=new FirefoxDriver();
driver.get("http://www.baidu.com"); //设置延时操作
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);//-----页面加载时间
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//------元素等待时间(隐式等待)
driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);//----脚本执行时间
//显式等待
WebElement e = (new WebDriverWait(driver, 10)) .until(
new ExpectedCondition< WebElement>(){
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("kw"));
}
}
);
}
/**
* 自定义显式等待
* @param driver
* @param by
* @return
*/
private static WebElement webelementExplicitWait(WebDriver driver,By by)
{
return (new WebDriverWait(driver, 10)) .until(
new ExpectedCondition< WebElement>(){
@Override
public WebElement apply(WebDriver d) {
return d.findElement(by);
}
}
);
}
/**
* 判断元素是否存在
* @param driver
* @param by
* @return
*/
private static boolean isPresentElement(WebDriver driver,By by)
{
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}catch(Exception e){
return false;
}
} }
我们可以根据自己的需要来封装一些元素等待,元素查找的方法,像上面判断元素是否存在,如果查找不到就抛出异常,有的时候可能是抛错没有这样的元素,有的时候也可能是抛错元素不可见等错误,可以用Excpetion来捕获。
在timeout接口里就介绍了这前三种时间等待的方法,这里也不细加研究了。
再就是显式等待ExplicitWait,可以根据我们的需要判读在一个时间范围内这个元素是否能定位到,这个作用是比较大的,像上面的方法只是来整体的延时,到底能不能来定位到元素也不知道。但是我们也可以根据自己项目需要来对这些方法进行封装,使之更好的为我们服务。
WebDriver API——延时操作及元素等待的更多相关文章
- Webdriver API之操作(一)
一. 控制浏览器 1. 控制浏览器大小 driver.set_window_size(480,800) #浏览器宽480,高800显示 dirver.maximize_window() #浏览器最大化 ...
- Webdriver API之操作(二)
一.窗口截图 dirver.get_screenshot_as_file("D:\\report\\image\\xxx.jpg") 二.关闭窗口 dirver.close() # ...
- Python+Selenium WebDriver API:浏览器及元素的常用函数及变量整理总结
由于网页自动化要操作浏览器以及浏览器页面元素,这里笔者就将浏览器及页面元素常用的函数及变量整理总结一下,以供读者在编写网页自动化测试时查阅. from selenium import webdrive ...
- webdriver与JS操作浏览器元素
1.JQuery的选择器实例 语法 描述 $(this) 当前 HTML 元素 $("p") 所有 <p> 元素 $("p.intro") 所有 c ...
- Appium(八):Appium API(二) 元素等待、元素操作
1. 元素等待 我们在使用脚本的时候,可能会由于网络.服务器处理.电脑等原因,我们想要找的元素没有加载出来,这个时候如果直接定位就可能会报错. 这个时候我们就可以设置元素等待了. 什么叫元素等待呢? ...
- Selenium常用API的使用java语言之11-设置元素等待
WebDriver提供了两种类型的等待:显式等待和隐式等待. 1.显示等待 WebDriver提供了显式等待方法,专门针对某个元素进行等待判断. import org.openqa.selenium. ...
- 抛弃jQuery:DOM API之操作元素
原文链接:http://blog.garstasio.com/you-dont-need-jquery/dom-manipulation/ 我的Blog:http://cabbit.me/you-do ...
- Webdriver API之元素定位
Webdriver提供了8种元素定位方法:id.name.class name.tag name.link text.partial link text.xpath.css selector 一.以上 ...
- selenium webdriver——设置元素等待
如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难, 如果因为在加载某个元素时延迟而造成ElementNotVisibl ...
随机推荐
- ssm实现查看流程图
jsp <!--显示数据列表--> <tbody id="TableData" class="dataContainer" datakey=& ...
- Java集合——概述
Java集合——概述 摘要:本文主要介绍了几种集合类型以及有关的一些知识点. 集合类图 类图 类图说明 所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collecti ...
- linux下添加定时任务。
这周要做一个定时增量更新Elasticsearch索引的功能,以前没有做过定时更新,所以请教了下同事,使用crontab添加linux下的定时任务. 一.linux下定时执行任务的方法 在linux中 ...
- Maven的安装文字版(Windows/Linux/Mac)
以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_environment_setup.html,安装信 ...
- ios 6.0模拟器页面调出pop窗口消失后无法使用键盘
ios 6模拟器上,点击事件调用出pop窗口,这个窗口新创建了window,在pop窗口消失的函数中使用了makeKeyWindow,这个是将要显示的window放到最前端.发现 屏蔽这个方法后可以了 ...
- weblogic日志管理
服务器日志 每个 WebLogic Server 实例将来自子系统和应用程序的所有消息写入位于本地主机上的服务器日志文件.默认情况下,服务器日志文件位于服务器实例根目录下的 logs 目录中: 例如 ...
- Android学习笔记(35):Android活动条
在Android3.0之后,Google对UI导航设计上进行了一系列的改革,当中有一个很好用的新功能就是引入的ActionBar,用于代替3.0之前的标题栏,并提供更为丰富的导航效果. ActionB ...
- LNMPA遇到504 Gateway time-out错误的解决方法
Nginx的特点是处理静态很给力,Apache的特点是处理动态很稳定,两者结合起来便是LNMPA,nginx处理前端,apache处理后端,这样处理静态会很快,处理动态会很稳定. 当我以为安装完成以后 ...
- linux find prune排除某目录或文件
http://blog.csdn.net/ysdaniel/article/details/7995681 查找cache目录下不是html的文件 find ./cache ! -name '*.ht ...
- vue-导入静态文件
vue导入静态文件不用像网上说的那么麻烦,其实跟普通Django项目导入类似,vue项目中有一个static文件,将你的静态文件放入到里面,然后引入就好 导入的时候和普通Django程序类似:↓ &l ...