selenium的webdriver三种等待方式(显式等待WebDriverWait+implicitly_wait隐式等待+sleep强制等待)

http://www.testclass.net/selenium_python/element-wait

https://blog.csdn.net/cyjs1988/article/details/76033180

显式等待

显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)。

    from selenium import webdriver

    from selenium.webdriver.common.by import By 

    from selenium.webdriver.support.ui import WebDriverWait

    from selenium.webdriver.support import expected_conditionsasEC

    driver = webdriver.Firefox()

    driver.get("http://www.baidu.com")

    element = WebDriverWait(driver,5,0.5).until(                     EC.presence_of_element_located((By.ID,"kw"))                          )

    element.send_keys('selenium')

    driver.quit()

WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

driver :浏览器驱动。

timeout :最长超时时间,默认以秒为单位。

poll_frequency :检测的间隔(步长)时间,默认为0.5S。

ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。

WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。

until(method, message=‘’)

调用该方法提供的驱动程序作为一个参数,直到返回值为True。

until_not(method, message=‘’)

调用该方法提供的驱动程序作为一个参数,直到返回值为False。

在本例中,通过as关键字将expected_conditions 重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。

隐式等待

WebDriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0。它的用法相对来说要简单得多。

fromseleniumimportwebdriverfromselenium.common.exceptionsimportNoSuchElementExceptionfromtimeimportctimedriver = webdriver.Firefox()# 设置隐式等待为10秒driver.implicitly_wait(10)driver.get("http://www.baidu.com")try:    print(ctime())    driver.find_element_by_id("kw22").send_keys('selenium')exceptNoSuchElementExceptionase:    print(e)finally:    print(ctime())    driver.quit()

implicitly_wait() 默认参数的单位为秒,本例中设置等待时长为10秒。首先这10秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没有定位到元素,则抛出异常。


隐式等待是等页面加载,不是等元素!!!

1、显式等待 

一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码。显式等待是等元素加载!!!

2、隐式等待,相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。隐式等待是等页面加载,而不是元素加载!!!(隐式等待就是针对页面的,显式等待是针对元素的。)

隐式等待使得WebDriver在查找一个Element或者Element数组时,每隔一段特定的时间就会轮询一次DOM,如果Element或数组没有马上被发现的话。

默认设置是0。

一旦设置,这个隐式等待会在WebDriver对象实例的整个生命周期起作用。

3、强制等待

import time

time.sleep(10)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容