一、隐式等待


package com.automation.waits;

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.chrome.ChromeDriver; /**
* 类说明:隐式等待
* <br/>
* @version 1.0
* 2016年11月22日 下午8:56:14
*/
public class ImplictWait { public static void main(String[] args) {
//1.打开浏览器;
System.setProperty("webdriver.chrome.driver", "D:\\workspace\\A_Test\\resource\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
//2.;浏览器最大化
driver.manage().window().maximize();
/**
* 3.设置全局隐式等待时间;
* <br/>使用implicitlyWait方法,设定查找元素的等待时间;
* <br/>当调用findElement方法的时候,没有立刻找到元素,就会按照设定的隐式等待时长等待下去;
* <br/>如果超过了设定的等待时间,还没有找到元素,就抛出NoSuchElementException异常;
*/
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //设定隐式等待时间为10秒;
//3.打开搜狗首页;
driver.get("http://www.sogou.com/"); try {
//4.定位搜狗首页:输入框对象、搜索按钮;
WebElement inputBox = driver.findElement(By.id("query"));
WebElement searchButton = driver.findElement(By.id("stb")); //5.在输入框中输入元素,然后点击搜索按钮。
inputBox.sendKeys("输入框元素被找到了。");
searchButton.click(); } catch (NoSuchElementException e) { //如果元素没有找到,则抛出NoSuchElementException异常。
e.printStackTrace();
}
}
}

隐式等待可以设定,但是有一个缺点:
缺点:如果我们在代码中设定了隐式等待时间,当使用driver.findElement(By.*)

方法去查找页面元素的时候,如果没有第一时间找到元素,程序会等待下去。例如设置了隐式等待时间为10秒,某个元素没有一开始就出现,而是在第5秒的时候
出现了,程序依然会等待10秒,然后才向下执行;
所以,推荐使用显示等待。

二、显式等待


显示等待比隐式等待,更加节约测试执行的时间;
优势:
1. 等待的方法多,都是ExpectedConditions类中的自带方法,可以进行不同的等待判断;
2. 等待灵活,等设置显示等待10秒,而在第5秒元素出现了,那么就会立即向下执行,而不会继续等待;只有超过了10秒,才抛出NoSuchElementException异常;


ExpectedConditions类自带的等待方法:


粘贴的图像816x232 3.37 KB

最常用的是第三个,判断元素在页面中是否存在:presenceOfElementLocated(By locator)


package com.automation.waits;

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait; /**
* 类说明:显示等待
* <br/>
* @version 1.0
* 2016年11月22日 下午9:38:12
*/
public class explictWait { public static void main(String[] args) {
//1.打开浏览器;
System.setProperty("webdriver.chrome.driver", "D:\\workspace\\A_Test\\resource\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
//2.;浏览器最大化
driver.manage().window().maximize();
//3.打开搜狗首页;
driver.get("http://www.baidu.com/"); /*
* 4.设置显示等待时长:10秒;
*/
WebDriverWait wait = new WebDriverWait(driver, 10); //5.显示等待:标题是否出现:
try {
wait.until(ExpectedConditions.titleContains("百度一下,你就知道"));
System.out.println("百度首页的标题出现了:百度一下,你就知道");
} catch (NoSuchElementException e) { //如果标题没有找到,则抛出NoSuchElementException异常。
e.printStackTrace();
System.out.println("百度首页的标题没有找到");
} //6.显示等待:搜索框是否出现-------最常用的显示等待;
try {
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("su")));
System.out.println("百度首页的搜索输入框出现了");
} catch (NoSuchElementException e) { //如果标题没有找到,则抛出NoSuchElementException异常。
e.printStackTrace();
System.out.println("百度首页的输入框没有找到");
} //7.显示等待:页面搜索按钮是否可以被点击;
try {
wait.until(ExpectedConditions.elementToBeClickable(By.id("kw")));
System.out.println("百度首页的搜索按钮可以被点击");
} catch (NoSuchElementException e) { //如果标题没有找到,则抛出NoSuchElementException异常。
e.printStackTrace();
System.out.println("百度首页的搜索按钮找不到");
}
}
}

三、自定义显式等待

package com.automation.waits;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait; /**
* 类说明:自定义显示等待
* <br/>
* @version 1.0
* 2016年11月22日 下午10:00:12
*/
public class CustomExplictWait { public static void main(String[] args) {
//1.打开浏览器;
System.setProperty("webdriver.chrome.driver", "D:\\workspace\\A_Test\\resource\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
//2.;浏览器最大化
driver.manage().window().maximize();
//3.打开搜狗首页;
driver.get("http://www.baidu.com/"); /*
* 4.自定义显示等待,在等待代码中找到某个元素;
*/
WebElement textInputBox =
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver driver){
return driver.findElement(By.xpath("//*[@type='text']"));
}
});
textInputBox.sendKeys("自定义显式等待1"); /*
* 5.自定义显示等待,获取页面元素//a[text()='关于搜狗']的文本值
*/
String text =
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<String>() {
@Override
public String apply(WebDriver driver){
return driver.findElement(By.xpath("//a[text()='关于搜狗']")).getText();
}
});
System.out.println(text); //打印文本值
}
}

