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: ...
随机推荐
- smarty 使用php函数
strtotime() time() <{if strtotime($activity.start_time) gt time()}> <a href="?action=d ...
- 福大软工 · BETA 版冲刺前准备(团队) [已完成]
写在前面 本次作业地址 林燊大哥 过去存在的问题 算法组 没有考虑到数据集不充足的情况.一开始我们将所有数据集按照8:1:1进行分割,分别分配给训练集.开发集和测试集.然鹅后来发现采集到的数据不够充足 ...
- 网页渗透-wpscan
wpscan –url www.xxx.com #扫描基本信息 wpscan –url www.xxx.com –enumerate p #扫描插件基本信息 wpscan –url www.xxx.c ...
- http 介绍
https://www.cnblogs.com/ranyonsue/p/5984001.html 关于HTTP协议,一篇就够了 HTTP简介 HTTP协议是Hyper Text Transfer Pr ...
- xfce4快捷键设置
xfce4的"Keyboard"可以方便的设置启动应用程序的快捷键. 例如,添加xfce4-terminal和emacs的启动快捷键 Alt+F3打开"Applicati ...
- 安卓利用Handlers,AsyncTask和Loaders运行后台程序
安卓的用户界面线程(user interface thread) 1.1 主线程 安卓修改用户界面并从一个单一用户界面线程中处理输入事件,这个线程也被称作主线程(main thread) Androi ...
- 【Linux】GDB查看栈信息(转)
在调试程序的过程中,查看程序的函数调用堆栈是一项最基本的任务,几乎所有的图形调试器都支持这项特性. GDB调试器当然也支持这一特性,但是功能更加灵活和丰富. GDB将当前函数的栈帧编号为0,为外层函数 ...
- scalaWindows和Linux搭建
Windows搭建 https://www.cnblogs.com/freeweb/p/5623372.html Linux搭建 https://www.cnblogs.com/freeweb/p/5 ...
- 多线程“尚未调用coinitialize” 报错
关于多线程中创建使用TADOConnect.TADODataSet等Com组件时,必须先初始化Com 在多线程启用执行前 CoInitialize(nil); 在多线程启用执行后 CoUninitia ...
- heartbeat+nginx搭建高可用HA集群
前言: HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至B机器 ...