selenium(7)强制等待,显式等待和隐式等待。

selenium中有三种等待方式可以使用:强制等待,隐式等待和显式等待;

一、强制等待:强制等待我们可以通过time模块中time.sleep()来实现,不管浏览器是否加载完成,只要程序执行到等待设定的时间,就会等待,时间一到,就继续执行后面的程序了

time.sleep(5)    #强制等待5秒

二、隐式等待:通过webdriver对象的implicitly_wait()方法,该方法一次设置,全局有效。当我们去定位页面元素时,如果元素没有找到,不会立即抛出异常,而是周期性地(通常为 0.5s)去重新寻找,直到该元素找到或者超过最大等待时间才结束(抛出异常或者返回 None

# 设置隐式等待为10秒

driver.implicitly_wait(10)

implicitly_wait()默认参数的单位为秒,本例中设置等待时长为10秒。

首先这10秒并非一个固定的等待时间,它并不影响脚本的执行速度。

其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;

如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。

假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没有定位到元素,则抛出异常。

注意:当我们使用implicitly_wait()时,如果想要定位的元素已经找到,但是它的内容(如文本内容,属性等)没有加载出来,此时隐式等待无效,仍会直接抛出NoSuchElementException异常,这也是为什么我们很多时候仍需要使用time.sleep()的原因。

 三、显式等待:显式等待是代码中等待一定条件发生后再进一步执行你的代码,通过webDriverWait结合ExpectedCondition实现。实现的方法:程序每隔几秒判断一下设定的条件,如果条件成立,则执行下一步,否则就继续等待,直到超过设置的最长时间,然后抛出异常,

显示等待更加灵活,可以让我们针对某一个元素进行等待设置。

通过WebDriverWait类的until()和until_not()方法来实现。

until():条件为成立返回True,等待结束,如果超时,抛出TimeoutException异常。

until_not():条件不成立返回True,等待结束,如果超时,抛出TimeoutException。

# 调用格式
WebDriverWait(driver,timeout,poll_frequency,ignored_exception).until(func,error_message)

WebDriverWait(driver,timeout,poll_frequency,ignored_exception).until_not(func,error_message)

"""
driver:webdriver实例对象
timeout:最大等待时间
poll_freqency:调用频率,可选的,默认0.5s一周期
ignored_exception:可选的,要忽略的异常,默认为None
func:要执行的方法
error_message:自定义异常信息,可选的
"""

posted @ 2024-03-26 06:46  越长大越孤单哦  阅读(59)  评论(0编辑  收藏  举报