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-tw/n/334108.html