Selenium之顯式、隱式等待

selenium自動化頁面元素存在異常發生的緣由有如下幾點:web

     ① 頁面加載時間過慢,須要查找的元素程序已經完成,可是頁面還未加載成功。此時能夠加載頁面等待時間。ui

     ② 查找的元素沒有在當前的iframe或者frame中。此時須要切換會對應的iframe或者frame中才行。ci

     ③ 元素錯誤。element

解決頁面加載時間所引發的元素找不到,能夠爲頁面設置加載時間。時間的設置分爲如下三種:get

     一、顯示等待   WebDriverWait()iframe

     二、隱式等待   implicitly_wait()selenium

     三、強制等待  sleep()it

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)自動化

說明: driver   -----  WebDriver的驅動程序io

          timeout  ------ 最長超時時間,以秒爲單位

          poll_frequency   ------- 休眠時間的間隔(步長)時間,默認爲0.5秒

          ignored_exceptions  -------  超時後的異常信息,默認狀況下拋NoSuchElementException異常

例如:

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

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

 

簡單代碼實現:

        import  time 

        from selenium import webdriver

        from selenium.webdriver.support.wait import WebDriver

        driver = webdriver.Chrome()

        driver.get("http://www.baidu.com")

        element = WebDriverWait(driver, 10).until(lambda driver:driver.find_element_by_id("kw"))

        element.send_keys("selenium")

        # 添加智能等待

        driver.implicitly_wait(30)

        driver.find_element_by_id('su').click()

        time.sleep()

        driver.quit()        

相關文章
相關標籤/搜索