Python在使用 Selenium 進行自動化測試時,經常需要等待網頁加載完成,以便在進行下一步操作之前確保網頁已經完全載入。Selenium 提供了兩種等待方式,可以實現等待網頁加載的時間。
1. Python Selenium implicitly_wait() 方法
implicitly_wait() 方法是一種隱式等待方式,它可以讓 WebDriver 在指定時間內等待網頁元素的出現或操作的完成。當 WebDriver 操作一個元素或對網頁進行某些操作時,如果該元素或操作不立即出現或完成,WebDriver 會等待指定時間,如果在等待時間內元素或操作完成,則繼續執行後面的代碼,否則引發一個超時異常。
如果您希望在瀏覽器啟動後就設置等待時間,可以在創建 WebDriver 實例後,使用 implicitly_wait() 方法設置等待時間。例如
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 設置等待時間為 10 秒 在這個例子中,implicitly_wait(10) 設置了等待時間為 10 秒。
2. Python Selenium WEBDRIVERWAIT 類
WebDriverWait 類是一種顯式等待方式,可以等待指定的條件出現或操作完成。這種等待方式可以更精確地設置等待時間,也可以等待更多種類的條件。
使用 WebDriverWait 類需要先導入 selenium.webdriver.support.ui 模塊,然後創建一個 WebDriverWait 對象,設置等待時間和等待條件,例如:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10) # 設置等待時間為 10 秒
wait.until(EC.title_contains("Google")) # 等待網頁標題包含 "Google 在這個例子中,WebDriverWait(driver, 10) 創建了一個 WebDriverWait 對象,設置了等待時間為 10 秒。wait.until() 方法則設置了等待條件,等待網頁標題包含 “Google”,如果在等待時間內滿足條件,則繼續執行後面的代碼,否則引發一個超時異常。
除了等待網頁標題,WebDriverWait 類還提供了其他等待條件,例如等待元素出現、元素可見、元素存在、元素可點擊等等。您可以根據實際需求選擇合適的等待條件。
下面是一個等待元素可見的例子:
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 driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10) # 設置等待時間為 10 秒
element = wait.until(EC.visibility_of_element_located((By.ID, "myElement"))) # 等待元素可見 在這個例子中,wait.until() 方法設置了等待條件 EC.visibility_of_element_located((By.ID, "myElement")),即等待 ID 為 “myElement” 的元素可見。如果在等待時間內元素可見,則獲取該元素對象,否則引發一個超時異常。
綜上所述,Selenium 提供了多種等待方式,可以根據實際需求選擇適合的等待方式。在使用等待時,應該根據網頁載入速度和網頁元素的載入時間,設置合理的等待時間,以確保測試的準確性和穩定性。
driver.set_page_load_timeout()與driver.implicitly_wait()差別是?
driver.set_page_load_timeout() 方法和 driver.implicitly_wait() 方法都是用於等待網頁載入的方法,但它們的使用方式和作用有所不同。
driver.set_page_load_timeout() 方法用於設置頁面載入超時時間,即網頁載入的最長等待時間。如果頁面在指定的時間內沒有載入完成,則會引發一個超時異常。這個方法對整個頁面的載入過程進行等待,包括 HTML 代碼、圖像、JavaScript、CSS 和其他資源。
driver.implicitly_wait() 方法則是用於設置全局等待時間,即當 WebDriver 未立即找到一個元素時,它將等待指定的時間再次查找該元素。如果元素在指定時間內未找到,則引發一個超時異常。這個方法對元素的定位操作進行等待。
綜上所述,driver.set_page_load_timeout() 方法用於控制整個網頁的載入,而 driver.implicitly_wait() 方法用於控制單個元素的定位等待。建議根據需要選擇使用適當的方法。如果您需要等待整個網頁載入完成,可以使用 driver.set_page_load_timeout() 方法。如果您需要等待單個元素定位完成,可以使用 driver.implicitly_wait() 方法。
