隱式等待:implicitly_wait(time)? time默認(rèn)為0?
原理:瀏覽器在查找元素的時(shí)候沒(méi)有找到,就會(huì)等待一段時(shí)間再去查找。?
網(wǎng)頁(yè)在加載的時(shí)候需要加載各種HTML標(biāo)簽、JS文件 等,加載有先后順序,所以可能某些元素在查找的時(shí)候還未加載出來(lái),所以設(shè)置一些時(shí)間,等元素出現(xiàn)之后我們?cè)偃ゼ虞d
弊端:影響整個(gè)頁(yè)面,必須得等所有的頁(yè)面都加載完成了才會(huì)進(jìn)行下一步,這樣就增加了不必要的等待時(shí)間
顯示等待:
WebDriverWait(timeout,poll_frequency,ignore_exception),和? expected_conditions 結(jié)合使用
如果說(shuō)隱式等待是全局變量,顯示等待就是局部變量,只針對(duì)某個(gè)元素生效
例如:例如需要定位某個(gè)元素的時(shí)候,這個(gè)元素是不可見(jiàn)得,可以設(shè)置等待條件為等這個(gè)元素可見(jiàn)
參數(shù)分析:
timeout?? 最大超時(shí)時(shí)間
poll_frequency: 執(zhí)行間隔,例如設(shè)置為0.5,就是每隔0.5秒查找一次
ignore_exception:需要忽略的異常
結(jié)合 unit()? 和unit_not 使用
unit(method,message='')?
調(diào)用method 方法,method 會(huì)返回一個(gè)value?? ,否則就是是拋出異常,返回message 信息
unit_not(method,message='')
同unit 同理,只不過(guò)if vaue 變成了 ifnot value

method 函數(shù)列表如下
title_is:判斷當(dāng)前頁(yè)面的title是否等于預(yù)期
title_contains:判斷當(dāng)前頁(yè)面的title是否包含預(yù)期字符串
presence_of_element_located:判斷某個(gè)元素是否被加到了dom樹(shù)里,并不代表該元素一定可見(jiàn)
visibility_of_element_located:判斷某個(gè)元素是否可見(jiàn). 可見(jiàn)代表元素非隱藏,并且元素的寬和高都不等于0
visibility_of:跟上面的方法做一樣的事情,只是上面的方法要傳入locator,這個(gè)方法直接傳定位到的element就好了
presence_of_all_elements_located:判斷是否至少有1個(gè)元素存在于dom樹(shù)中。舉個(gè)例子,如果頁(yè)面上有n個(gè)元素的class都是'column-md-3',那么只要有1個(gè)元素存在,這個(gè)方法就返回True
text_to_be_present_in_element:判斷某個(gè)元素中的text是否 包含 了預(yù)期的字符串
text_to_be_present_in_element_value:判斷某個(gè)元素中的value屬性是否包含了預(yù)期的字符串
frame_to_be_available_and_switch_to_it:判斷該frame是否可以switch進(jìn)去,如果可以的話,返回True并且switch進(jìn)去,否則返回False
invisibility_of_element_located:判斷某個(gè)元素中是否不存在于dom樹(shù)或不可見(jiàn)
element_to_be_clickable - it is Displayed and Enabled:判斷某個(gè)元素中是否可見(jiàn)并且是enable的,這樣的話才叫clickable
staleness_of:等某個(gè)元素從dom樹(shù)中移除,注意,這個(gè)方法也是返回True或False
element_to_be_selected:判斷某個(gè)元素是否被選中了,一般用在下拉列表
element_located_to_be_selected
element_selection_state_to_be:判斷某個(gè)元素的選中狀態(tài)是否符合預(yù)期
element_located_selection_state_to_be:跟上面的方法作用一樣,只是上面的方法傳入定位到的element,而這個(gè)方法傳入locator
alert_is_present:判斷頁(yè)面上是否存在alert
常用的函數(shù)有 :
presence_of_element_located (object)
presence_of_all_elements_located(object)
也可以自己寫(xiě)一個(gè)method 傳進(jìn)去使用

sleep 強(qiáng)制等待
time.sleep(time)?? 根據(jù)網(wǎng)站的響應(yīng)速度來(lái)自定義sleep 時(shí)間
個(gè)認(rèn)看法:三種方式可以配合使用,到達(dá)最好效果