【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 ...
随机推荐
- 10-Linux与windows文件互传-pscp坑---- 'pscp' 不是内部或外部命令,也不是可运行的程序或批处理文件
1.下载pscp工具http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 2.拷贝到C:\Windows\System32 如 ...
- 通过html5 的EventSource来进行数据推送
以往我们要获取服务器的数据更新,一般通过ajax的定时请求,不过这样效率就低了.我们通过html5的EventSource可以很方便的获取服务器的数据更新,不过IE好像不支持. 例1如下: ind ...
- windows常用运行命令总结
开始→运行→命令集锦 winver---------检查Windows版本 wmimgmt.msc----打开windows管理体系结构(WMI) wupdmgr--------windows更新程序 ...
- css样式优先级和权重问题
内联样式: <div style="font-size: 12px;">姓名</div> 外部样式: <link rel="styleshe ...
- beego启动找不到conf的原因
beego配置文件路径如下: app.conf内容 httpaddr = "192.168.199.178" httpport = appname = SecProxy runmo ...
- 三维dem
关注World wind Java,<World wind Java三维地理信息系统开发指南随书光盘 1. 下载worldwind java sdk 下载地址:http://builds.wor ...
- Laravel 加载自定义的 helpers.php 函数
Laravel 提供了很多 辅助函数,有时候我们也需要创建自己的辅助函数. 必须 把所有的『自定义辅助函数』存放于 bootstrap 文件夹中. 并在 bootstrap/app.php 文件的最顶 ...
- Mina 系列(四)之KeepAliveFilter -- 心跳检测
Mina 系列(四)之KeepAliveFilter -- 心跳检测 摘要: 心跳协议,对基于CS模式的系统开发来说是一种比较常见与有效的连接检测方式,最近在用MINA框架,原本自己写了一个心跳协议实 ...
- 检查Makefile中的tab
转:http://stackoverflow.com/questions/16931770/makefile4-missing-separator-stop makefile has a very s ...
- 2018.09.30 bzoj3551:Peaks加强版(dfs序+主席树+倍增+kruskal重构树)
传送门 一道考察比较全面的题. 这道题又用到了熟悉的kruskal+倍增来查找询问区间的方法. 查到询问的子树之后就可以用dfs序+主席树统计答案了. 代码: #include<bits/std ...