您好,登錄后才能下訂單哦!
一 前言
在前面的selenium系列(二)元素定位方式和selenium系列(三)常用操作類型及方法兩節(jié)中,已經(jīng)介紹了web頁(yè)面元素的識(shí)別定位、操作等技術(shù),可能你會(huì)覺(jué)得掌握這兩項(xiàng)技術(shù)就可以實(shí)施web自動(dòng)化了,答案基本是這樣的,畢竟元素定位和操作是核心技術(shù)。但是,在某些場(chǎng)景,腳本的運(yùn)行并非預(yù)期那樣,如,要操作的元素用常規(guī)方法無(wú)法識(shí)別、元素可以識(shí)別但在腳本運(yùn)行時(shí)卻未如期而至等。為了解決這些疑難雜癥,接下來(lái)三節(jié)內(nèi)容將會(huì)介紹處理這些問(wèn)題的通用方法。
在本節(jié),主要介紹元素等待的使用方法和場(chǎng)景,該方法是開(kāi)發(fā)穩(wěn)定、高容錯(cuò)性自動(dòng)化腳本的前提。
二 為什么需要等待?
元素等待是為了解決如下場(chǎng)景的問(wèn)題:腳本執(zhí)行時(shí),腳本的執(zhí)行速度和頁(yè)面元素的加載速度未必一致,也就是說(shuō),可能出現(xiàn)腳本已經(jīng)運(yùn)行到某個(gè)元素,但該元素尚未加載到頁(yè)面,此時(shí)腳本會(huì)因無(wú)法定位到該元素而導(dǎo)致執(zhí)行失敗。元素等待本質(zhì)是為了解決時(shí)序上不匹配的問(wèn)題。
三 selenium元素等待方法
適當(dāng)?shù)牡却梢蕴岣吣_本的穩(wěn)定性,selenium主要有三種等待方法:
1. 強(qiáng)制等待 time.sleep(x) ;
2. 顯式等待 WebDriverWait ;
3. 隱式等待 implicitly_wait;
其中,三種等待方法的作用和區(qū)別,如下:
強(qiáng)制等待,也就是常說(shuō)的死等待,使用time模塊提供的sleep方法,腳本在等待sleep(x) x秒后才執(zhí)行,此時(shí)腳本也許出現(xiàn)了無(wú)效等待,即元素已經(jīng)出現(xiàn),可以繼續(xù)操作,但因指定的時(shí)間未到,腳本無(wú)法執(zhí)行,因而,在實(shí)際Web UI開(kāi)發(fā)中應(yīng)杜絕sleep等待;
顯式等待,WebDriver提供的針對(duì)元素級(jí)別的、靈活、智能的等待方法,通過(guò)配合until()、until_not()、ExpectedCondition等條件的使用,默認(rèn)每500ms檢查一次條件狀態(tài),可以及時(shí)將腳本從等待中喚醒,避免無(wú)效等待,在實(shí)際應(yīng)用中推薦使用該方法。
該等待的調(diào)用方法如下:
WebDriverWait(driver, 超時(shí)時(shí)長(zhǎng), 調(diào)用頻率, 忽略異常).until(可執(zhí)行方法, 超時(shí)時(shí)返回的信息)
隱式等待,WebDriver提供的針對(duì)driver級(jí)別的適用整個(gè)生命周期的等待方法,該等待是全局設(shè)置,因而只需在實(shí)例化driver后設(shè)置一次即可。從等待作用上看,是可以滿足需要的,但是考慮到實(shí)際應(yīng)用場(chǎng)景,driver要等待的元素和腳本要操作的元素未必相同,也就是說(shuō),腳本要操作的元素已經(jīng)出現(xiàn),但因?yàn)樵O(shè)置了全局等待,driver也會(huì)繼續(xù)等待頁(yè)面上其他無(wú)關(guān)元素,直至整個(gè)頁(yè)面加載完畢。因而,與顯式等待相比,可能出現(xiàn)無(wú)效等待的情況。
四 等待方法實(shí)戰(zhàn)舉例
1.強(qiáng)制等待方法應(yīng)用實(shí)例
2.顯式等待應(yīng)用實(shí)例
3.隱式等待應(yīng)用實(shí)例
五 總結(jié)
本節(jié)主要介紹Web UI自動(dòng)化中三種元素等待方法,并講解了各自的優(yōu)缺點(diǎn),實(shí)際開(kāi)發(fā)中推薦使用顯示等待,最后,為了便于理解和應(yīng)用,針對(duì)每種等待方法,編寫了對(duì)應(yīng)的腳本。
六 其他資源
關(guān)于python selenium元素常用操作方法的視頻講解,請(qǐng)參看:http://i.youku.com/weiworld521 第 27節(jié)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。