>>如今大多數Web應用程序使用ajax技術,當瀏覽器在加載頁面時,頁面上的元素可能並不是同時被加載完成,這給定位元素的定位增加了困難,
如果因為在加載某個元素時延遲而造成ElementNotVisibleException(不可見元素異常)的情況出現,那么就會降低自動化腳本的穩定性,設置
元素等待可改善這種問題造成的不穩定。
>>WebDriver提供了兩種類型的等待:
>>顯示等待:
具體格式如下:
1 #Author:xiaoxiao
2 from selenium import webdriver 3 from selenium.webdriver.common.by import By 4 from selenium.webdriver.support.ui import WebDriverWait 5 from selenium.webdriver.support import expected_conditions as ec 6
7 def abc(): 8 #打開瀏覽器
9 driver = webdriver.Firefox() 10 driver.get('http://www.baidu.com') 11 #顯示等待
12 element = WebDriverWait(driver,5,0.5).until(ec.presence_of_all_elements_located((By.ID,"kw"))) 13 driver.find_element_by_id("kw").send_keys("selenium")
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions).until()
driver:瀏覽器驅動
timeout:最長超時時間,默認以秒為單位
poll_frequency:檢測的間隔(步長)時間,默認為0.5S
ignored_exceptions:超時后的異常信息,默認情況下拋NoSuchElementException
WebDriverWait()一般由until()或until_not()方法配合使用,下面是方法說明
until(method,message='')
調用該方法提供的驅動程序作為一個參數,直到返回值為True
until_not(method,message='')
調用該方法提供的驅動程序作為一個參數,直到返回值為False
presence_of_all_elements_located()
判斷元素是否存在
>>隱式等待:
通過一定的時長等待頁面上某元素加載完成,如果超出了設置的時長元素還沒有被加載,則拋出NoSuchElementException異常,WebDriver
提供了implicitly_wait()方法來實現隱式等待,默認設置為0
1 #Author:xiaoxiao
2 from selenium import webdriver 3
4 def abc(): 5 #打開瀏覽器
6 driver = webdriver.Firefox() 7 #隱式等待 設置等待時間為10秒
8 driver.implicitly_wait(10) 9 driver.get('http://www.baidu.com')
>>sleep休眠方法
在腳本執行中固定休眠
1 #Author:xiaoxiao 2 from selenium import webdriver 3 from time import sleep 4 5 def abc(): 6 #打開瀏覽器 7 driver = webdriver.Firefox() 8 driver.get('http://www.baidu.com') 9 sleep(3) 10 driver.quit()