Selenium三种等待元素的方式及代码,需要特别注意implicitlyWait的用法
一、显式等待
1、显式等待:
就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.
2、代码:
new WebDriverWait(driver, 15).until(ExpectedConditions.presenceOfElementLocated(By.xpath(""))); //元素的xpath路径
注:这里的15是指要等待的秒数.如果没有满足until()方法中的条件,就会始终在这里wait 15秒,依然找不到,就抛出异常.
3、如果想对加载JS的代码做出判断,可以用以下方法:
Wait wait=new Wait() { //selenium自带
@Override
public boolean until() {
// TODO Auto-generated method stub
return webElement.isDisplayed();
}
};
二、隐式等待
1、隐式等待:
相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。
隐式等待使得WebDriver在查找一个Element或者Element数组时,如果一直查找不到,每隔一段特定的时间就会轮询一次DOM。
注:默认设置超时时间为0,一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用。
2、代码:
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS); //1指等待1秒
三、线程休眠
Thread.sleep(1000); //1000指1000ms
四、实用的等待方法封装代码
public void waitForAllElementLoad(String type, String locator, int num,long timeout) {
try {
Thread.sleep(500);// 等待1秒,以便观察
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
System.out.println(e1.getMessage());
}
for (int second = 0;; second++) {
try {
if (second >= timeout) {
break;
}
if (isElementPresent(type, locator, num)) {
break;
}
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
}
public boolean isElementPresent(String elementType,String expression,int num) {
if(elementType.equals("className")){
//验证该元素是否在页面上显示 --isDisplayed()
try { if (getElementsBy(elementType,expression).get(num).isDisplayed()) {
return true;
} else {
return false;
}
} catch (Exception e) {
return false;
}
}else{
try { if (getElementBy(elementType,expression).isDisplayed()) {
return true;
} else {
return false;
}
} catch (NoSuchElementException e) {
return false;
}
}
}
//定位UI元素
public WebElement getElementBy(String elementType,String expression){
switch (elementType) {
case "xpath":
WebElement xpathelement = driver.findElement(By.xpath(expression));
return xpathelement;
case "id":
WebElement idelement = driver.findElement(By.id(expression));
return idelement;
case "className":
WebElement classNameelement = driver.findElement(By.className(expression));
return classNameelement;
case "linktext":
WebElement linktextelement = driver.findElement(By.linkText(expression));
return linktextelement;
case "name":
WebElement nameelement = driver.findElement(By.name(expression));
return nameelement;
case "partialLinkText":
WebElement partialLinkTextelement = driver.findElement(By.partialLinkText(expression));
return partialLinkTextelement;
case "cssSelector":
WebElement cssSelectorelement = driver.findElement(By.cssSelector(expression));
return cssSelectorelement;
default:
WebElement element = driver.findElement(By.xpath(expression));
return element; }
}
Selenium三种等待元素的方式及代码,需要特别注意implicitlyWait的用法的更多相关文章
- Selenium三种等待的使用方式
在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...
- python selenium 三种等待方式详解[转]
python selenium 三种等待方式详解 引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...
- 深入selenium三种等待方式使用
深入selenium三种等待方式使用 处理由于网络延迟造成没法找到网页元素 方法一 用time模块不推荐使用 用time模块中的time.sleep来完成等待 from selenium import ...
- JavaScript DOM三种创建元素的方式
三种创建元素的方式: document.write() element.innerHTML document.createElement() 初始HTML内容: <button>btn&l ...
- Selenium中三种等待的使用方式---规避网络延迟、代码不稳定问题
在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...
- Python selenium 三种等待方式详解
1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: ...
- Python selenium 三种等待方式详解(必会)
很多人在群里问,这个下拉框定位不到.那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么 ...
- Python+Selenium - 三种等待方式
元素:存在 > 可见 > 可用 需要判断元素状态 等待方式1:强制等待 -- 辅助 设置等待几秒,就必须等待几秒 示例: from time import sleepsleep(3) 强 ...
- Python selenium 三种等待方式解读
1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: ...
随机推荐
- 关于在64位win7下运行Virtualbox安装系统时出错(提示VBoxDD.DLL错误)的解决方
安装没有问题,安装了最新版VirtualBox-4.3.18-96516-Win,一点运行想安装系统时就出错. 这是提示的错误: 运行Virtualbox去安装系统时出错:Failed to open ...
- HDFS Hbase
Hbase:Hbase是Hadoop的数据库,是bigtable的实现,基于HDFSHDFS:文件系统,是gfs的实现 Hive,Hbase,HDFS等之间的关系Hive:Hive不支持更改数据的操作 ...
- python爬虫之Scrapy 使用代理配置——乾颐堂
在爬取网站内容的时候,最常遇到的问题是:网站对IP有限制,会有防抓取功能,最好的办法就是IP轮换抓取(加代理) 下面来说一下Scrapy如何配置代理,进行抓取 1.在Scrapy工程下新建“middl ...
- 【转】C语言中DEFINE简介及多行宏定义
要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定 ...
- 开发高性能的MongoDB应用—浅谈MongoDB性能优化(转)
出处:http://www.cnblogs.com/mokafamily/p/4102829.html 性能与用户量 “如何能让软件拥有更高的性能?”,我想这是一个大部分开发者都思考过的问题.性能往往 ...
- QT之Variant
QVariant识别类型的注册 QVariant识别类型的注册 QVariant为一个万能的数据类型--可以作为许多类型互相之间进行自动转换.将C++变为弱数据类型成为可能--也是许多控件中用户定义数 ...
- java Long、Integer 、Double、Boolean类型 不能直接比较
测试: System.out.println(new Long(1000)==new Long(1000)); System.out.println(new Integer(1000)==new In ...
- XJOI 3606 最大子矩形面积/LightOJ 1083 Histogram(单调栈/笛卡尔树)
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rec ...
- Asp.net MVC 自定义路由
在做公司接口的时候 由于规范API 要用点分割. 如: HealthWay.controller.action 在MVC 4 下面做了个 路由配置如下: public override void R ...
- Arduino I2C + 温湿度传感器Si7021
Si7021是Silicon Labs生产的温湿度传感器芯片.其主要特性: 湿度精度:误差典型值+/-2%RH,最大值+/-3%RH(0~80%RH),出厂已校正 温度精度:误差典型值+/-0.3 ...