多窗口切换——selenium

  1. 获取窗口句柄(以Python + Selenium为例)
    • current_window_handle方法
      • 用于获取当前窗口的句柄。句柄是一个标识符,用于唯一标识一个窗口。
      • 示例代码:
python 复制代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")
current_window_handle = driver.current_window_handle
print("当前窗口句柄:", current_window_handle)
  • window_handles方法
    • 用于获取所有打开窗口的句柄,返回一个句柄列表。这个列表在需要切换窗口时非常有用。
    • 示例代码:
python 复制代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")
# 打开一个新窗口(假设通过点击某个链接打开新窗口)
driver.find_element_by_link_text("打开新窗口链接").click()
window_handles = driver.window_handles
print("所有窗口句柄:", window_handles)
  1. 切换窗口(以Python + Selenium为例)
    • 通过句柄切换窗口
      • 当有多个窗口句柄时,可以通过指定句柄来切换窗口。
      • 示例代码:
python 复制代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")
# 打开一个新窗口(假设通过点击某个链接打开新窗口)
driver.find_element_by_link_text("打开新窗口链接").click()
window_handles = driver.window_handles
# 切换到新打开的窗口
driver.switch_to.window(window_handles[1])
  • 在上述代码中,window_handles方法获取了所有窗口的句柄,由于新打开的窗口句柄在列表中的第二个位置(索引为1,第一个是原始窗口),所以通过driver.switch_to.window(window_handles[1])切换到新窗口。
  1. 切换回原始窗口(以Python + Selenium为例)
    • 示例代码:
python 复制代码
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.example.com")
original_window_handle = driver.current_window_handle
# 打开一个新窗口(假设通过点击某个链接打开新窗口)
driver.find_element_by_link_text("打开新窗口链接").click()
window_handles = driver.window_handles
# 切换到新打开的窗口
driver.switch_to.window(window_handles[1])
# 切换回原始窗口
driver.switch_to.window(original_window_handle)
  • 这里首先保存了原始窗口的句柄,在切换到新窗口并进行相关操作后,通过driver.switch_to.window(original_window_handle)切换回原始窗口。
  1. 等待新窗口打开(结合WebDriverWait)
    • 在实际操作中,新窗口的打开可能需要一些时间。可以使用WebDriverWait来等待新窗口打开,确保在切换窗口之前窗口已经成功打开。
    • 示例代码(使用WebDriverWait等待新窗口打开并切换):
python 复制代码
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.example.com")
# 记录原始窗口句柄
original_window_handle = driver.current_window_handle
# 点击打开新窗口的链接
driver.find_element_by_link_text("打开新窗口链接").click()
# 等待新窗口打开
new_window_handle = WebDriverWait(driver, 10).until(
    EC.window_opens(lambda: len(driver.window_handles) > 1)
)
# 切换到新窗口
driver.switch_to.window(new_window_handle)
  • 在这个示例中,WebDriverWait等待条件是新窗口打开,即window_opens条件,通过一个匿名函数lambda: len(driver.window_handles) > 1来判断窗口数量是否大于1。当条件满足时,until方法返回新窗口的句柄,然后就可以切换到新窗口进行操作。
相关推荐
niuyueyang4 小时前
MCP `/mcp/status` Lifecycle 技术方案
java·服务器·数据库
Umi·4 小时前
MySQL之DQL使用实例
数据库·mysql
曦夜日长5 小时前
主从 Reactor 高并发服务器实战 (三):服务器套接字Socket模块详解与实现
运维·服务器·网络
牧竹子5 小时前
当前支持向量的主流数据库情况对比
数据库
老约家的可汗6 小时前
Linux开发三件套:make、git、gdb 入门指南
linux·运维·服务器
从琳开始9896 小时前
从Socket到TCP回显服务器:Java网络编程完整指南
java·服务器·网络·tcp/ip·java-ee
云-缩影7 小时前
做微信小程序,自建服务器还是用云托管:技术选型对比
服务器·微信小程序·小程序
Small-Young7 小时前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·spring boot·mysql·postgresql·乐观锁·并发控制
浮生若城7 小时前
MySQL 数据库基础
数据库·mysql
土星云SaturnCloud7 小时前
基于边缘计算与AI视觉的智慧街面治理方案:架构设计与场景落地
服务器·人工智能·ai·边缘计算