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


相关推荐
小柯南敲键盘2 分钟前
跨马翻译:AI批量图片翻译工具,跨境电商视频字幕翻译与智能抠图一体搞定
人工智能·python·音视频
2601_9622972513 分钟前
Python里behave和pytest-bdd哪个更适合中大型项目?为什么?
python·bdd·行为驱动开发·behave·pytest-bdd
YCOSA20252 小时前
系统工具使用检测.exe (仅供娱乐)
python·microsoft
2601_962295332 小时前
如何python实现网页的自动化
python·selenium·beautifulsoup·requests·网页自动化
ofoxcoding3 小时前
GPT Image 2.5 API 实战:Python 调用实现图片生成与编辑
人工智能·python·gpt·ai
张小姐的猫3 小时前
【AI大模型接入SDK】 —— Gemini接入封装
android·数据结构·数据库·c++·人工智能·python
Elastic 中国社区官方博客3 小时前
Elasticsearch Python DSL 客户端开发
大数据·数据库·python·elasticsearch·搜索引擎·全文检索
计算机编程-吉哥4 小时前
脑肿瘤MRI智能识别系统:基于深度学习的像素级脑肿瘤语义分割平台【计算机毕业设计选题推荐】
人工智能·python·深度学习·算法·毕业设计·课程设计·大数据毕业设计选题推荐
小木_.4 小时前
Python 离线识别滑块缺口距离,项目推荐
开发语言·python·滑块识别·人机验证·滑块缺口·缺口识别
Cenxi4 小时前
Python字符串方法练习手册
人工智能·python