Selenium常用函数(窗口与弹窗)

上一篇我们搞定了元素的基础操作(点击、输入、获取文本),这一篇我们来解决窗口与弹窗的操作。

窗口操作

很多初学者都会遇到这个问题:点击链接打开新页面后,获取 title / URL 还是旧页面的。

原因很简单,程序不知道你要操作哪个窗口,每个浏览器窗口都有一个唯一标识------句柄(handle)我们必须通过句柄,手动切换到新窗口才能操。

获取当前窗口的句柄

python 复制代码
#获取当前窗口的句柄(旧窗口)
old_handle = driver.current_window_handle

获取所有窗口的句柄

python 复制代码
# 获取所有窗口的句柄(返回一个列表)
all_handles = driver.window_handles

切换到最新打开的窗口

python 复制代码
# 切换到最新打开的窗口(最常用)
for handle in all_handles:
    if handle != old_handle:
        driver.switch_to.window(handle)

窗口大小设置

很多网页缩小窗口会自动改变排版,元素定位直接失效,最大化保证页面布局统一。

python 复制代码
# 窗口最大化(常用)
driver.maximize_window()

# 窗口最小化
driver.minimize_window()

# 全屏模式
driver.fullscreen_window()

# 自定义大小(宽, 高)
driver.set_window_size(1024, 768)

自动化截图

脚本自动运行时,出错需要自动**截图,**方便排查问题。

python 复制代码
import datetime

# 基础用法(固定名字,会覆盖)
driver.save_screenshot("test.png")

# 高阶用法(带时间戳,不会覆盖)
filename = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + ".png"
driver.save_screenshot(filename)

关闭窗口

python 复制代码
# 关闭当前窗口
driver.close()

# 关闭浏览器 + 退出驱动
driver.quit()

在我们测试完毕后,需要关闭多余的窗口。

第一个是关掉当前标签页,第二个是关整个浏览器,释放资源。

演示代码

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# 1. 打开Chrome浏览器
driver = webdriver.Chrome()
# 2. 打开百度首页(这是第一个窗口,旧窗口)
driver.get("https://www.baidu.com")
# 3. 最大化窗口(避免元素被遮挡,新手建议必加)
driver.maximize_window()
time.sleep(1)  # 等待1秒,让页面加载完整

# 4. 获取旧窗口(百度首页)的句柄,存起来备用
old_handle = driver.current_window_handle
print(f"百度首页的句柄:{old_handle}")  # 可以打印看看,是一串随机字符串

# 5. 点击"新闻"链接(打开新窗口)
# 定位"新闻"链接
news_link = driver.find_element(By.CSS_SELECTOR, "#s-top-left > a:nth-child(1)")
news_link.click()
time.sleep(2)  # 等待2秒,让新窗口完全打开(新手必加,避免切换失败)

# 6. 获取所有窗口的句柄(此时有2个窗口:百度首页、新闻页面)
all_handles = driver.window_handles
print(f"所有窗口的句柄:{all_handles}")  # 打印结果是一个列表,包含2个句柄
print(f"当前打开的窗口数量:{len(all_handles)}")  # 输出2,确认新窗口打开

# 7. 切换到新窗口(新闻页面)
# 循环所有句柄,找到和旧窗口句柄不一样的那个,就是新窗口
for handle in all_handles:
    if handle != old_handle:  # 如果当前句柄不是旧窗口的
        driver.switch_to.window(handle)  # 切换到这个新句柄对应的窗口
        break  # 找到后就退出循环,不用再找了

# 8. 切换成功后,获取新窗口(新闻页面)的标题和URL
news_title = driver.title
news_url = driver.current_url
print(f"新闻窗口的标题:{news_title}")
print(f"新闻窗口的URL:{news_url}")
time.sleep(1)

# 9. 切换回旧窗口(百度首页)
driver.switch_to.window(old_handle)
print(f"切换回旧窗口后的标题:{driver.title}")  # 打印百度首页标题,确认切换成功
time.sleep(1)

# 10. 再次切换到新窗口,关闭它
driver.switch_to.window(handle)  # 这里的handle就是上面找到的新窗口句柄
driver.close()  # 关闭当前窗口(新窗口)
time.sleep(1)

# 11. 最后关闭浏览器,释放资源
driver.quit()

弹窗操作

做自动化测试时,模拟用户操作某网页(如表单提交、删除操作),点击按钮后,页面弹出浏览器自带的弹窗(警告、确认或提示弹窗)会阻碍我们的操作,此时我们就需要用到以下的函数了。

首先我们要了解弹窗有三种类型

警告弹窗

确认弹窗

提示弹窗

第一步我们需要

找到弹窗

python 复制代码
alert = driver.switch_to.alert

点击确认/取消

python 复制代码
//确认
alert.accept()
//取消
alert.dismiss()

在弹窗内输入文字

python 复制代码
alert = driver.switch_to.alert
# 输入内容
alert.send_keys("我是输入的文字")
# 确认
alert.accept()

总结

学会窗口与弹窗操作,解决了多页面跳转无法交互、网页弹窗阻碍执行的难题,能正常完成跨窗口操作与弹窗处理。但实际运行中代码执行速度快于页面加载速度,常常出现元素未加载完成就执行指令而报错的情况,这就需要用到等待机制来解决此类问题。

相关推荐
程序员小远14 天前
自动化测试基础知识总结
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
LT101579744414 天前
2026年Web自动化测试工具选型指南:多浏览器兼容解决方案
前端·测试工具·自动化
程序员三藏14 天前
Web自动化测试详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
深蓝电商API14 天前
Selenium 5.0 全新架构解析:值得升级吗?
爬虫·selenium
专业机床数据采集14 天前
基于 Wireshark 抓包逆向设备通信协议,并用 C# UDP协议跨平台 实现宝元数控程序列表读取、上传、下载和删除
网络·测试工具·wireshark·程序传输·宝元数控·dnc·数控程序传输
程序员龙叔15 天前
从 0 开始学习 AI 测试 - 从接口测试来教你如何用 AI 来生成自动化测试代码
自动化测试·软件测试·python·软件测试工程师·测试工具·性能测试·ai测试
Saniffer_SH15 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
川石课堂软件测试15 天前
APP自动化测试|高级手势操作&toast操作
css·功能测试·测试工具·microsoft·fiddler·单元测试·harmonyos
LT101579744415 天前
2026年开源自动化测试工具选型指南:功能与适用场景解析
测试工具·开源·自动化