Selenium自动化测试----智能等待
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium自动化测试----智能等待相关的知识,希望对你有一定的参考价值。
implicitly_wait():是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。
如果超出了设置时间的则抛出异常。
需要特别说明的是:隐性等待对整个driver的周期都起作用,所以只要设置一次即可,我曾看到有人把隐性等待当成了sleep在用,走哪儿都来一下…
WebDriverWait()
详细格式如下:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver -
WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程)
timeout - 最长超时时间,默认以秒为单位
poll_frequency -
休眠时间的间隔(步长)时间,默认为 0.5 秒
ignored_exceptions -
超时后的异常信息,默认情况下抛 NoSuchElementException 异常。
实例:
from selenium.webdriver.support.ui import WebDriverWait .... element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id(“someId”)) is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)). until_not(lambda x: x.find_element_by_id(“someId”).is_displayed())
WebDriverWai()一般由 unit()或 until_not()方法配合使用,下面是 unit()和 until_not()方法的说明。
until(method, message=’ ’)
调用该方法提供的驱动程序作为一个参数,直到返回值不为 False。
until_not(method, message=’ ’)
调用该方法提供的驱动程序作为一个参数,直到返回值为 False。
第三种办法就是显性等待,WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。
先看个代码实例:
# -*- coding: utf-8 -*- fromselenium importwebdriver fromselenium.webdriver.support.wait importWebDriverWait fromselenium.webdriver.support importexpected_conditions as EC fromselenium.webdriver.common.by importBy driver=webdriver.Firefox() driver.implicitly_wait(10)# 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者 driver.get(‘https://huilansame.github.io‘) locator=(By.LINK_TEXT, ‘CSDN‘) try: WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locator)) printdriver.find_element_by_link_text(‘CSDN‘).get_attribute(‘href‘) finally: driver.close()
上例中,我们设置了隐性等待和显性等待,在其他操作中,隐性等待起决定性作用,在WebDriverWait..中显性等待起主要作用,但要注意的是:最长的等待时间取决于两者之间的大者,此例中为20,如果隐性等待时间 > 显性等待时间,则该句代码的最长等待时间等于隐性等待时间。
看了以上内容基本上很清楚了,调用方法如下:
WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)
这里需要特别注意的是until或until_not中的可执行方法method参数,很多人传入了WebElement
对象,如下:
WebDriverWait(driver, 10).until(driver.find_element_by_id(‘kw‘)) # 错误
以上是关于Selenium自动化测试----智能等待的主要内容,如果未能解决你的问题,请参考以下文章