【java+selenium3】隐式等待+显式等待 (七)
一、隐式等待 -- implicitlyWait
调用方式:driver.manage().timeouts().implicitlyWait(long time, TimeUnit unit);
//隐式等待调用方式,5秒+时间单位(枚举类型)
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
注意:
1.隐式等待只能作用于元素的等待。
2.智能等待,如果元素在指定的时间内找到,则不会继续等待,否则在指定时间内未找到元素则抛出NoSuchElementException。
3.作用域是全局的,跟driver的生命周期一样,一般定义在父类中,只要设置隐式等待后,页面所有的元素都会被绑定这种等待机制,只需设置一次,全局有效(只作用于元素),直到driver实例被关闭!
二、显式等待 -- WebDriverWait(显式等待)
//调用方式
WebDriverWait wait = new WebDriverWait();
WebElement element = wait.until(ExpectedConditions.xxx)
注意:
1.除了作用于元素等待还可以实现各种场景的等待,例如页面加载等!
2.智能的等待方式,元素在指定的时间内找到,则不会继续等待,否则抛出TimeOutException.
3.非全局设置,可以针对不同的元素绑定不同的等待机制,推荐优先使用这一种方式.
4.除了可以等待元素的查找,还可以支持多种其他的等待场景(例如:当加载页面的url出现预期值,具体参见ExceptedConditions类的方法)
@Test
public void test2() {
driver.get("http://www.baidu.com");
long startTime = System.currentTimeMillis();
try {
//程序一共等待5s,默认0.5秒检查一次元素是否加载完成
WebDriverWait wait = new WebDriverWait(driver, 5);
//until方法,返回一个Boolean类型,判断元素现在是否存在在页面上。locator的元素如果可见就停止等待,如果不可见就继续等待直到超过规定的时间后,报超时异常;
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("kw")));
element.sendKeys("自动化测试!");
} catch (Exception e) {
e.printStackTrace();
}
long overTime = System.currentTimeMillis();
System.out.println("等待时间:"+(overTime-startTime)/1000+"秒");
}
如果在设置时间5s内找到元素则执行通过,如果未找到元素则抛异常TimeoutException

