📅  最后修改于: 2023-12-03 15:37:31.393000             🧑  作者: Mango
在 Web 应用程序的自动化测试中,有时需要在一个新窗口中打开一个链接。Selenium 提供了多种方法来处理新开窗口,本文将介绍其中的一些方法。
window_handles
当新窗口被打开时,Selenium 会将新窗口的句柄(handle)存储在一个列表中。可以使用 window_handles
属性来获取当前打开的所有窗口的句柄,并通过切换句柄来操作不同的窗口。
以下是一个使用 window_handles
的示例:
# 导入 webdriver
from selenium import webdriver
# 创建 webdriver 实例
driver = webdriver.Chrome()
# 打开指定 URL
driver.get('https://www.baidu.com/')
# 在新窗口中打开链接
link = driver.find_element_by_css_selector('#su')
link.click()
# 切换到新窗口
handles = driver.window_handles
driver.switch_to.window(handles[-1])
# 处理新窗口中的内容
# ...
# 切换回原来的窗口
driver.switch_to.window(handles[0])
# 关闭窗口
driver.close()
在上面的示例中,我们首先打开了百度首页,然后在新窗口中打开了搜索按钮的链接。接着,我们通过 window_handles
获取了所有窗口的句柄,并切换到了新窗口中。在新窗口中处理完内容后,我们切换回了原来的窗口,并关闭了新窗口。
execute_script
另一种处理新窗口的方式是使用 execute_script
方法,该方法可以在当前页面中执行 JavaScript 代码。我们可以通过执行 JavaScript 代码来打开新的窗口,并通过 window.open
方法来获取新窗口的句柄。
以下是一个使用 execute_script
的示例:
# 导入 webdriver
from selenium import webdriver
# 创建 webdriver 实例
driver = webdriver.Chrome()
# 打开指定 URL
driver.get('https://www.baidu.com/')
# 执行 JavaScript 代码打开新窗口
driver.execute_script("window.open('https://www.baidu.com/')")
# 切换到新窗口
handles = driver.window_handles
driver.switch_to.window(handles[-1])
# 处理新窗口中的内容
# ...
# 切换回原来的窗口
driver.switch_to.window(handles[0])
# 关闭窗口
driver.close()
在上面的示例中,我们通过执行 JavaScript 代码来打开了一个新的百度页面,并通过 window_open
获取了新窗口的句柄。接着,我们切换到了新窗口中,并在处理完内容后切换回了原来的窗口并关闭了新窗口。
以上是两种在 Selenium 中处理新窗口的方法,可以根据具体需求选择其中的一种。使用 window_handles
需要先找到链接并点击链接,而使用 execute_script
则可以直接打开新的页面。同时,window_handles
更加稳定可靠,而 execute_script
则可能会受到 JavaScript 禁用等限制。