selenium--等待的三種方式


前戲

在我們做UI自動化的時候,最不穩定的就是頁面了,由於各種原因頁面的元素沒有加載出來,比如網速慢,服務器響應慢等等,這時候如果我們去操作頁面的元素,selenium會給我們拋出一個NoSuchElementException的異常。我們可以等待頁面頁面加載出來或者一段時間再去操作,這樣的話大大降低了這種錯誤的出現。

我們可以用python內置的sleep來強制等待,或者用selenium提供的顯示等待或者隱式等待的方法


相關模塊:
WebDriverWait 顯示等待針對元素必用
expected_conditions 預期條件類(用於顯示等待)
NoSuchElementException 用於隱式等待拋出異常

 

sleep

sleep強制等待,不管元素有沒有加載出來,都必須等到時間才會往下去執行

from selenium import webdriver

from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
sleep(2)
driver.find_element_by_css_selector('#kw').send_keys('python')
sleep(2)
driver.quit()

 

隱式等待

隱式等待不針對某一個元素進行等待,全局元素等待,隱式等待會等待整個頁面加載完成,也就是說瀏覽器窗口標簽欄中不在出現轉動的小圓圈,才會執行下一步

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep, ctime

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
sleep(2)
# 設置隱式等待,最多等待 5s,如果五秒內什么時候加載完就什么時候進行操作
driver.implicitly_wait(5)
try:
    print(ctime())
    driver.find_element_by_css_selector('#kw').send_keys('python')
    driver.find_element_by_css_selector('#su').click()
except NoSuchElementException  as msg:
    print(msg)
finally:
    print(ctime())
sleep(2)
driver.quit()

 

顯示等待

顯示等待是針對某一個元素進行相關等待判定

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
sleep(2)
driver.find_element_by_css_selector('#kw').send_keys('python')

# 一共等待 5 秒鍾,每 0.5s 找一次,直到通過 ID 找到
element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'su')))

element.click()
sleep(2)
driver.quit()

 

不是總結的總結

學了等待的三種方法,我最常用的還是顯示等待,寫一個公共的方法,把通過什么定位和定位元素抽離出來,什么時候用,傳這兩個參數就可以了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM