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時,為瀏覽器物件建立一個最長等待時間,這個方法是得不到某個元素就等待,直到拿到元素位置(如果一直拿不到就等到時間截止),再執行下一步。
注意這裡有一個弊端,那就是程式會一直等待整個頁面載入完成(瀏覽器標籤欄那個小圈不再轉)
implicitlyWait(long arg0, TimeUnit arg1);
—arg0: 等待時間
—arg1:時間單位 ,TimeUnit.MILLISECONDS=毫秒,TimeUnit.MICROSECONDS=微秒,TimeUnit.SECONDS=秒
例:
//隱式等待針對全域性,等待5毫秒,等不到就拋異常然後繼續執行後面的程式碼
driver.manage().timeouts().implicitlyWait(
需要特別說明的是:隱性等待對整個driver的週期都起作用,所以只要設定一次即可
3、笨方法等待使當前執行緒進入等待,Thread.sleep();這種等待屬於死等,很容易讓執行緒掛掉,使程式拋異常,所以要慎用此方法