📌  相关文章
📜  在 selenium 中打开新窗口 (1)

📅  最后修改于: 2023-12-03 15:37:31.393000             🧑  作者: Mango

在 Selenium 中打开新窗口

在 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 禁用等限制。