Alert 原生弹窗处理

Selenium --- Alert 原生弹窗处理

1. 区分两种弹窗(非常重要)

  1. 原生 alert / confirm / prompt 弹窗 (switch_to.alert 处理)
    JS 原生弹窗:alert()、confirm()、prompt() 特点:不能用 XPath 定位,不属于HTML元素!必须使用 switch_to.alert
  2. 网页自定义弹窗(div弹出框)
    就是普通HTML元素,正常用xpath + 显式等待定位点击,不属于本节内容

2. Alert 对象常用方法

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

alert.text          # 获取弹窗里面的文本
alert.accept()      # 【确定】按钮
alert.dismiss()     # 【取消】按钮
alert.send_keys("内容") # prompt弹窗,可以输入文字(只有prompt支持)

⚠️ 注意:弹窗出现之后才能switch,配合显式等待等待弹窗弹出!

3. 导入等待弹窗的条件

python 复制代码
from selenium.webdriver.support import expected_conditions as EC
# 等待alert弹窗出现
wait.until(EC.alert_is_present())

4. 完整标准示例

python 复制代码
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

web_driver = webdriver.Edge(service=Service(r"D:\Software\edgedriver_win64\msedgedriver.exe"))
wait = WebDriverWait(web_driver,10)
web_driver.get("测试地址")

# 1. 点击按钮,触发alert弹窗
btn = wait.until(EC.element_to_be_clickable((By.ID,"btn-alert")))
btn.click()

# 2. 等待弹窗弹出,切换到alert对象
wait.until(EC.alert_is_present())
alert = web_driver.switch_to.alert

print("弹窗文本:", alert.text)

# 点击确定
alert.accept()
# alert.dismiss() # 如果是confirm弹窗,这里代表取消

web_driver.quit()

三种原生弹窗区别

  1. alert("提示文字"):只有【确定】 → 使用 accept()
  2. confirm("确认删除?"):【确定 / 取消】 → accept() / dismiss()
  3. prompt("请输入姓名"):输入框 + 确定取消 → alert.send_keys("测试") 再 accept()

❌ 高频踩坑

  1. 弹窗还没弹出,直接 switch_to.alert → 报错 NoAlertPresentException
    ✅ 解决方案:wait.until(EC.alert_is_present())
  2. alert 弹窗不能使用xpath定位
  3. 弹窗不处理,页面所有操作都会被阻塞

📝 课堂练习

需求:

  1. 打开含有confirm确认弹窗的测试页面
  2. 点击按钮唤起confirm弹窗
  3. 获取弹窗文本并打印
  4. 执行【取消】操作
  5. 关闭浏览器

测试参考地址(可直接运行):https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_confirm


相关推荐
垆边人似月.37 分钟前
Python中如何使用get函数实现频次查询
服务器·前端·python
AI 编程助手GPT1 小时前
GPT 脚本别只发一个文件:用 uv 把依赖和锁一起交付
人工智能·python·gpt·uv·依赖管理
Patrick在香港1 小时前
第 16,216 次连接之后,它不干了
python·网络编程·socket·tcp·连接池
我命由我123451 小时前
Python 开发 - Python 虚拟环境
运维·开发语言·后端·python·http·https·java-ee
云和数据.ChenGuang2 小时前
LLM大模型对接本地Ollama部署模型
开发语言·人工智能·python·langchain
云和数据.ChenGuang2 小时前
光哥说Python 循环导入(Circular Import)深度解析:成因、排查与解决方案
开发语言·前端·人工智能·python·langchain
TomEval3 小时前
【测AI】第16篇:模型公平性与可解释性测试 — AI 的偏见与黑箱
人工智能·python·功能测试·ai·测试用例
田里的水稻3 小时前
FA_CNN卷积神经网络四---线性层及其拉平PyTorch
人工智能·pytorch·python·深度学习·神经网络·cnn
钱栈up3 小时前
GitHub热榜上手|Claude插件:4.3万星官方目录
python·开源·github
青春不朽5123 小时前
Python 的 list append 为什么是均摊 O(1)?拆开过度分配那张表,看容量翻倍背后的暗账
java·python·list