顯示等待WebDriverWait常用寫法解析

2022-07-12 07:33:07 字數 2007 閱讀 6598

在網路上各種selenium自動化測試框架搭建的過程中,對於selenium顯示等待有好幾種寫法,包含但不限於以下幾種:

先來簡單看看寫法,在webdriverwait初始化時傳入了driver引數,然後呼叫until方法,傳入了乙個lambda匿名函式

webdriverwait(self.driver).until(lambda x:x.find_element(loc))
為了看清執行原委我們得去看看原始碼(如果你建立了虛擬環境的話,路徑會如下所示):

可以看到driver引數傳進來之後被賦值給了webdriverwait類變數_driver,那麼他在**使用了呢,我們接著往下看:

在webdriverwait類的until函式中使用了。

先看一下until的函式注釋(翻譯):呼叫驅動程式提供的方法作為引數,直到返回值不是false。

結合上文,我們傳入的method是lambda x:x.find_element(*loc)是乙個匿名函式。

結合官方文件的說明,f(0)可以實現給lambda傳入引數。lambda可以引用所在域的變數,x引用的域變數就是webdriverwait的self._driver類變數 ,lambda x:x.find_element(loc)表示式就被替換成為了self.driver.find_element就可以正常的使用driver使用一樣

​ 寫法1的執行大致就是這樣了。

寫法2我們必須關聯以下expected_conditions模組才能看清楚

可以看到ec中的都是類,函式只有兩個,後面介紹

第二種寫法裡面我們先看until裡面的部分,locator的引數就是我們傳入的loc,loc是什麼呢,就是(by.id,'#su')這種。

然後下面實現了乙個__call__方法,裡面傳入的引數就是driver,這個方法是什麼意思呢,請看下面的小提示。

然後第64行把這兩個引數傳給了_find_element方法,ec模組中的兩個函式這個就是其中之一:

這個函式返回了什麼呢,第411行,返回了driver.find_element()方法,通過__call__方法返回了self.driver.find_element。

由此我們可以推斷出寫法1和寫法2是完全一樣的,包括解包的時機。

讀完了寫法1和寫法2,寫法3會顯得更簡單

presence_of_element_located(傳入的引數)(傳入的driver),在前面小提示已經說過,第二個括號中的正是通過__call__方法來實現的過載運算()呼叫。

然後兩個引數傳入進去後,presence_of_element_located函式返回driver.find_element。

和寫法1和寫法2不同的是外層沒有包含顯示等待的類。所以寫法3不支援顯示等待,只是返回了乙個普通的driver方法或基於driver方法實現的結果。

顯示等待WebDriverWait

1.等待的三種方式 1 time.sleep 2 程序休眠 s 2 implicitly wait 30 等待頁面完全載入完成,指的是左上角轉圈結束,很耗費時間 3 webdriverwait self,driver,timeout,poll frequency poll frequency,ign...

selenium 顯示等待

顯示等待的 定義了等待條件,只有該條件觸發,才執行後續 最垃圾的顯示等待就是使用 time.sleep 這種情況是指定了固定的等待時長。存在一些特別方便的方法,可以使你的 只等待需要的時常,而不是固定的時常。webdriverwait 和 expectedcondition 組合使用,就是一種有效的...

顯示等待和隱式等待的區別

顯示等待明確的要等到某個元素出現或者某個可點選等條件,等不到,一直等,除非在規定時間之內都沒有找到,那麼就要跳出異常 隱式等待是在嘗試發現某個元素的時候,如果沒能立刻發現,等待固定長度的時間,設定了時間,作用範圍就是webdriver物件例項的整個生命週期 不推薦使用 除錯的時候用 import t...