在Selenium中,窗口切换是一个重要的功能,我们在做web自动化测试时,经常需要处理多个窗口或标签页,下面是对窗口切换方法的一些简单总结!
一、窗口切换的基本概念
窗口切换是指在Selenium自动化测试过程中,从一个浏览器窗口或标签页切换到另一个窗口或标签页的操作。这种情况,通常发生在点击链接打开新窗口之时!
二、窗口切换的方法
- 根据索引实现窗口切换
1. 实现方法:
#获取所有窗口的句柄 all_handles = driver.window_handles #切换窗口:(通常新标签页的句柄在列表的末尾) driver.switch_to.window(all_handles[-1])
2. 优点:
操作简单、方便
3. 缺点
这种方法首先假设,窗口句柄是按照先后顺序存放在all_handles列表中,但在实际工作2中,窗口句柄的顺序可能因浏览器的不同而有所差异,因此容易出现错误。 - for循环遍历
1. 实现方法:
#获取所有窗口的句柄
all_handles = driver.window_handles
# 获取当前窗口句柄
c_handle = driver.current_window_handle
#获取新窗口句柄并切花
for handle in all_handles:
if handle != c_handle:
driver.switch_to.window(handle)
2. 优点如果浏览器只有两个标签页,使用这种方法会非常方便、准确
3. 缺点
如果浏览器存在多个标签页(3个及以上),则不合适了
- for循环遍历+判断验证
- 实现方法
-
#获取所有窗口的句柄 all_handles = driver.window_handles #目标窗口的url地址(举例,也可以用其他的特征,如页面标题等) target_url = "http://example.com/page2" #获取新窗口句柄并切花 for handle in all_handles: #先切换 driver.switch_to.window(handle) #在验证,成功则退出循环,否则继续遍历 if target_url in driver.current_url: break
-
- 优缺点:这种方法实现起来虽然稍微麻烦,但适用于页面中有多个窗口情况
- 实现方法
- 实例
-
# @Time :2024/12/2120:15 # @Author :By: xuhf # @Email :121068023@qq.com from selenium import webdriver import time from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome() driver.get("https://www.baidu.com/") time.sleep(2) #点击百度新闻(新增一个标签页:2) driver.find_element_by_link_text("新闻").click() time.sleep(2) #点击贴吧(再次新增一个标签页:3) driver.find_element_by_link_text("贴吧").click() time.sleep(2) #窗口切换 #获取所有窗口的句柄 all_handles = driver.window_handles #目标窗口的url地址(举例,也可以用其他的特征,如页面标题等) target_url = "https://news.baidu.com/" #获取新窗口句柄并切花 for handle in all_handles: #先切换 driver.switch_to.window(handle) #在验证,成功则退出循环,否则继续遍历 if target_url in driver.current_url: break driver.find_element_by_id("ww").send_keys("dd")
-