2019独角兽企业重金招聘Python工程师标准>>>

Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wait).

1.显式等待

显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception.

如:

new WebDriverWait(driver, 15).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("css locator"))
);

这里,15是要等待的秒数.如果没有满足until()方法中的条件,就会始终在这里wait 15秒,依然找不到,就抛出异常.

也可以这样写:

WebDriver driver = new FirefoxDriver();
driver.get( http://somedomain/url_that_delays_loading);
WebElement e = (new WebDriverWait( driver, 10)) .until(new ExpectedCondition< WebElement>(){@Overridepublic WebElement apply( WebDriver d) {return d.findElement( By.id("id locator"));}}
);

这样就通过回调函数,直接获得了这个WebElement.也就是页面元素.

如果只是仅仅想判断页面是不是加载到某个地方了,就可以用第一种方法; 但如果需要得到某个WebElement,两种方式都可以,只是第一种方式还需要再多一步获取的操作.

Wait w = new Wait(){@Overridepublic boolean until() {return webElement.isDisplayed();}
};

另外这种等待的方式,在加载js代码的时候做判断会比较方便,反正我只在代码里这么见过,但是没用过,有兴趣的朋友可以研究一下.

2.隐式等待

隐式等待,我觉得就是不靠谱的等待,看一段代码就明白了.

driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS);

WebDriver会进行一个隐式等待,但参数只有时间,这就导致我需要什么元素出现,我不一定能等到它,只是让driver延迟一段时间再继续而已. 不过我们也可以把它小小的封装一下,变废为宝:

public boolean isByElementDisplayed(By by, int time) {boolean status = false;if (driver.findElement(by).isDisplayed() == false) {driver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS);} else {status = true;}return status;
}

得不到某个元素,我们就延迟一下...

最后还有一个最低效的做法:

Thread.sleep()

额,不建议使用.

第一次发文,大家多提意见.

转载于:https://my.oschina.net/u/928852/blog/98885

Selenium的延迟等待相关推荐

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

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

  2. selenium的页面等待

    selenium的页面等待 这是非常重要的一部分,现在的网页越来越多采用了 Ajax 技术,这样程序便不能确定何时某个元素完全加载出来了.这会让元素定位困难而且会提高产生 ElementNotVisi ...

  3. selenium隐式等待

    有些页面加载js需要一定时间,比如淘宝页面,selenium的隐式等待会在查询元素时自动等待,当元素被发现时再执行提取元素内容的操作,比起 time.sleep()节约了很多时间,配置方法如下: br ...

  4. selenium 的显示等待与隐式等待

    现在很多的网页都采用了 Ajax 技术,那么采用一般的静态爬虫技术会出现抓取不到页面的元素.比如歌曲的主页会有评论数量,一般评论数量是动态加载的. 所以这就涉及到selenium,支持各种浏览器,包括 ...

  5. Selenium的显示等待和隐式等待

    Selenium的显示等待和隐式等待 隐式等待 当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或 ...

  6. js等待5秒后执行_Python+selenium自动化之等待

    Selenium学习和使用过程中,比较常见的一个问题就是,弹窗定位不到.元素定位不到等,除了页面有frame.多窗口,就是没有加等待.代码运行的速度远远高于浏览器加载的速度,就像双人跑步运动,一个人快 ...

  7. selenium之如何等待页面元素加载完成

    webdriver中我们用两种方式进行等待:明确的等待和隐性的等待. 明确的等待 明确的等待是指在代码进行下一步操作之前等待某一个条件的发生.最不好的情况是使用Thread.sleep()去设置一段确 ...

  8. python selenium 三种等待方式详解

    引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待了,等待元素可见再继续运行程序: 正文: 1.强制等待 ...

  9. python selenium 等待页面加载_python selenium 三种等待方式详解(实战常用)

    引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待了,等待元素可见再继续运行程序: 注:当使用该放发的时 ...

最新文章

  1. 工厂用抽象类比接口_用简单的现实类比解释硬编码概念
  2. CSS sprites
  3. Flask and Ajax Post HTTP/1.1 400
  4. 拼多多暴跌的原因找到了
  5. Python两个内置函数locals 和globals
  6. Android 原生通知Notification 写法
  7. 【JavaScript】数组
  8. 一次堆外内存泄露的排查过程
  9. PHP正则表达式及实例
  10. 和硬件交换方面的知识
  11. 彻底解决“IIS配置401错误”
  12. macOS BigSur下根目录下无法创建文件
  13. 小程序页面浏览到底部触发事件
  14. 【DA】用户粘性指标:日活/月活
  15. Linux内核4.14版本——SPI NOR子系统(2)——spi-nor.c分析
  16. 登康口腔冲刺上市:销售费用远高于研发,旗下品牌包括冷酸灵等
  17. 数据挖掘 | 判别分析 +朴素贝叶斯分类算法
  18. windows10只显示图标不显示缩略图
  19. 少儿编程课程体系需求
  20. electron 介绍

热门文章

  1. EXT iconCls说明
  2. 通过创建 HttpCookie 对象的实例编写 Cookie
  3. 决策树的C++实现(CART)
  4. TensorRT Samples: MNIST API
  5. 【Qt】Qt再学习(十):鼠标拖拽(dragdrop)QGraphicsItem示例
  6. 精灵图 html为什么会变大,[html] 第128天 精灵图和base64如何选择呢?
  7. android 耳机红外线,红外线耳机制作方法
  8. 并发执行变成串行_一篇讲透如何理解数据库并发控制(纯干货)
  9. git 强制推送_Git 常用命令清单,掌握这些,轻松驾驭版本管理
  10. Redis初学:2(Redis的启动)