Pytest Selenium:跳转后无法定位第二个窗口元素的问题
解决方案:切换到新窗口上下文定位元素
点击元素打开新窗口后,Selenium的WebDriver默认仍停留在原窗口的上下文,所以无法直接定位新窗口内的元素。你需要手动切换到新窗口的句柄,步骤如下:
- 点击前记录原窗口的句柄
- 触发新窗口打开后,获取所有窗口句柄
- 切换到新窗口的句柄
- (推荐)等待新窗口加载完成,再定位元素
修改后的代码示例:
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
相关产品推荐
相关产品推荐

