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


相关推荐
李可以量化1 小时前
Redis 从了解到精通(三)上:量化交易场景下的数据备份与安全配置
redis·python·安全·qmt·ptrade
卷无止境1 小时前
FastAPI查询参数模型:把散落的参数收拢成一个整齐的盒子
后端·python
Code额1 小时前
Python asyncio 异步编程全套学习文档(零基础完整版)
python·学习·oracle·async·异步·asyncio
钱栈up1 小时前
Mac 开发机一键发版不用切环境:我这样改造了团队的后端部署脚本
运维·python·mac
coder_Eight2 小时前
从 3 天到 8 分钟:我如何把垂直科普内容做成了自动化流水线
python·ai编程
水獭比特2 小时前
MCP SDK v2 迁移别只改依赖:先把 FastMCP 3/4 拆成两条测试线
人工智能·python
l1258652 小时前
# RAG多轮对话检索设计:Query重写如何让“那它呢“变成完整问题
前端·数据库·人工智能·python·算法·fastapi·milvus
dorky-org2 小时前
03-Python基础
python·具身智能
如此这般英俊3 小时前
手搓Claude Code-第十三章 background_tasks
前端·人工智能·chrome·python·算法·语言模型·自然语言处理