一、使用前需要导入模块: from selenium.webdriver.support.wait import WebDriverWait
二、各字段详解 WebDriverWait(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
driver:webdriver实例,如IE、FireFox、Chrome等等,也就是你的self.driver
timeout:自己设定的超时时间,比如你设置为10,那么超时时间就是10s
poll_frequency:两次寻找的时间间隔,默认间隔寻找的间隔时间为0.5s
ignored_exceptions:超时后的抛出的异常信息,默认情况下,抛出NoSuchElementException
三、与until()或者until_not()方法结合使用
WebDriverWait(driver,10).until(method,message="")
调用该方法提供的驱动程序作为参数,直到method返回值为True
WebDriverWait(driver,10).until_not(method,message="")
调用该方法提供的驱动程序作为参数,直到返回值为False
在设置时间(10s)内,等待后面的条件发生。如果超过设置时间未发生,则抛出异常。在等待期间,每隔一定时间(默认0.5秒),调用until或until_not里的方法,直到它返回True或False
举例如下:
def wait(x): #定义一个函数wait,括号内要加一个参数x
return len(self.driver.find_elements_by_class_name('el-message__content')) == 1
WebDriverWait(self.driver,10).until(wait) #直到函数wait返回为true,显示等待结束
以上列子可以转化为lambda表达式的形式
WebDriverWait(self.driver,10).until(lambda x:len(self.driver.find_elements_by_class_name('el-message__content')) == 1)
再加入一个例子:
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support import expected_conditions
def test_price(self):
locator = (MobileBy.XPATH,"//*[@text='09988']/../../..//*[@resource-id='com.xueqiu.android:id/current_price']")
WebDriverWait(self.driver,10).until(expected_conditions.element_to_be_clickable(locator))
ele = float(self.driver.find_element(*locator).text)
assert ele < 200
以上例子可转化为lambda表达式方式:
from appium.webdriver.common.mobileby import MobileBy
def test_price(self):
locator = (MobileBy.XPATH,"//*[@text='09988']/../../..//*[@resource-id='com.xueqiu.android:id/current_price']")
WebDriverWait(self.driver,10).until(lambda x: x.find_element(*locator))
ele = float(self.driver.find_element(*locator).text)
assert ele < 200