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 ...
随机推荐
- K&R——第五章 指针与数组
#include <stdio.h> #define maxsize 5000 char buf[maxsize]; char *head = buf; char *new(int siz ...
- spring-cloud - 基础环境搭建
spring-cloud中文文档:https://springcloud.cc/ spring-cloud中文导航:http://springcloud.fun/ 文章纯属用于个人学习的一个归纳,哪里 ...
- Linux内核源码分析--内核启动之zImage自解压过程
参考: http://blog.chinaunix.net/uid-20543672-id-3018233.html Linux内核编译流程分析 linux2.6内核启动分析--李枝果(不看是你的损失 ...
- python解析xml文件时使用ElementTree和cElementTree的不同点;iter
在python中,解析xml文件时,会选用ElementTree或者cElementTree,那么两者有什么不同呢? 1.cElementTree速度上要比ElementTree快,比较cElemen ...
- 表现层 JSP 页面实现
一.实验介绍 1.1 实验内容 本节课程主要利用 easyUI 实现系统的前端页面. 1.2 实验知识点 easyUI JavaScript html 1.3 实验环境 JDK1.8 Eclipse ...
- Chrome内核保存为mhtml(单网页)
在地址栏输入:chrome://flags 回车 然后Ctrl+f查找mhtml Tips: 如果网页图片看不太清可以CTRL+鼠标滚轮放大网页 如果系统原因以及其它因素可以下载:QQ浏览器(默认保 ...
- android客户端向服务器端验证登陆方法的实现2
一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html android获取web服务 ...
- .net 4.0 网站发布(转)
http://www.cnblogs.com/daomul/archive/2013/05/23/3095232.html 1. 进入解决方案的web项目下,右击项目选择 "发布(B)&qu ...
- iOS 摇一摇的实现
- (void)viewDidLoad { [super viewDidLoad]; [[UIApplication sharedApplication] setApplicationSupports ...
- HDU-4930 Fighting the Landlords 多校训练赛斗地主
仅仅须要推断一个回合就能够了,枚举推断能够一次出全然部牌或者大过对面的牌的可能,注意的是4张同样的牌带两张牌的话是能够被炸弹炸的. #include <iostream> #include ...