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

总结

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

相关推荐
IT界的老黄牛14 小时前
手机 Chrome 远程调试实战:adb + DevTools,localhost 就是你的测试服
chrome·测试工具·adb
сокол14 小时前
【网安-研判-WireShark流量分析】HTTPS流量解密
测试工具·https·wireshark
川石课堂软件测试14 小时前
UI自动化测试|CSS元素定位实践
css·测试工具·ui·fiddler·单元测试·appium·harmonyos
深蓝电商API16 小时前
Playwright vs Puppeteer vs Selenium 2026终极对比
爬虫·selenium·puppeteer·playwright
可可南木1 天前
3070文件格式--21--fixture文件 3
功能测试·测试工具
一只小白0001 天前
【JVM | 第五篇】—— 深入理解垃圾回收
jvm·测试工具
光影6272 天前
Python接口自动化测试----Requests库基础入门
开发语言·python·测试工具·pycharm·自动化
J-Tony112 天前
【JVM】JVM调优经验
jvm·测试工具
ClouGence2 天前
不用写 Selenium,零代码的 UI 自动化测试工具!
selenium·测试
pan_junbiao4 天前
Whistle 抓包工具的安装与使用
前端·测试工具·压力测试·抓包