隐式等待
1.针对查找元素设置最大的超时时间
2.可以全局性的设置
3.不满足时,提示no such element
driver.implicitly_wait(5) #对查找元素最大的超时时间,如果超过最大等待时间后,没有找到元素,则会报错:no such #elementexception
显式等待
直到传递给他的条件得到解决,才会继续,否则会报错。他会以一定频率调用该条件,直到等待超时结束
1.不仅仅针对元素查找,还支持很多条件
2.显示等待支持自定义条件
3.不满足时报错TimeoutException
wait = WebDriverWait(driver,10)#常见显示等待对象,其中包含参数(driver,timeout=10,poll_frequency=0.5) 超时时间时10s,每0.5秒去轮询
login_link=wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT,'登录')))
#expected_conditions 方法名字
#(By.LINK_TEXT,'登录')是一个元组
自定义
参考expected_conditions里面的方法
1.页面包含指定元素
def text_contains(text:str):
def _predicate(driver):
return text in driver.page_source
return _predicate
expected_conditions文件中的方法
2.自定义显示等待-点击元素成功
思路:点击成功,就返回true,否则返回false
def click_success(locator):
def _predicate(driver):
try:
element = driver.find_element(*locator)
element.click()
return True
except:
return False
return _predicate
wait = WebDriverWait(driver,timeout=10)
wait.until(click_success((By.LINK_TEXT,'进入个人中心')))
# driver.find_element(By.LINK_TEXT,'进入个人中心').click()
sleep()
time.sleep(n)
总结
显示等待:除了支持查找元素,还支持很多条件,比如等待元素可点击、等待元素出现、等待页面包含标题、等待页面包括某个url等
隐式等待:只针对查找元素
显示等待:当查不到时,显示timeout
隐式等待:当查不到时,显示no such element
显示等待:还支持自定义