三、显式等待中ExpectedConditions 用法说明
//程序一共等待5s,默认0.5秒检查一次元素是否加载完成
WebDriverWait wait = new WebDriverWait(driver, 5);
//until方法,返回一个Boolean类型,判断元素现在是否存在在页面上。locator的元素如果可见就停止等待,如果不可见就继续等待直到超过规定的时间后,报超时异常
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("w")));
1.判断当前页面的title是否精确等于预期
titleIs( String title)
2.判断当前页面的title是否包含预期字符串
titleContains( String title)
3.判断当前页面的url是否精确等于预期
urlToBe( String url)
4.判断当前页面的url是否包含预期字符串
urlContains( String fraction)
5.字符串正则表达式
urlMatches( String regex)
6.判断元素是否出现,只要有一个元素出现,就通过。(代表在不代表可见)
判断是否至少有 1 个元素存在于 dom 树中。举个例子,如果页面上有 n 个元素的 class 都是’column-md-3’,那么只要有 1 个元素存在,这个方法就返回 True。
presenceOfElementLocated( By locator)
7.判断元素是否出现,必须所有符合条件的元素都加载出来,才通过。
presenceOfElementsLocated( By locator)
8.如果给定元素是可见的且具有非零大小,否则为null
elementIfVisible(WebElement element)
9.判断元素是否出现。
presenceOfAllElementsLocatedBy( By locator)
10.传入类型为:locator , 判断某个元素是否可见. 可见代表元素非隐藏,并且元素宽和高都不等于 0
visibilityOfElementLocated( By locator)
11.判断某组元素是否可见
visibilityOfAllElementsLocatedBy( By locator)
12.传入类型为:element
判断某个元素是否可见. 可见代表元素非隐藏,并且元素宽和高都不等于 0
visibilityOfAllElements(final List<WebElement> elements)
13.判断某个元素中的text是否包含了预期的字符串;
textToBePresentInElement( WebElement element, String text)
14.判断某个元素中的 text 是否 包含 了预期的字符串
textToBePresentInElement(By locator, String text)
15.判断某个元素中的 text 是否 包含 了预期的字符串
textToBePresentInElementLocated(final By locator, final String text)
16.判断某个元素中的 value 属性是否包含 了预期的字符串
textToBePresentInElementValue( WebElement element, String text)
17.判断某个元素中的 value 属性是否包含 了预期的字符串
textToBePresentInElementValue(final By locator, final String text)
18.判断该 frame 是否可以 switch进去,如果可以的话,返回 True 并且 switch 进去,否则返回 False
frameToBeAvailableAndSwitchToIt(final String frameLocator)
19.断该 frame 是否可以 switch进去,如果可以的话,返回 True 并且 switch 进去,否则返回 False
frameToBeAvailableAndSwitchToIt(final By locator)
20.某个元素中是否不存在于dom树或不可见;
invisibilityOfElementLocated(final By locator)
21.判断带有文本的元素要么不可见,要么文本不存在于元素上
invisibilityOfElementWithText(final By locator, final String text)
22.判断某个元素中是否可见并且是enable的,这样的话才叫clickable;
elementToBeClickable(final By locator)
23.判断某个元素中是否可见并且是enable的,这样的话才叫clickable;
elementToBeClickable(final WebElement element)
24.判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是 否刷新了。
stalenessOf(final WebElement element)
25.判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是 否刷新了。
refreshed(final ExpectedCondition<T> condition)
26.页面元素处于被选中状态
elementToBeSelected(WebElement element)
27.判断某个元素的选中状态是否符合预期,传入element
elementSelectionStateToBe( WebElement element, boolean selected)
28.判断某个元素是否被选中了,一般用在下拉列表;
elementToBeSelected(By locator)
29.判断某个元素的选中状态是否符合预期,传入locator
elementSelectionStateToBe(final By locator, final boolean selected)
30.判断页面上是否存在alert。
alertIsPresent()
注意: 从原文档一个个扒出来翻译的,有不对的地方还请批评指正。
参考原地址:Selenium 中ExpectedConditions 用法说明(最全整理)
【java+selenium3】隐式等待+显式等待 (七)的更多相关文章
- “全栈2019”Java多线程第三十一章:中断正在等待显式锁的线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Java :构造器中的显式参数和this隐式参数
1.构造器 写一个Java类,首先要先从构造器开始,构造器与类同名,在构造类的对象时会先从构造器开始. 构造器总是伴随着new操作符的执行而被调用. 构造器主要是用来初始化类的实例域. 构造器的特点: ...
- Java并发编程系列-(4) 显式锁与AQS
4 显示锁和AQS 4.1 Lock接口 核心方法 Java在java.util.concurrent.locks包中提供了一系列的显示锁类,其中最基础的就是Lock接口,该接口提供了几个常见的锁相关 ...
- Java编程的逻辑 (71) - 显式锁
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- android之intent显式,显式学习
intent,意图 当从一个Activity到另一个Activity时调用,这里重点学习显式,隐式的使用 使用语句上的区别: 隐式意图: 显式意图: setAction ...
- 深入理解Java内置锁和显式锁
synchronized and Reentrantlock 多线程编程中,当代码需要同步时我们会用到锁.Java为我们提供了内置锁(synchronized)和显式锁(ReentrantLock)两 ...
- Java编程的逻辑 (72) - 显式条件
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- c# implicit explicit关键字(隐式和显式数据类型转换)
implicit关键字用于声明隐式的用户定义类型转换运算符.(explicit反之)explicit则用于显示转换用户自定义类型.static implicit operator target_typ ...
- IOS动画隐式,显式,翻页
// ViewController.m // IOS动画0817 // // Created by 张艳锋 on 15/8/17. // Copyright (c) 2015年 张艳锋. Al ...
随机推荐
- Jmeter系列(20)- 录制控制器
作用:相当于对录制的脚本进行分组存放,放在同一个线程组里面:录制脚本的时候,选择线程组下面想要存放的录制控制器中
- jmeter5.2版本 配置元件之逻辑控制器详解
1.简单控制器(Simple Controller) 作用:将多个请求放置在一起,但是没有逻辑上的操作,进行一个简单的分组,一般是由于分组后的请求需要进行统一的某个操作或者存在共同的因素.在简单控制器 ...
- 关于spring cloud项目搭建问题
spring cloud 是基于spring boot搭建,父项目中引入依赖时候一定要将spring boot和spring cloud 的版本号对应起来,要不然jar包报错,项目也启动不起来!!!下 ...
- Python-对Pcap文件进行处理,获取指定TCP流
通过对TCP/IP协议的学习,本人写了一个可以实现对PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鉴于为了学习,没有采用第三方包解析pcap,而是对bytes流进行解析,其核心思想 ...
- 鸿蒙内核源码分析(进程回收篇) | 老父亲如何向老祖宗临终托孤 ? | 百篇博客分析OpenHarmony源码 | v47.01
百篇博客系列篇.本篇为: v47.xx 鸿蒙内核源码分析(进程回收篇) | 临终前如何向老祖宗托孤 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管 ...
- Python爬虫:通过做项目,小编了解了酷狗音乐的加密过程
1.前言 小编在这里讲一下,下面的内容仅供学习参考,切莫用于商业活动,一经被相关人员发现,本小编概不负责!读者切记切记. 2.获取音乐播放列表 其实,这就是小编要讲的重点,因为就是这部分用到了加密. ...
- MySQL where子句的使用
MySQL WHERE 子句 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是 ...
- 「JOISC 2020 Day2」变态龙之色 题解
题目传送门 注意 同性必定不同色 必有一个同色异性,且不相互不喜欢 Solution 我们发现,我们问题比较大的就是如何确定性别问题.我们可以一个一个加进去,在原来已经确定了的二分图上增加新的性别关系 ...
- 题解 [HNOI2019]序列
题目传送门 题目大意 给出一个\(n\)个数的数列\(A_{1,2,...,n}\),求出一个单调不减的数列\(B_{1,2,...,n}\),使得\(\sum_{i=1}^{n}(A_i-B_i)^ ...
- 01_vue实例_数据_方法
创建实例 var vm = new Vue( { //选项 } ) 数据对象 // 我们的数据对象 var data = { a: 1 } // 该对象被加入到一个 Vue 实例中 var vm = ...