自定义显式等待,要注意:

粘贴的图像915x200 9.17 KB

期望值是WebElement类型,那么返回值一定也是WebElement类型;

我们专注于持续集成,更多原创请关注:www.hordehome.com

基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待的更多相关文章

  1. 基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍

    1. 启动浏览器 前边有详细介绍启动三种浏览器的方式(IE.Chrome.Firefox): private WebDriver driver = null; private String chrom ...

  2. 基于Selenium2+Java的UI自动化(1) - 原理和环境搭建

    一.Selenium2的原理 Selenium1是thoughtworks公司的一个产品经理,为了解决重复烦躁的验收工作,写的一个自动化测试工具,其原理是用JS注入的方 式来模拟人工的操作,但是由于J ...

  3. 基于Selenium2+Java的UI自动化(6)-操作Alert、confirm、prompt弹出框

    alert.confirm.prompt这样的js对话框在selenium1 时代处理起来比价麻烦,常常要用autoit来帮助处理.而现在webdriver对这些弹出框做了专门的处理,使用seleni ...

  4. 基于Selenium2+Java的UI自动化(5) - 执行JavaScript脚本

    一.操作日期选择框 QQ图片20161118215530.png1336x545 22.6 KB 说明:日期选择框大部分是不支持前端输入的,因为这个对象是 readOnly,只读属性,selenium ...

  5. 基于Selenium2+Java的UI自动化(2) - 启动浏览器

    一.准备工作 我们常用的浏览器主要有三个:chrome.Firefox.IE:其中chrome 和 IE 需要下载驱动程序,才能启动浏览器,注意驱动程序有32位和64位两种. 另外:如何查看本机的浏览 ...

  6. 基于Selenium2+Java的UI自动化(3) - 页面元素定位

    一.几种网页定位方式 webdriver的页面定位很灵活,提供了8种定位方式: 其中,常见的有三种:id .cssSelector .xpath: 一个元素如果存在 id 属性,则这个 id 的值,在 ...

  7. (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待

    selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...

  8. Java并发之显式锁和隐式锁的区别

    Java并发之显式锁和隐式锁的区别 在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchr ...

  9. selenium-webdriver中的显式等待与隐式等待

    在selenium-webdriver中等待的方式简单可以概括为三种: 1 导入time包,调用time.sleep()的方法传入时间,这种方式也叫强制等待,固定死等一个时间 2 隐式等待,直接调用i ...

随机推荐

  1. 使IE6下PNG背景透明的七种方法任你选

    原文地址:http://blog.csdn.net/mosliang/article/details/6760028 相信如何解决png在ie6下透明的问题困扰了很多人.为了追求更好的页面效果,很多人 ...

  2. 其实想要完全理解MVC框架并不是太容易

    完全理解MVC并不是很容易.使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考.同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难.每个构件在使用之前都需 ...

  3. Spring @Aspect进行类的接口扩展

    Spring @Aspect进行类的接口扩展: XML: <?xml version="1.0" encoding="UTF-8"?> <be ...

  4. 手机APP测试思路及测试要点

    一  手机APP测试基本思路: 测试计划--测试方案--测试用例--执行: 很多小公司都没有具体的需求,项目时间也比较紧,而且流程也不是很严谨,在这样的情况之下,作为测试的我们,该怎样去对项目进行用例 ...

  5. 转:C# Process.Start()方法详解

    http://blog.csdn.net/czw2010/article/details/7896264 System.Diagnostics.Process.Start(); 能做什么呢?它主要有以 ...

  6. leetcode刷题总结

    题外话 今年大三,现正值寒假时间,开学就开始大三下学期的生活了. 在大三临近结束的时间,也就是复习考试的时间里,我每天都会用早上的时间来刷codewars.刚开始玩的时候,一到8kyu的题目如果稍微难 ...

  7. 字符集编码与Python(二)Unicode与utf-8

    Python中的Unicode和utf-8 上一篇提过了字符集的历史其中简单的讲解了Unicode与utf-8的关系,简单的总结一下:   utf-8和utf-16 .utf-32是一类,实现的功能是 ...

  8. C++编程练习(13)----“排序算法 之 堆排序“

    堆排序 堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆(也叫最大堆):或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆(也叫最小堆). 最小堆和最大堆如 ...

  9. ionic,Angular 开发实践

    1.实践参考 http://www.jianshu.com/p/ea0dcf1d31c9 原文思路搭建 2. 环境搭建步骤 : a. 安装node b.安装 cordova      sudo   n ...

  10. mdadm命令详解及实验过程

    一.概念 mdadm是multiple devices admin的简称,它是Linux下的一款标准的软件 RAID 管理工具,作者是Neil Brown 二.特点 mdadm能够诊断.监控和收集详细 ...