咱們在作WEB自動化時,常常聽到小夥伴說,明明代碼沒問題,死活定位不到元素,一運行就報錯啊。是由於有時候由於網絡或其它緣由致使咱們須要定位的元素還沒加載出來,咱們代碼就執行下一步操做了,這個時候就須要咱們在某些場景下加等待時間。css
咱們日常用到的有三種等待方式:html
一、強制等待--就是說無論元素有沒有加載出來,必須等3秒鐘,時間一到就就執下面代碼,導入time模塊就能夠實現python
#!usr/bin/python3
import time from selenium import webdriver
# 啓動瀏覽器 driver = webdriver.Chrome()# 打開百度首頁 driver.get('https://www.baidu.com/')# 強制等待3秒 time.sleep(3) driver.find_element_by_css_selector("#kw").send_keys("python")# 退出 driver.quit()
二、隱式等待web
第二種辦法叫隱性等待,implicitly_wait(xx),隱性等待的意義是:閃電俠和凹凸曼約定好,不論閃電俠去哪兒,都要等凹凸曼xx秒,若是凹凸曼在這段時間內來了,則倆人當即出發去打怪獸,若是凹凸曼在規定時間內沒到,則閃電俠本身去,那天然就等着凹凸曼給你拋異常吧。面試
#!usr/bin/python3
from selenium import webdriver # 啓動瀏覽器 driver = webdriver.Chrome()# 打開百度首頁 driver.get(r'https://www.baidu.com/') driver.find_element_by_css_selector("#kw").send_keys("python") driver.find_element_by_css_selector("#su").click()# 隱式等待30秒 driver.implicitly_wait(30) result = driver.find_elements_by_css_selector("h3.t>a")for i in result:print(i.text)# 退出 driver.quit()
三、顯示等待瀏覽器
第三種辦法就是顯性等待,WebDriverWait,配合該類的until()和until_not()方法,就可以根據判斷條件而進行靈活地等待了。它主要的意思就是:程序每隔xx秒看一眼,若是條件成立了,則執行下一步,不然繼續等待,直到超過設置的最長時間,而後拋出TimeoutException。網絡
主要有4個參數:post
driver:瀏覽器驅動學習
timeout:等待時間測試
poll_frequency:檢測的間隔時間,默認0.5s
ignored_exceptions:超時後的異常信息,默認拋出NoSuchElementException
#!usr/bin/python3
from seleniumimport webdriver from selenium.webdriver.support.wait importWebDriverWait driver = webdriver.Chrome()# 打開百度首頁 driver.get(r'https://www.baidu.com/') driver.find_element_by_css_selector("#kw").send_keys("selenium") driver.find_element_by_css_selector("#su").click()# 超時時間爲30秒,每0.2秒檢查1次,直到class="tt"的元素出現 text =WebDriverWait(driver, 30, 0.2).until(lambda x:x.find_element_by_css_selector(".tt")).text print(text)# 退出 driver.quit()
總結: 軟件測試、接口測試、自動化測試、面試經驗交流。感興趣能夠關注咱們碼上開始,公衆號內會有不按期的發放免費的資料連接,還有同行一塊兒技術交流。這些資料都是從各個技術網站蒐集、整理出來的,若是你有好的學習資料能夠私聊發我,我會註明出處以後分享給你們。