一、显式等待

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的用法的更多相关文章

  1. Selenium三种等待的使用方式

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  2. python selenium 三种等待方式详解[转]

    python selenium 三种等待方式详解   引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...

  3. 深入selenium三种等待方式使用

    深入selenium三种等待方式使用 处理由于网络延迟造成没法找到网页元素 方法一 用time模块不推荐使用 用time模块中的time.sleep来完成等待 from selenium import ...

  4. JavaScript DOM三种创建元素的方式

    三种创建元素的方式: document.write() element.innerHTML document.createElement() 初始HTML内容: <button>btn&l ...

  5. Selenium中三种等待的使用方式---规避网络延迟、代码不稳定问题

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  6. Python selenium 三种等待方式详解

    1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: ...

  7. Python selenium 三种等待方式详解(必会)

    很多人在群里问,这个下拉框定位不到.那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么 ...

  8. Python+Selenium - 三种等待方式

    元素:存在 > 可见 > 可用 需要判断元素状态 等待方式1:强制等待  -- 辅助 设置等待几秒,就必须等待几秒 示例: from time import sleepsleep(3) 强 ...

  9. Python selenium 三种等待方式解读

    1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: ...

随机推荐

  1. LinuxSystemProgramming-vi

    Basic VI

  2. JMS学习之理论基础

    本文代码使用ActiveMq5.6 一.什么是JMS JMS(Java Message Service,Java消息服务)是一组Java应用程序接口(Java API),它提供创建.发送.接收.读取消 ...

  3. 案例研究:手机APP的UI设计流程

    以下内容由Mockplus(http://www.mockplus.cn)团队翻译整理,仅供学习交流. UI设计——不仅仅是创造漂亮的图像. 面临的挑战 我为自己提供了一个绝佳的机会来训练我的视觉设计 ...

  4. 实践作业4:Web测试实践(小组作业)每日任务记录2

    实践作业4:Web测试实践(小组作业)每日任务记录2 会议时间:2017年12月22日 会议地点:东九教学楼自习区 主  持  人:王晨懿 参会人员:王晨懿.余晨晨.郑锦波.杨潇.侯欢.汪元 记  录 ...

  5. linux 创建数据库

    mysql -uroot -pxxxxxx 1. 修改服务器的字符集 打开/etc/mysql/my.cnf,在[mysqld]后添加character-set-server=utf8 2. 查看my ...

  6. python列表技巧

    1.访问列表元素 test1 = ["chengqian","and","what"] print(test1[0])#第一个元素 prin ...

  7. Exception (3) Java exception handling best practices

    List Never swallow the exception in catch block Declare the specific checked exceptions that your me ...

  8. 12306GT多线程、分流免费抢票工具使用心德

    大事记背景 我相信很多远游他乡的朋友每逢佳节都会遇到一个难题,就是购票难,这个难题有多难呢?经常在12306官网购票的小伙伴应该知道每个地方的放票时间是不一样的,但是逢年过节的那几天即使你在放票几分钟 ...

  9. springDao的jdbctemplate

    pom文件 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http:/ ...

  10. 洛谷P2387 [NOI2014]魔法森林(lct维护最小生成树)

    题目描述 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为 1,2,3,…,n,边标号为 1,2,3,…, ...