You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python+Selenium检测浏览器原生弹窗的文本内容?

解决方案:验证HTML5原生表单弹窗文本

你遇到的是HTML5约束验证弹窗(由type="email"的input元素触发的浏览器原生提示),这类弹窗不属于常规的alert/confirm,无法通过Selenium的switch_to.alert访问,但可以通过以下两种方式解决:

方法1:直接获取input元素的验证提示文本(推荐)

HTML5表单验证的提示文本会存储在对应input元素的validationMessage属性中,无需等待弹窗出现,直接通过JavaScript获取即可:

修改后的代码示例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from supporting_scripts import generate_random_string
from supporting_scripts import password
from configuration import chrome_options

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)

class Registration:
    # 打开目标页面
    driver.execute_script("window.open('https://site.example.com/service/welcome', '_blank');")
    driver.switch_to.window(driver.window_handles[-1])

    # 点击注册按钮
    Button_Registration = WebDriverWait(driver, 60).until(
        ec.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div/div[2]/p[1]")))
    Button_Registration.click()
    print('Registration click success ✅ ')

    # 定位到email输入框(替换为实际页面中email输入框的定位符,比如By.ID/By.NAME)
    email_input = WebDriverWait(driver, 60).until(
        ec.presence_of_element_located((By.NAME, "email")))

    # 点击提交触发验证
    Button_Registration_Check = WebDriverWait(driver, 60).until(
        ec.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/form/div/button")))
    Button_Registration_Check.click()

    # 获取并验证验证提示文本
    validation_text = driver.execute_script("return arguments[0].validationMessage;", email_input)
    expected_text = "请输入有效的电子邮件地址。"  # 替换成你预期的提示文本
    assert validation_text == expected_text, f"验证文本不符:实际为{validation_text},预期为{expected_text}"
    print(f"验证文本正确:{validation_text} ✅")

    driver.quit()

方法2:通过Chrome DevTools Protocol(CDP)捕获弹窗文本

如果必须验证弹窗的实际显示内容,可以利用Selenium的CDP接口监听浏览器的Page.javascriptDialogOpening事件,捕获弹窗信息:

代码示例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from supporting_scripts import generate_random_string
from supporting_scripts import password
from configuration import chrome_options

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)

# 初始化弹窗文本变量
dialog_text = None

# 定义监听JS弹窗的回调函数
def handle_dialog(dialog_data):
    global dialog_text
    dialog_text = dialog_data["message"]
    # 自动关闭弹窗(可选,根据测试需求调整)
    driver.execute_cdp_cmd("Page.handleJavaScriptDialog", {"accept": False})

# 开启CDP监听
driver.execute_cdp_cmd("Page.enable", {})
driver.add_cdp_listener("Page.javascriptDialogOpening", handle_dialog)

class Registration:
    # 打开目标页面
    driver.execute_script("window.open('https://site.example.com/service/welcome', '_blank');")
    driver.switch_to.window(driver.window_handles[-1])

    # 点击注册按钮
    Button_Registration = WebDriverWait(driver, 60).until(
        ec.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div/div[2]/p[1]")))
    Button_Registration.click()
    print('Registration click success ✅ ')

    # 点击提交触发验证弹窗
    Button_Registration_Check = WebDriverWait(driver, 60).until(
        ec.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[2]/div/form/div/button")))
    Button_Registration_Check.click()

    # 等待弹窗文本被捕获
    WebDriverWait(driver, 10).until(lambda d: dialog_text is not None)

    # 验证文本
    expected_text = "请输入有效的电子邮件地址。"  # 替换成预期文本
    assert dialog_text == expected_text, f"弹窗文本不符:实际为{dialog_text},预期为{expected_text}"
    print(f"弹窗文本验证通过:{dialog_text} ✅")

    driver.quit()

内容的提问来源于stack exchange,提问作者Владимир Гусев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:27:41