Selenium --- Alert 原生弹窗处理
1. 区分两种弹窗(非常重要)
- 原生 alert / confirm / prompt 弹窗 (
switch_to.alert处理)
JS 原生弹窗:alert()、confirm()、prompt()特点:不能用 XPath 定位,不属于HTML元素!必须使用switch_to.alert - 网页自定义弹窗(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()
三种原生弹窗区别
alert("提示文字"):只有【确定】 → 使用accept()confirm("确认删除?"):【确定 / 取消】 →accept()/dismiss()prompt("请输入姓名"):输入框 + 确定取消 →alert.send_keys("测试")再 accept()
❌ 高频踩坑
- 弹窗还没弹出,直接
switch_to.alert→ 报错 NoAlertPresentException
✅ 解决方案:wait.until(EC.alert_is_present()) - alert 弹窗不能使用xpath定位
- 弹窗不处理,页面所有操作都会被阻塞
📝 课堂练习
需求:
- 打开含有confirm确认弹窗的测试页面
- 点击按钮唤起confirm弹窗
- 获取弹窗文本并打印
- 执行【取消】操作
- 关闭浏览器
测试参考地址(可直接运行):https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_confirm