一、显式等待

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. AspectJ AOP介绍

    idea下aspectj程序运行示例 有些同学可能想自己编写aspect程序进行测试练习,博主在这简单介绍运行环境的搭建,首先博主使用的idea的IDE,因此只对idea进行介绍.首先通过maven仓 ...

  2. Java TreeMap的排序

    TreeMap 和 HashMap 用法大致相同,但实际需求中,我们需要把一些数据进行排序:以前在项目中,从数据库查询出来的数据放在List中,顺序都还是对的,但放在HashMap中,顺序就完全乱了. ...

  3. C++细节理解

    1.为什么static类外初始化不需要static关键字 答:因为类外static变量或函数表示限定在此源文件中才能使用,而类中的static变量或函数表示由本类及其所有对象共享,如果在类外初始化或定 ...

  4. MVC错误(一)

    目录规范后将相应的文件放到该放的地方后,应修改require_once();中的路径 调试php代码时先打开WampServer,再在浏览器中输入localhost/文件夹名/index.php

  5. python nose的html报告优化

    用的是nose的nose-html-reporting (0.2.3)插件生成报告.用了bootstrap前端框架,加入了开始时间和计算持续时间,及其本地化. 优化后的显示效果: 代码地址

  6. HttpUploader6-queue版本更新说明

    HttpUploader6-queue版本更新说明 博客园:http://www.cnblogs.com/xproer/p/5109761.html 网易博客:http://hyhyo.blog.16 ...

  7. CAD&CG GDC 2018大会论文录用名单

    Section 1 增强现实与图形学: 报告时间:2018-8-25 14:00-15:30 报告地点:会议室1 P000009 基于增强现实的产品质量信息传递方法 P000104 重彩画的风格转移 ...

  8. 设计模式8---适配器模式(Adapter)

    1. 适配器模式简介 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适用场景: 1.已经存在 ...

  9. UML的常用关系及其符号表示

    原创 UML的常用关系及其符号表示 一.实现关系 通常是一个类实现一个接口 符号表示: 二.泛化关系 通常是一个类继承另外一个类 符号表示: 三.依赖关系 通常是一个类里面的方法的参数类型是另一个类 ...

  10. 实用的chrome插件

      有人说Chrome是世界上最好的浏览器,当然也会有不赞同.但不论怎样,工具而已,何必限制,任何一个用好了都能迅速提高我们的效率,不过还是推荐Chrome. 自然问题就变成:“为什么要用Chrome ...