一 前言python
在前面的selenium系列(二)元素定位方式和selenium系列(三)經常使用操做類型及方法兩節中,已經介紹了web頁面元素的識別定位、操做等技術,可能你會以爲掌握這兩項技術就能夠實施web自動化了,答案基本是這樣的,畢竟元素定位和操做是核心技術。可是,在某些場景,腳本的運行並不是預期那樣,如,要操做的元素用常規方法沒法識別、元素能夠識別但在腳本運行時卻未如期而至等。爲了解決這些疑難雜症,接下來三節內容將會介紹處理這些問題的通用方法。web
在本節,主要介紹元素等待的使用方法和場景,該方法是開發穩定、高容錯性自動化腳本的前提。ide
二 爲何須要等待?spa
元素等待是爲了解決以下場景的問題:腳本執行時,腳本的執行速度和頁面元素的加載速度未必一致,也就是說,可能出現腳本已經運行到某個元素,但該元素還沒有加載到頁面,此時腳本會因沒法定位到該元素而致使執行失敗。元素等待本質是爲了解決時序上不匹配的問題。orm
三 selenium元素等待方法視頻
適當的等待能夠提升腳本的穩定性,selenium主要有三種等待方法:
1. 強制等待 time.sleep(x) ;
2. 顯式等待 WebDriverWait ;
3. 隱式等待 implicitly_wait;
blog
其中,三種等待方法的做用和區別,以下:生命週期
強制等待,也就是常說的死等待,使用time模塊提供的sleep方法,腳本在等待sleep(x) x秒後才執行,此時腳本也許出現了無效等待,即元素已經出現,能夠繼續操做,但因指定的時間未到,腳本沒法執行,於是,在實際Web UI開發中應杜絕sleep等待;ci
顯式等待,WebDriver提供的針對元素級別的、靈活、智能的等待方法,經過配合until()、until_not()、ExpectedCondition等條件的使用,默認每500ms檢查一次條件狀態,能夠及時將腳本從等待中喚醒,避免無效等待,在實際應用中推薦使用該方法。資源
該等待的調用方法以下:
WebDriverWait(driver, 超時時長, 調用頻率, 忽略異常).until(可執行方法, 超時時返回的信息)
隱式等待,WebDriver提供的針對driver級別的適用整個生命週期的等待方法,該等待是全局設置,於是只需在實例化driver後設置一次便可。從等待做用上看,是能夠知足須要的,可是考慮到實際應用場景,driver要等待的元素和腳本要操做的元素未必相同,也就是說,腳本要操做的元素已經出現,但由於設置了全局等待,driver也會繼續等待頁面上其餘無關元素,直至整個頁面加載完畢。於是,與顯式等待相比,可能出現無效等待的狀況。
四 等待方法實戰舉例
1.強制等待方法應用實例
2.顯式等待應用實例
3.隱式等待應用實例
五 總結
本節主要介紹Web UI自動化中三種元素等待方法,並講解了各自的優缺點,實際開發中推薦使用顯示等待,最後,爲了便於理解和應用,針對每種等待方法,編寫了對應的腳本。
六 其餘資源
關於python selenium元素經常使用操做方法的視頻講解,請參看:http://i.youku.com/weiworld521 第 27節。