用selenium进行web UI的自动化开发时,经常遇到loading需要等待的时候,或者需要验证一个action之后某个dialog是否呈现或者消失。对于这类情况是不建议用sleep(xx)来死等,因为你无法准确判断要等多久,少了就会报error,多了就会浪费整个脚本跑的时间。聪明的做法就是灵活等待,WebDriverWait(org.openqa.selenium.support.ui)这个类是很好的选择。

  1. /**
  2. * Wait until the element visible with customized timeout
  3. * @param driver
  4. * @param locator
  5. * @param errorMessage
  6. * @return
  7. */
  8. public WebElement waitForElementVisible(WebDriver driver,final By locator, long timeOutInSeconds, String errorMessage) {
  9. Function<WebDriver, WebElement> waitFn = new Function<WebDriver, WebElement>() {
  10. @Override
  11. public WebElement apply(WebDriver driver) {
  12. try {
  13. WebElement el = driver.findElement(locator);
  14. if (el.isDisplayed()) {
  15. return el;
  16. }
  17. } catch (Exception e) {
  18. }
  19. return null;
  20. }
  21. };
  22.  
  23. WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
  24. if (errorMessage != "") {
  25. wait.withMessage(errorMessage);
  26. } else {
  27. wait.withMessage("Cannot find Element: " + locator.toString());
  28. }
  29. return wait.until(waitFn);
  30. }
  1. /**
  2. * Wait until the element present with customized timeout
  3. * @param driver
  4. * @param locator
  5. * @param errorMessage
  6. * @return
  7. */
  8. public Boolean waitForElementPresent(WebDriver driver,final By locator, long timeOutInSeconds, String errorMessage) {
  9. Function<WebDriver, Boolean> waitFn = new Function<WebDriver, Boolean>() {
  10. @Override
  11. public Boolean apply(WebDriver driver) {
  12. try {
  13. driver.findElement(locator);
  14. return true;
  15. } catch (Exception e) {
  16. return false;
  17. }
  18. }
  19. };
  20.  
  21. WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
  22. if (errorMessage != "") {
  23. wait.withMessage(errorMessage);
  24. } else {
  25. wait.withMessage("Cannot find Element: " + locator.toString());
  26. }
  27. return wait.until(waitFn);
  28. }

使用WebDriverWait类处理等待(sleep)的问题的更多相关文章

  1. WebDriverWait类以及类常用的方法

    WebDriverWait类提供了显式等待和隐式等待,显式等待的等待时间是固定的,固定了10s就必须等待10s,隐式等待的等待时间是个范围,例如最大10s,那么如果在3s的时候程序达到预期的结果,那么 ...

  2. selenium WebDriverWait类等待机制的实现

    在自动化测试脚本的运行过程中,可以通过设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败,常用的等待方式有三种: 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法 ...

  3. selenium(七)webdriverwait,高级等待,替代sleep

    #coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from seleni ...

  4. CountDownEvent 信号类来等待直到一定数量的操作完成

    当主程序启动时,创建一个 CountDownEvent 类的实例,在其构造函数中指定个数操作完成发出信号,当前为2个操作完成会发出信号. /// <summary> /// 创建 Coun ...

  5. 等待唤醒机制代码实现_包子类&包子铺类和等待唤醒机制代码实现_吃货类&测试类

    资源类:包子类 设置包子的属性 皮 陷 包子的状态:有 true 没有 false public class BaoZi { //皮 String pi; //陷 String xian; //包子的 ...

  6. python-web自动化-三种等待方式

    当有元素定位不到时,比如下拉框,弹出框等各种定位不到时:一般是两种问题:1 .有frame :2.没有加等待 下面学习三种等待方式: 1.强制等待 sleep(xx)这种方法简单粗暴,不管浏览器是否加 ...

  7. python - web自动化测试 - 元素操作 - 等待

    # -*- coding:utf-8 -*- ''' @project: web学习 @author: Jimmy @file: wait.py @ide: PyCharm Community Edi ...

  8. selenium - 常用等待操作

    # 4. 等待操作 # 强制等待from time import sleepsleep(10) # 隐性等待# 设置最长等待时间,在这个时间在只要有个时间点加载完成,则执行下一步代码,比sleep智能 ...

  9. selenium等待机制

    等待机制 ​ 因为你要查找的标签由于网速等原因迟迟没有加载出来,你就直接获取这个标签,很明显是报错,现有的简单粗暴的解决办法就是time.sleep(3),睡几秒,也就是设置线程等待,等这个标签加载出 ...

随机推荐

  1. Java抛出OutOfMemoryError:Java heap space堆内存溢出错误的分析方案

    抛出堆内存溢出的错误一定要记得保留现场环境(导出堆内存信息到文件),否则如果无法进行分析,并从根本上解决问题,下次很有可能还会出现. 第一步:导出堆转储文件 我们可以使用Jdk自带的jmap工具.使用 ...

  2. 转:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数

    转:http://toutiao.com/a4280977370/ [解法一] 可以举一个八位的二进制例子来进行分析.对于二进制操作,我们知道,除以一个 2,原来的数字将会减少一个0.如果除的过程中有 ...

  3. 今天初步了解了informix的锁的概念

     今天初步了解了informix的锁的概念  2005-06-12 01:07:05 分类: IT生活 在load的时候,碰到好几次"-134 ISAM Error :no more loc ...

  4. Excel中提取最大值的问题

    在使用excel的时候,碰到了一个如下的问题 意思是以每个字母为条件,取这个字母下面的数字中的最大值,需要注意一个问题是每个字母下面的数字个数不一定相等,例如d下面有四个数字,可以设置如下公式解决: ...

  5. 并列统计CASE WHEN

    select sum(case when depart = 'Physical' then 1 else 0 end) PhyTotal, sum(case when depart = 'Chemis ...

  6. 《精通C#》第十三章 对象的生命周期

    在C#中,程序员无法直接在C#中删除一个托管对象,因为C#不提供这个功能,那么类的实例就需要通过CLR调用垃圾回收机制进行清除,回收内存..NET垃圾回收器会压缩空的内存块来实现优化,为了辅助这一功能 ...

  7. 《精通C#》委托与事件(10章)

    委托可用来解耦以及状态变化的实时通知,以及其他的一些作用,但是经验所限,目前还未遇见.网上的大多数例子都是类似于,使用委托,然后用console返回方法的返回值,有时候会在想,委托的通知如果是这样的话 ...

  8. Scala学习(二)

    二.Scala基础 1.变量:三种修饰符 -> ①val 常亮②var 变量③lazy val 惰性变量求值 2.类型 3.代码块 Block {exp1;exp2} 或 { exp1 exp2 ...

  9. C语言实现四则运算

    学生:宋丹丹 张潇裕 #include<iostream>#include<ctime>using namespace std;void main(){ int x1,x2,a ...

  10. sq楼盘信息

    Sq楼盘信息 1.1按关注度来分 前10个 序号 楼盘 网址 价格 关注人数 地址 附件社区 1 上海公馆 http://shangqiu.jiwu.com/loupan/236459.html 38 ...