Selenium三種等待

image.png

關注微信公號【軟測小生(ruancexiaosheng)

Selenium自動化入門小白都有遇到過如下情況:運行時報錯說找不到元素,但是檢查確認了好多遍元素定位沒有問題,怎么會找不到呢?

然后一查,哎呦,果然是selenium運行機制都沒搞清楚。在我們打開一個頁面時,頁面有一個加載的過程,但是我們在頁面沒有加載完的時候去查了那個元素,當然查不到,那怎么辦呢?那就等一下唄,等頁面都加載完了,或者我要找的元素加載出來了,我再去執行下面的操作。

等待也是有很多講究的,用的好了才能讓自動化更有效率,level才更高。selenium中支持三種等待方式,各有特點,各有不足,適當運用可以讓我們的自動化快的飛起。

一、強制等待(sleep)

強制等待方法即用time.sleep(n),當運行到這里的時候,不管是什么情況下,程序運行到這里都會停下來n秒,n秒之后再繼續執行下面的操作。

這種等待用作調試很有用,有時候也可以在代碼里這樣用,但是不建議總是這樣等待,太死板,嚴重影響程序執行速度。

二、隱性等待(implicitly_wait )

隱性等待對整個driver周期起作用,就是說,selenium中使用的這個瀏覽器不管打開哪個網站implicitly_wait都對它有效。所以它只需要設置一次就行,不要像sleep一樣走到哪都隨手寫一個。

那么隱性等待到底是怎么工作的呢?

image

隱性等待是設置了一個最長等待時間,如果在規定時間內網頁加載完成,則執行下一步,否則一直等到時間截止,報超時加載。注意這里有一個弊端,那就是程序會一直等待整個頁面加載完成,也就是一般情況下你看到瀏覽器標簽欄那個小圈不再轉,才會執行下一步,但有時候頁面想要的元素早就加載完成了,但是因為個別js之類的東西特別慢,我們仍得等到頁面全部完成才能執行下一步,我想等我要的元素出來之后就下一步怎么辦?有辦法,這就要看selenium提供的另一種等待方式——顯性等待了,請繼續往下看。

三、顯性等待(WebDriverWait)

selenium中的wait模塊的WebDriverWait()方法,配合until或者until_not方法,再輔助一些判斷條件,就可以構成這樣一個場景:每經過多少秒就查看一次要查找的元素是否可見,如果可見就停止等待,如果不可見就繼續等待直到超過等待規定的時間后,報超時異常;當然也可以判斷某元素是否在規定時間內不可見等等的各種場景,需要根據自己實際的場景選擇判斷條件。由此也可以看出三種等待是可以互相輔助的。

顯性等待的使用實例如下:

image

上例中,我們設置了隱性等待和顯性等待,在其他操作中,隱性等待起決定性作用,在WebDriverWait中顯性等待起主要作用,但要注意的是:最長的等待時間取決于兩者之間的大者,此例中為30,如果隱性等待時間 > 顯性等待時間,則最長等待時間等于隱性等待時間。

顯性等待主要用到了WebDriverWait類與expected_conditions模塊。

首先介紹一下WebDriverWait類的使用方法:

1、until()

until()方法:直到條件成立返回為真,等待結束。如果超時,拋出TimeoutException,將message傳入異常。

2、not_until()

until_not()方法:直到條件不成立返回為真,是當某元素消失或什么條件不成立則繼續執行,等待結束。如果超時,拋出TimeoutException,將message傳入異常。

其次介紹expected_conditions(Python)模塊:

1、以下兩個條件驗證title,驗證傳入的參數title是否等于或包含于driver.title。

title_is

title_contains

2、以下兩個條件是驗證元素是否出現的,傳入的參數都是元組類型的locator,如(By.ID, ‘kw’),第一個是只要一個符合條件的元素加載出來就通過;第二個必須所有符合條件的元素都加載出來才行。

presence_of_element_located

presence_of_all_elements_located

3、以下三個條件驗證元素是否可見

前兩個傳入參數是元組類型的locator,第三個傳入WebElement,第一個和第三個實質是一樣的。

visibility_of_element_located

invisibility_of_element_located

visibility_of

4、以下兩個條件判斷某段文本是否出現在某元素中。

text_to_be_present_in_element(判斷元素的text)

text_to_be_present_in_element_value(判斷元素的value)

5、以下條件判斷frame是否可切入,可傳入locator元組或者直接傳入定位方式:id、name、index或WebElement。

frame_to_be_available_and_switch_to_it

6、以下條件判斷是否有alert出現。

alert_is_present

7、以下條件判斷元素是否可點擊,傳入locator 。

element_to_be_clickable

8、以下四個條件判斷元素是否被選中。

element_to_be_selected(條件傳入WebElement對象)

element_located_to_be_selected(傳入locator元組)

element_selection_state_to_be(傳入WebElement對象以及狀態,相等返回True,否則返回False)

element_located_selection_state_to_be(傳入locator以及狀態,相等返回True,否則返回False)

9、下面一個條件判斷一個元素是否仍在DOM中,傳入WebElement對象,可以判斷頁面是否刷新。

staleness_of

學習完三種等待方式之后,我們怎么靈活的使用三種等待來最大效果的提高自動化執行效率,相信大家都心里有點數啦,下面我還是再嘮叨總結一下吧!

固定等待sleep與隱性等待implicitly_wait盡量少用,它會對測試用例的執行效率有影響。

顯性的等待WebDriverWait可以靈活運用

什么時候需要用到呢?

1、頁面加載的時候,確認頁面元素是否加載成功可以使用WebDriverWait。

2、頁面跳轉的時候,等待跳轉頁面的元素出現,需要選一個在跳轉前的頁面不存在的元素。

3、下拉菜單的時候,如百度搜索設置的下拉菜單,需要加上個時間等待元素可點擊。

4、頁面刷新的時候

總之,頁面存在改變的時候;頁面上本來沒的元素,然后再出現的元素就需要用顯性等待了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容