Selenium是一個自動化測試工具,可用於測試Web應用程序的用戶界面。SeleniumWebDriver是其中的一個模塊,可以驅動瀏覽器執行操作。SeleniumWebDriverWait是一個等待類,可以在某些條件變為true之前,持續等待頁面的元素。
一、選取元素等待
在自動化測試中,有時需要在頁面上找到某個元素,但如果頁面的加載速度較慢,或者網絡不佳,可能會導致查找元素失敗。這時可以使用SeleniumWebDriverWait來等待元素出現。
使用SeleniumWebDriverWait,需要引入ExpectedConditions類,該類提供了許多預定義的等待條件,例如visibility_of_element_located,presence_of_element_located等。下面是一個例子:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://www.example.com")
wait = WebDriverWait(driver, 10)
try:
element = wait.until(EC.visibility_of_element_located((By.ID, 'myElement')))
print("Element found!")
finally:
driver.quit()
在這個例子中,等待10秒直到ID為’myElement’的元素可見。如果元素在10秒內未出現,則返回TimeoutException錯誤。如果元素可見,將打印”Element found!”。
二、多次等待
有時需要等待多個元素,或者需要多次等待同一個元素。在這種情況下,可以將等待邏輯放入一個循環中,直到元素出現為止。下面是一個例子:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://www.example.com")
wait = WebDriverWait(driver, 10)
for i in range(3):
try:
element = wait.until(EC.visibility_of_element_located((By.ID, 'myElement')))
print("Element found!")
break
except:
print("Element not found, waiting and trying again...")
finally:
driver.quit()
在這個例子中,循環3次,每次等待10秒直到ID為’myElement’的元素可見。如果元素在10秒內未出現,則等待下一個10秒。如果元素可見,將打印”Element found!”,退出循環。
三、等待頁面加載
有時需要等待頁面的完全加載,例如在點擊一個鏈接之後等待頁面跳轉完畢。可以使用SeleniumWebDriverWait來等待頁面的url變化,以確保頁面已經加載完畢。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://www.example.com")
wait = WebDriverWait(driver, 10)
try:
wait.until(EC.url_changes)
print("Page loaded!")
finally:
driver.quit()
在這個例子中,等待10秒直到頁面的url變化。如果url變化,則頁面已經加載完畢,將打印”Page loaded!”。如果url未在10秒內變化,則返回TimeoutException錯誤。
四、等待alert彈框
有時需要等待alert彈框出現,例如在點擊一個按鈕之後等待彈框彈出。可以使用SeleniumWebDriverWait來等待alert彈框出現。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://www.example.com")
wait = WebDriverWait(driver, 10)
try:
alert = wait.until(EC.alert_is_present())
print(alert.text)
alert.accept()
finally:
driver.quit()
在這個例子中,等待10秒直到alert彈框出現。如果alert彈框出現,將打印彈框內容,並點擊確認按鈕。如果alert彈框未在10秒內出現,則返回TimeoutException錯誤。
原創文章,作者:DQHAW,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/334108.html
微信掃一掃
支付寶掃一掃