1. 程式人生 > >Selenium顯示等待和隱式等待

Selenium顯示等待和隱式等待

1、selenium的顯示等待
原理:顯示等待,就是明確的要等到某個元素的出現或者是某個元素的可點選等條件,等不到,就一直等,除非在規定的時間之內都沒找到,那麼久跳出Exception
(簡而言之,就是直到元素出現才去操作,如果超時則報異常)

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

——driver:WebDriver 的驅動程式(Ie, Firefox, Chrome 或遠端)

——timeout:最長超時時間,預設以秒為單位

——poll_frequency:休眠時間的間隔(步長)時間,預設為 0.5 秒

——ignored_exceptions:超時後的異常資訊,預設情況下拋 NoSuchElementException 異常

例:WebDriverWait(driver, 10).until(lambda driver: driver.findElement(By.Id("someId"))) ;

//每隔0.5秒掃描一次檢查是否有id為someId的元素,10秒後沒找到就不找了拋異常。

2、selenium的隱式等待

原理:隱式等待,就是在建立driver時,為瀏覽器物件建立一個最長等待時間,這個方法是得不到某個元素就等待,直到拿到元素位置(如果一直拿不到就等到時間截止),再執行下一步。

注意這裡有一個弊端,那就是程式會一直等待整個頁面載入完成(瀏覽器標籤欄那個小圈不再轉

,才會執行下一步,但有時候頁面想要的元素早就載入完成了,但是因為個別js之類的東西特別慢,仍得等到頁面全部完成才能執行下一步,我想等我要的元素出來之後就下一步怎麼辦?這就要用到顯性等待wait了。

implicitlyWait(long arg0, TimeUnit arg1)

 —arg0: 等待時間

 —arg1:時間單位 ,TimeUnit.MILLISECONDS=毫秒,TimeUnit.MICROSECONDS=微秒,TimeUnit.SECONDS=秒

例:

//隱式等待針對全域性,等待5毫秒,等不到就拋異常然後繼續執行後面的程式碼

driver.manage().timeouts().implicitlyWait(

5,TimeUnit.MILLISECONDS);

需要特別說明的是:隱性等待對整個driver的週期都起作用,所以只要設定一次即可

3、笨方法等待
使當前執行緒進入等待,Thread.sleep();這種等待屬於死等,很容易讓執行緒掛掉,使程式拋異常,所以要慎用此方法