You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pytest Selenium:跳转后无法定位第二个窗口元素的问题

解决方案:切换到新窗口上下文定位元素

点击元素打开新窗口后,Selenium的WebDriver默认仍停留在原窗口的上下文,所以无法直接定位新窗口内的元素。你需要手动切换到新窗口的句柄,步骤如下:

  1. 点击前记录原窗口的句柄
  2. 触发新窗口打开后,获取所有窗口句柄
  3. 切换到新窗口的句柄
  4. (推荐)等待新窗口加载完成,再定位元素

修改后的代码示例:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--remote-debugging-port=9222")  # Allows attaching DevTools

driver = webdriver.Chrome(options=chrome_options)
driver.get("http://localhost:8080")

# 记录原窗口句柄
original_window = driver.current_window_handle

# 点击触发新窗口
element = driver.find_element("id", "items")
element.click()

# 等待新窗口加载完成,确保获取到所有窗口句柄
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
all_windows = driver.window_handles

# 切换到新窗口
for window_handle in all_windows:
    if window_handle != original_window:
        driver.switch_to.window(window_handle)
        break

# 现在可以正常定位新窗口内的元素,示例如下
# target_element = driver.find_element("id", "your-target-element-id")

# 若后续需要切回原窗口,执行以下代码
# driver.switch_to.window(original_window)

关键说明:

  • 用WebDriverWait等待窗口数量变为2,避免因新窗口加载延迟导致的句柄获取失败
  • 通过遍历排除原窗口句柄,精准切换到新窗口上下文
  • 操作新窗口后,可随时通过原窗口句柄切回初始页面

内容的提问来源于stack exchange,提问作者Yugalkishor Pachpande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:43:09