基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待
一、隐式等待
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类自带的等待方法:
最常用的是第三个,判断元素在页面中是否存在: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); //打印文本值
	}
}
自定义显式等待,要注意:
期望值是WebElement类型,那么返回值一定也是WebElement类型;
我们专注于持续集成,更多原创请关注:www.hordehome.com
基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待的更多相关文章
- 基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍
		
1. 启动浏览器 前边有详细介绍启动三种浏览器的方式(IE.Chrome.Firefox): private WebDriver driver = null; private String chrom ...
 - 基于Selenium2+Java的UI自动化(1) - 原理和环境搭建
		
一.Selenium2的原理 Selenium1是thoughtworks公司的一个产品经理,为了解决重复烦躁的验收工作,写的一个自动化测试工具,其原理是用JS注入的方 式来模拟人工的操作,但是由于J ...
 - 基于Selenium2+Java的UI自动化(6)-操作Alert、confirm、prompt弹出框
		
alert.confirm.prompt这样的js对话框在selenium1 时代处理起来比价麻烦,常常要用autoit来帮助处理.而现在webdriver对这些弹出框做了专门的处理,使用seleni ...
 - 基于Selenium2+Java的UI自动化(5) - 执行JavaScript脚本
		
一.操作日期选择框 QQ图片20161118215530.png1336x545 22.6 KB 说明:日期选择框大部分是不支持前端输入的,因为这个对象是 readOnly,只读属性,selenium ...
 - 基于Selenium2+Java的UI自动化(2) - 启动浏览器
		
一.准备工作 我们常用的浏览器主要有三个:chrome.Firefox.IE:其中chrome 和 IE 需要下载驱动程序,才能启动浏览器,注意驱动程序有32位和64位两种. 另外:如何查看本机的浏览 ...
 - 基于Selenium2+Java的UI自动化(3) - 页面元素定位
		
一.几种网页定位方式 webdriver的页面定位很灵活,提供了8种定位方式: 其中,常见的有三种:id .cssSelector .xpath: 一个元素如果存在 id 属性,则这个 id 的值,在 ...
 - (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待
		
selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...
 - Java并发之显式锁和隐式锁的区别
		
Java并发之显式锁和隐式锁的区别 在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchr ...
 - selenium-webdriver中的显式等待与隐式等待
		
在selenium-webdriver中等待的方式简单可以概括为三种: 1 导入time包,调用time.sleep()的方法传入时间,这种方式也叫强制等待,固定死等一个时间 2 隐式等待,直接调用i ...
 
随机推荐
- jquery动态加载 去除js
			
!-- 这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getscript("test.js&quo ...
 - javascript 简单工厂
			
function detail() { this.imgArr = []; this.codeArr = []; } detail.prototype.addimg = function(img) { ...
 - CODEFORCES 125E MST Company 巧用Kruskal算法
			
题意:给定一个带权边无向图,求最小生成树,且满足第一个节点的度为固定的k 无解则输出-1 数据规模: 节点数n和限制k<=5000 边数m<=10^5 时限8sec 思路: 首先时限比较宽 ...
 - ssh配置文件及问题解决
			
一 ssh的配置文鉴模板 Host AAA User gitolite3 HostName IP地址 IdentityFile ~/.ssh/key 二 下载代码的方法 1 ssh git2 git ...
 - 从你的全世界切过(胡说八道支持向量机SVM小故事)
			
背景 据说很久很久以前, 澳门有一家"胡说八道大赌场", 专门提供各种奇奇怪怪的玩法. 其中有一个赌博叫"从你的全世界切过"(连名字也这么奇怪). 玩法是在一张 ...
 - Android jni 编程2(对基本类型一维整型数组的操作)
			
参考教程和这位博主的对一维数组的处理,主要包括以下三种类型: //传入一维数组,无返回值 public native void arrayEncode(int[] arr); //传一个一维数组和数组 ...
 - iOS开发之App主题切换完整解决方案(Swift版)
			
本篇博客就来介绍一下iOS App中主题切换的常规做法,当然本篇博客中只是提到了一种主题切换的方法,当然还有其他方法,在此就不做过多赘述了.本篇博客中所涉及的Demo完全使用Swift3.0编写完成, ...
 - 支持缩放的fresco图片控件 —— fresco sample: ZoomableDraweeView
			
最近在实现一个类似淘宝中的评论列表的功能,其中要在列表中显示评论图,点击图片后显示大图进行查看,各家app几乎都会有这样的功能. 可以看到,一个体验较好的查看大图的基本功能有, 第一,左右滑动时切换图 ...
 - 本地Solr服务器搭建
			
一.Solr官网下载http://lucene.apache.org/solr/下载Solr项目文件 在该项目文件中,可以找到我们在本地环境下运行Solr服务器所需要的资源文件,在这里我们以4.10. ...
 - 对本地Solr服务器添加IK中文分词器实现全文检索功能
			
在上一篇随笔中我们提到schema.xml中<field/>元素标签的配置,该标签中有四个属性,分别是name.type.indexed与stored,这篇随笔将讲述通过设置type属性的 ...