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


相关推荐
szial9 分钟前
网络爬虫与 CDP 实战(一):网页数据到底在哪?从 HTTP 到分页采集
网络·爬虫·python·网络爬虫
DanCheng-studio35 分钟前
智能科学与技术毕设易上手题目建议
python·毕业设计·毕设
醇氧38 分钟前
nohup 后台启动 uvicorn(仅测试 / 临时运行)
linux·运维·网络·python·python3.11
2601_957883841 小时前
2026年9月:专业解决雷神笔记本维修难题
python·电脑
Omics Pro2 小时前
预测性虚拟细胞中显式机理算子
大数据·数据库·人工智能·python·算法·机器学习·自然语言处理
秋名RG2 小时前
Java历代LTS版本新特性详解(代码增强版)
java·开发语言·python
27669582922 小时前
youdao/有道翻译APP 算法协议分析
开发语言·前端·python·sign·youdao·有道翻译app算法·有道app协议请求
夏天拐跑了西瓜10 小时前
一文入门LangChain:从框架认知到构建你的第一个AI Agent
python·langchain·conda·agent
魔猴疯猿10 小时前
从0到1用Python开发第一个智能体
人工智能·python·深度学习·神经网络·机器学习
xiaoqi019512 小时前
机器学习因子分析实战:从量化特征到可视化决策
人工智能·python·机器学习