【slenium专题】Webdriver同步设置
Webdriver同步设置常用等待类主要如下图所示

注:support.ui包内类主要实现显性等待功能,timeouts()内方法主要实现隐性等待功能
一.线程休眠
Thread.sleep(long millis)
二.隐形等待
隐性等待:设置一次,driver整个生命周期中都在使用,不需要针对元素明确设置
driver.manage().timeouts().implicitlyWait(long outTime, TimeUnit unit);
全局设置,设置driver执行所有定位元素操作的超时时间
Parameters:outTime– 超时等待时间;unit– 时间单位.
Ex.
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//超时等待时间为10S
三.显性等待
显性等待:需要等待的元素定位时需要逐一明确调用该等待方法

Figure 1 Support.ui包常用类UML
[常用等待模板]
- 等待元素加载
1)WebDriverWait
new WebDriverWait(WebDriver driver, long timeOutInSeconds).until(ExpectedConditions.presenceOfElementLocated(By by))
注解:
- Parameters:driver-webdriver; timeOutInSeconds-超时等待时间(s); by-元素locator
- timeOutInSeconds范围内,等待满足until()方法中的条件,即刻跳出等待。
- 超出timeOutInSeconds,抛出异常.
2)FluentWait
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(long timeOut, TimeUnit unit)
.pollingEvery(long duration, TimeUnit unit)
.ignoring(exceptionType);
wait.until(ExpectedConditions.presenceOfElementLocated(By.by));
注解:
- Parameters:driver-webdriver;timeOut -超时等待时间(s);unit-时间单位; by-元素locator;
duration-查找元素时间间隔 ;exceptionType-忽略异常类型,例如 默认NoSuchElementException.class
- timeOut范围内,driver每隔dration定位一次元素,若遇到exceptionType则继续等待,直到满足until()方法中的条件,即刻跳出等待。
- 超出timeOutInSeconds仍未满足until条件,抛出异常.
2.等待并获取元素—仅需要修改until方法体
WebElement element = wait.until(
new ExpectedCondition<WebElement>(){
@Override
public WebElement apply( WebDriver driver) {
return driver.findElement( By by);
}
}
);
注解:
- Parameters:driver-webdriver,从WebDriverWait|FluentWait实例化方法中获取; by-元素locator
- Return:若定位到元素,返回webelement;否则报异常
[案例]
- 等待页面元素加载
- WebDriverWait
Wait<WebDriver> wait = new WebDriverWait(driver,10); wait.until(
ExpectedConditions. presenceOfElementLocated(By.id("myDynamicElement"))
);
方法功能:定位id=' myDynamicElement'的元素,超时等待时间为10S
- FluentWait
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(60, TimeUnit.SECONDS)
.pollingEvery(10, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
方法功能:定位id=' myDynamicElement'的元素,超时等待时间为60S,每隔10S定位一次,遇到NoSuchElementException报错忽略,继续等待直到超过60s。
- 等待并获取页面元素
- WebDriverWait
Wait<WebDriver> wait = new WebDriverWait(driver, 10); WebElement e = wait.until(
new ExpectedCondition< WebElement>(){ @Override
public WebElement apply( WebDriver d) {
return d.findElement( By.id( " myDynamicElement " ));
}
}
);
方法功能:定位id=' myDynamicElement'的元素,超时等待时间为10S,若定位到元素,直接返回元素
- FluentWait
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(60, TimeUnit.SECONDS)
.pollingEvery(10, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class); WebElement element= wait.until(
new ExpectedCondition<WebElement>() {
@Override
public WebElement apply( WebDriver d) {
return d.findElement( By.id( " myDynamicElement " ));
}
}
);
方法功能:定位id=' myDynamicElement'的元素,超时等待时间为60S,每隔10S定位一次,60s内遇到NoSuchElementException报错忽略,继续等待;若定位到元素,直接返回该页面元素。
如果只是仅仅想判断页面是不是加载到某个地方了,就可以用第一种方法; 但如果需要得到某个WebElement,两种方式都可以,只是第一种方式还需要再多一步获取的操作.
四.Wait
FluentWait类是Wait接口的实现,直接使用wait接口可以更灵活的完成您需要的等待功能,例如
Wait w = new Wait(){
@Override
public boolean until() {
return webElement.isDisplayed();
}
};
这种等待的方式,据说在加载js代码的时候做判断会比较方便,目前没有调试成功。
五、其他
1.等待页面加载
driver.manage().timeouts().pageLoadTimeout(100, SECONDS);
注解:
- pageloadTimeout方法只适用于firefox浏览器,Chrome等其他浏览器并不适用,但我们可以自己实现一个定时器
- 该方法设置页面加载超时时间为100s
driver.manage().timeouts().setScriptTimeout(100,SECONDS);
尚未调试通过
【slenium专题】Webdriver同步设置的更多相关文章
- MySQL 5.5主从同步设置教程
先修改Master(10.1.123.197)的 my.cnf 配置 在 [mysqld] 中新增以下内容 log-bin=mysql-bin log-bin-index=mysql-bin.inde ...
- vscode同步设置&扩展插件
首先安装同步插件: Settings Sync 第二部进入你的github如图: 打开设置选项: 新建一个token: 如图: 记住这个token值 转到vscode 按shift+alt +u ...
- VSCode 同步设置及扩展插件 实现设备上设置统一
准备工作:电脑上需安装VSCode,拥有一个github账户.实现同步的功能主要依赖于VSCode插件 "Settings Sync" Setting Sync 可同步包含的所有扩 ...
- mysql主主同步设置
mysql主主同步设置 主主同步设置是同等的地位,所以以下操作在两台机器上都需要进行而且操作是相同的. 服务器 服务器代号 IP hostname A 192.168.70.128 Debian1 B ...
- VSCode 如何同步设置
微软新推出的 VSCode 是一款开源.轻量.良心的开发工具,一经问世,迅速受到全球广泛开发者的好评与青睐,威风之下有干掉 Sublime Text 的趋势.然而有不少 VSCode 使用者吐槽其不能 ...
- NTP网络授时服务器部署及网络时钟同步设置说明
NTP网络授时服务器部署及网络时钟同步设置说明 NTP网络授时服务器部署及网络时钟同步设置说明 本文由安徽京准科技提供@请勿转载. 一.前言 1.NTP简介 NTP是网络时间协议(Network T ...
- mycat数据库集群系列之mysql主从同步设置
最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考.本次系列终结大概包括以下内容:多数据库安装.mycat部署安装.数据库之读写分离 ...
- SVN库实时同步设置
为了安全起见,SVN服务器除了做定时全量备份和增量备份以外,如条件允许,可做实时备份. 这需要2台机器,一台是master server,另一台做mirror server.master做主服务,mi ...
- SQL2008 R2 主从数据库同步设置
一.准备工作: 主数据库服务器: OS:Windows Server 2008 R2 DB: SQL Server 2008 R2 Hostname : CXMasterDB IP: 192.1 ...
随机推荐
- 3-QT程序运行时报错E:\SogouInput\6.7.0.0329\程序异常终止,该怎么解决?
https://bbs.csdn.net/topics/390653779 出现这个错误的原因,使用声明的对象时,没有使用new对对象进行实例化. 包括:数组.
- jDeveloper运行慢
最近在使用 Jdeveloper 10.1.3.3 版本时发现速度奇慢无比,后经Google,发现如下解决方案:在 jdev.conf 文件的末尾加上如下两行,速度即可得到显著的提高. AddVMOp ...
- .NET Utils 辅助类
using System;using System.Diagnostics;using System.IO;using System.Reflection;using System.Runtime.I ...
- program by the way......
ostrich birds fruit apple constructor height weight method overload override base sub inherit extend ...
- 2、HttpClient修改处理策略Strategy
HttpClient提供了很多接口,让我们能自定义处理逻辑,这些接口可以在AbstractHttpClient中找到: setAuthSchemes(AuthSchemeRegistry); setC ...
- Java代码实现依赖注入
http://zhangjunhd.blog.51cto.com/113473/126545 这里将模仿Spring实现一种基于xml配置文件的依赖注入机制.文件中将实现3中注入,一是单值注入,包括i ...
- Jfinal框架是什么框架?适用于什么项目呢?
Jfinal框架是什么框架?适用于什么项目呢? jfinal 基于spring MVC研发的框架,操作简单.节省代码,适用于所有web项目.适合中小型项目开发.10分钟写出一个页面的增删改查.目前所在 ...
- 解决启动nginx时报80端口被占用的问题
如何解决启动nginx时报80端口被占用 最近公司的的一个服务器上需要部署多个项目,但80端口只有一个,所有只有使用Nginx来代理,当访问域名时就可以自动 转到IP:端口号,而不需要在域名后面加端口 ...
- 2018.07.20 bzoj3211: 花神游历各国(线段树)
传送门 维护区间开方,区间求和.这个是线段树常规操作. 显然一个数被开方若干次之后要么是1,要么是0,所以用线段树维护区间最大和区间和,如果区间最大不超过1就剪枝剪掉,不然就继续递归直到叶节点时停下进 ...
- 21 Survival of Desert Life 沙漠生命的延续
Survival of Desert Life 沙漠生命的延续 ① Some desert animals can survive the very strong summer heat and dr ...