selenium之ExpectedConditions类
API中对于该类的介绍:Canned ExpectedCondition
s which are generally useful within webdriver tests。很笼统,大概意思就是在webdriver的测试中会有用,那到底有什么用呢,下面我们就来一探究竟。
该类没有构造函数,所有的方法都是静态的,所以我们可以直接用类名调用,我只介绍里面几个方法,其它方法的用法都类似,具体查api
- 1.alertIsPresent()判断alert弹框出现了没,返回值是ExpectedCondition<Alert>,我们可以这样用
public void testalertIsPresent() { dr.findElement(By.id("alert")).findElement(By.className("alert")).click();
ExpectedCondition<Alert> e = ExpectedConditions.alertIsPresent();
Alert alert = e.apply(dr);
alert.accept();
}也可以这样用
public void testalertIsPresentW() {
WebDriverWait wait = new WebDriverWait(dr,10);
dr.findElement(By.id("alert")).findElement(By.className("alert")).click();
ExpectedCondition<Alert> e = ExpectedConditions.alertIsPresent();
Alert alert = wait.until(e);
alert.accept();
}apply用了com.google.common.base.Function的方法,而until用了FluentWait的方法。那么这两者有和区别呢,通过下面这个例子介绍,
- 2. textToBePresentInElementLocated():文本是否出现在所定位的元素中
public void testtextToBePresentInElementLocated() {
WebDriverWait wait = new WebDriverWait(dr,10);
dr.findElement(By.className("wait")).click();
ExpectedCondition<Boolean> e1 = ExpectedConditions.textToBePresentInElementLocated(By.className("red"),"wait for display");
System.out.println(e1.apply(dr));//false
//System.out.println(wait.until(e1)); //报true }apply不会去等待所找元素是否存在,直接false报错no such elment。而until会在等待10秒,如果出现则返回true,否则超时。
3.visibilityOfElementLocated(),该方法是判断定位的元素是否存在,使用的方法时(),apply也会去等待
public void testvisibilityOfElementLocated() {
WebDriverWait wait = new WebDriverWait(dr,10);
dr.findElement(By.className("wait")).click();
ExpectedCondition<WebElement> e1 = ExpectedConditions.visibilityOfElementLocated(By.className("red")); System.out.println(wait.until(e1).getText()); //wait for display
System.out.println(e1.apply(dr).getText()); //wait for display }4.visibilityOf(),判断元素是否可见
public void testvisibilityOf() {
WebDriverWait wait = new WebDriverWait(dr,10);
ExpectedCondition<WebElement> e1 = ExpectedConditions.visibilityOf(dr.findElement(By.className("wait"))); System.out.println(e1.apply(dr).getAttribute("value")); //wait
//System.out.println(wait.until(e1).getAttribute("value"));//wait
}
5.visibilityOfElementLocated(),定位的元素是否可见
public void testvisibilityOfElementLocated() {
WebDriverWait wait = new WebDriverWait(dr,10);
dr.findElement(By.className("wait")).click();
ExpectedCondition<WebElement> e1 = ExpectedConditions.visibilityOfElementLocated(By.className("red")); System.out.println(wait.until(e1).getText()); //wait for display
System.out.println(e1.apply(dr).getText()); //wait for display }
以上列举了TestExpectedConditions的用法,鉴于apply会存在失败的情况,建议使用until。
PS:小插曲
下面的例子是api中关于FluentWait的用法
Sample usage: // Waiting 30 seconds for an element to be present on the page, checking
// for its presence once every 5 seconds.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class); WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
详细用法:
@Test(enabled=false)
public void testuntilWebElement() {
WebDriverWait wait = new WebDriverWait(dr,10);
WebElement we = wait.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver arg0) {
// TODO Auto-generated method stub
return arg0.findElement(By.id("user"));
}}) ;
we.sendKeys("test");
} @Test(enabled=false)
public void testuntilBoolean() {
WebDriverWait wait = new WebDriverWait(dr,10);
boolean we = wait.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver arg0) {
// TODO Auto-generated method stub
return arg0.findElement(By.id("user"));
}}).isDisplayed();
System.out.println(we);
}
两者用法目的差不多,可以根据具体情况选择使用哪种方式。
文中所用到的html例子:
http://pan.baidu.com/s/1i3jjo3b
selenium之ExpectedConditions类的更多相关文章
- 《手把手教你》系列技巧篇(七十一)-java+ selenium自动化测试-自定义类解决元素同步问题(详解教程)
1.简介 前面宏哥介绍了几种关于时间等待的方法,也提到了,在实际自动化测试脚本开发过程,百分之90的报错是和元素因为时间不同步而发生报错.本文介绍如何新建一个自定义的类库来解决这个元素同步问题.这样, ...
- Selenium Webdriver——Table类封装
WebTable.java import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebEl ...
- selenium - webdriver - Keys类(键盘操作)
Keys()类提供了键盘上几乎所有按键的方法,这个类可用来模拟键盘上的按键,包括各种组合键,如 Ctrl+A, Ctrl+X,Ctrl+C, Ctrl+V 等等 from selenium impor ...
- selenium - webdriver - ActionChains类(鼠标操作)
ActionChains 类提供了鼠标操作的常用方法: perform(): 执行所有 ActionChains 中存储的行为: context_click(): 右击: double_click() ...
- Python+Selenium框架 ---一个类文件多个测试方法情况下测试固件的写法
我们测试中,肯定需要,打开一个页面,然后测试这个页面的多个用例,才关闭这个页面,去测试其他页面,在unittest是有相关测试固件方法去支持这种行为.请看下面 # coding=utf-8 impor ...
- Selenium之ActionChains类、Keys类
ActionChains类(鼠标操作)常用于模拟鼠标的行为,比如单击.双击.拖拽等行为. 一些常用的模拟鼠标的操作方法有: click(on_element=None) --- 鼠标单击 do ...
- Selenium常见报错问题(1)- 先来认识下selenium常见异常类
如果你在跑selenium脚本时,需要某些异常不知道怎么解决时,可以看看这一系列的文章,看看有没有你需要的答案 https://www.cnblogs.com/poloyy/category/1749 ...
- selenium模块及类组织关系
问题:webdriver子模块中为什么可以直接使用类Chrome.ChromeOptions.Firefox.FirefoxProfile... 在webdriver的__init__.py文件中已经 ...
- Selenium 的基础框架类
个人写的一个selenium的base类,应该所有使用selenium的同事都会使用到: package com.hx.baserunner; import static java.io.File.s ...
随机推荐
- X3DOM新增剪裁平面节点ClipPlane支持
裁剪平面由方程Ax+By+Cz+D=0确定.所有满足[A B C D]M-1[Xe Ye Ze We]T>0的人眼坐标[Xe Ye Ze We]的点都位于该平面定义的半空间中,而该半空间以外的所 ...
- GWYAlertSelectView 选择收货地址和选择联系人
iOS 开发在app内(特别是在类似购物和旅游类)经常会用到选择,添加联系人和收货地址,而且经常都是在跳转界面,很是麻烦,今天我就自己封装了一个类似弹出视图的代码,方便了很多!demo地址: http ...
- 我的Machine Learning学习之路
从2016年年初,开始用python写一个简单的爬虫,帮我收集一些数据. 6月份,开始学习Machine Learning的相关知识. 9月开始学习Spark和Scala. 现在想,整理一下思路. 先 ...
- saltstack学习笔记1 --安装
salt官网:http://docs.saltstack.cn/zh_CN/latest/ 安装教程: - http://docs.saltstack.cn/zh_CN/latest/topics/i ...
- mysql下一个版本应该且实现并不复杂增加的常用功能
1.innodb的auto_increment应该在参考oracle的实现方式,定期持久化: 我们目前遇到个问题,出于性能考虑,我们每天会把当天处理完成的数据归到另外一张历史表,并清空,同时有可能会重 ...
- tomcat下bin文件夹下shell文件分析
在bin下面有9个sh文件,本文将逐步分析,今天就以version.sh为例 os400=false #uname取操作系统名称 如Linux 如果为OS400的操作系统 特殊处理 case &quo ...
- [vim] vim入门
1. 概述 工欲善其事 必先利其器.vim是非常好用的文本编辑器,可以将它看作是vi的进阶.绝大多数Unix系统都会内置vi编辑器,vi是文本编辑器,vim是程序编辑器.相比vi,它可以根据文件的类型 ...
- AngularJS directive 指令相关记录
.... .directive('scopeDemo',function(){ return{ template: "<div class='panel-body'>Name: ...
- SQL对字符串数组的处理详解
原文地址:SQL字符串数组操作文章出处:DIY部落(http://www.diybl.com/course/7_databases/sql/sqlServer/2007106/76999.html) ...
- EF数据库初始化策略及种子数据的添加
EF数据库初始化策略及种子数据的添加 CreateDatabaseIfNotExists 判断当前数据库连接字符串对应的数据库是否存在,若不存在则根据代码定义的model进行创建 DropCreate ...