在自動化腳本中我們打開指定網址后,為了防止頁面報錯我們一般強制讓頁面sleep1s。但是這樣固定的等待時間會導致我們測試用例執行加長,本篇主要就等待web元素的出現的兩種用法進行展開,包括隱式等待和顯示等待。
隱式等待(driver.implicitly_wait())
1)概述:全局的設定,后面所有的選擇元素的代碼都不需要單獨的指定周期性的等待
2)格式:driver.implicitly_wait(5)
3)解釋:執行了driver.implicitly_wait(5) 這段代碼之后,后面任何選擇元素操作,最多可以等待5s。若元素未找到會每隔0.5s執行一次直到超出最大等待時間。
4)注意:隱式等待只能保證找到元素,但是並不能找到所有元素。此時可以選擇強制sleep讓頁面完全刷新出來
from selenium import webdriver driver=webdriver.Chrome() #隱式等待:設置最大等待時間5s,作用於整個webdriver driver.implicitly_wait(5)
顯示等待
1)引入:如果有一個特殊的操作需要等待30s,其余操作5s內均可做出響應。應該如何做呢?
2)概述:為一個操作專門指定等待時間(針對具體的操作)
方法1: from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By ele = WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.ID,'1')))#60s 不用強記,需要使用的時候直接拷貝,修改后面的元素值即可**((By.ID,'1'))**
方法2::先用臨時隱式等待改為60秒,等操作結束之后再改為5秒 from selenium import webdriver driver=webdriver.Chrome() driver.implicitly_wait(5) driver.get('http://www.baidu.com') ele=driver.find_element_by_id('kw') ele.send_keys('python百度百科') button=driver.find_element_by_id('su') button.click() #**********耗時操作開始#********** driver.implicitly_wait(60) res=driver.find_element_by_id('1') connent = res.text if res.text.startswith('Python是一種計算機程序設計語言') : print('測試通過') else: print('測試失敗') print(connent) #**********耗時操作結束#********** driver.implicitly_wait(5)
參考鏈接:https://www.jianshu.com/p/1ec2f6052397