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()

总结

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

相关推荐
Luminbox紫创测控12 小时前
基于环境舱的新能源汽车三高试验方法与热响应评估
大数据·人工智能·测试工具·汽车·安全性测试·测试标准
菠萝猫yena1 天前
【读书笔记】《测试架构师修炼之道》读书笔记
功能测试·测试工具·单元测试
PhotonixBay1 天前
金属增材制造表面测量:共聚焦显微镜参数优化实践
人工智能·测试工具·制造
LT10157974441 天前
2026年 AI+RPA平台选型指南:智能自动化高效落地
测试工具
写出高质量的博客1 天前
Selenium常用方法
selenium·测试工具
程序员杰哥2 天前
Python+requests+excel 接口自动化测试框架
自动化测试·软件测试·python·测试工具·测试用例·excel·接口测试
介一安全2 天前
【Web安全】JWT常见安全漏洞总结
测试工具·安全·web安全·安全性测试
我的xiaodoujiao2 天前
API 接口自动化测试详细图文教程学习系列20--结合Pytest框架使用
python·学习·测试工具·pytest