1、隐式等待
隐式等待主要针对元素定位,在定位时,10秒内找到才会报错
如果第三秒找到,那剩下的7秒是不会等待的,代码会继续往下运行
隐式等待是全局性的设置,可以随时更改,更改后对更改后的元素生效
针对点击,输入,悬浮等动作一概无效
driver.implicitly_wait(10) #单位:秒
2、显示等待
显式等待是直到传递给它的条件得到解决,才会继续,否则就超时报错
他会以一定频率调用该条件, 直到等待超时结束
这意味着只要条件返回一个假值,它就会继续尝试和等待
由于显式等待允许您等待条件发生,因此它们非常适合同步浏览器及其 DOM 和 WebDriver 脚本之间 的状态。
显式等待,timeout代表超时时间,poll_frequency代表间隔时间
wait = WebDriverWait(driver=driver,timeout=5,poll_frequency=0.5)
element = wait.until(expected_conditions.presence_of_element_located(By.XPATH,"//a[contains(text(),'收货地址')]"))
element.click()
显示等待的函数不一定能满足测试过程中的需求,所有我们一般需要定义一些函数满足测试需求
1、点击元素直到成功
def click_success(locator): #locator = (By.xxx,'ddddd')
def _predicate(driver):
try:
element = driver.find_element(*locator)
element.click()
return True
except:
print('点击报错了')
return False
return _predicate
运用
wait = WebDriverWait(driver=driver,timeout=5,poll_frequency=0.5)
element = wait.until(expected_conditions.presence_of_element_located(By.XPATH,"//a[contains(text(),'收货地址')]"))
element.click()
wait.until(click_success(By.XPATH,"//a[contains(text(),'收货地址')]"))
2、定义显示等待,页面包含某段文字
def page_contains(text):
def _predicate(driver):
return text in driver.page_source
return _predicate
运用
wait = WebDriverWait(driver=driver,timeout=5)
flag = wait.until(page_contains("保存成功"))
assert flag