一、為什麼需要切換窗口
在進行Web應用程序自動化測試時,經常需要切換窗口進行操作或獲取元素。一個常見的場景是根據特定的條件在新窗口中打開一個鏈接,然後在這個新窗口中執行測試操作。切換窗口也可用於處理彈出窗口、操作打開多個標籤頁的Web應用,以及測試多個窗口同時運行的應用程序。
總結來說,窗口切換對於Web應用自動化測試非常重要。此時,selenium可以幫助我們快速切換窗口進行測試操作。
二、如何切換窗口
1. 使用窗口句柄切換
在selenium中使用窗口句柄(window handle)來唯一標識每個窗口。每個窗口都有一個唯一的句柄。可以使用以下代碼獲取當前瀏覽器所有窗口的句柄:
driver.window_handles
這將返回一個窗口句柄列表,其中每個句柄代表一個窗口。
可以使用以下代碼來切換到特定的窗口:
window_handle = driver.window_handles[index]
driver.switch_to.window(window_handle)
其中,index
是在窗口句柄列表中的索引。
但是,這種方法存在一個問題:如果窗口順序發生了改變,index
將無法訪問到正確的窗口。為了避免這個問題,我們可以使用窗口標題來切換。
2. 使用窗口標題切換
可以使用以下代碼獲取當前窗口的標題:
driver.title
可以使用以下代碼來切換到特定的窗口:
window_title = "target_window_title"
for handle in driver.window_handles:
driver.switch_to.window(handle)
if driver.title == window_title:
break
在這個例子中,我們通過循環遍歷每個窗口並使用switch_to.window()
方法訪問每個窗口的內容。當發現具有所需標題的窗口時,我們停止切換並退出循環。
三、窗口切換的注意事項
1. 等待窗口載入
在切換到新的窗口時,需要等待頁面完全載入。否則,訪問窗口中的元素會引發StaleElementReferenceException
異常,表示嘗試訪問不存在的元素。
可以使用以下代碼來等待窗口載入:
window_handle = driver.window_handles[index]
wait.until(EC.new_window_is_loaded(window_handle))
其中,wait
是一個WebDriverWait
對象,使用expected_conditions
模塊的new_window_is_loaded()
方法等待窗口載入。
2. 切換回父窗口
如果在測試期間打開了多個窗口,可能需要在測試結束時將控制返回到原始(或父)窗口。
可以使用以下代碼來切換回原始窗口:
driver.switch_to.default_content()
這將將焦點返回到原始窗口。
3. 關閉窗口
可以使用以下代碼來關閉當前或指定的窗口:
driver.close()
這將關閉當前窗口。也可以使用以下代碼關閉指定的窗口:
window_handle = driver.window_handles[index]
driver.switch_to.window(window_handle)
driver.close()
在這個例子中,我們通過先切換到要關閉的窗口,然後關閉該窗口。此外,需要注意的一點是,不允許關閉最後一個窗口。
四、應用實例示例
以下代碼說明如何在selenium中切換窗口並獲取特定元素:
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
# 使用Chrome driver
driver = webdriver.Chrome()
# 打開網站
driver.get("https://www.google.com")
# 等待載入
wait = WebDriverWait(driver, 10)
search_box = wait.until(EC.presence_of_element_located((By.NAME, "q")))
# 搜索項
search_box.send_keys("selenium window switch")
search_box.submit()
# 新窗口打開
link_text = "Selenium Python Tutorial: Switch Tabs & Windows | Browser ..."
wait.until(EC.element_to_be_clickable(
(By.PARTIAL_LINK_TEXT, link_text))).click()
# 切換到新窗口
wait.until(EC.new_window_is_opened)
window_handle = driver.window_handles[1]
driver.switch_to.window(window_handle)
# 在新窗口中查找元素
wait.until(EC.presence_of_element_located(
(By.PARTIAL_LINK_TEXT, "Selenium Python Tutorial: Switch Tabs & Windows")))
# 切換回原始窗口
driver.switch_to.default_content()
# 關閉所有窗口
driver.quit()
五、總結
本文介紹了selenium中切換窗口的方法,包括使用窗口句柄和使用窗口標題切換窗口。對於窗口切換,需要注意等待窗口載入、切換回原始窗口以及關閉窗口等注意事項。
原創文章,作者:ZWSGH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/334630.html