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

自动化测试中随机广告弹窗的检测与关闭方法咨询

自动化测试中检测并关闭随机广告弹窗的解决方案

先明确弹窗类型

首先要区分弹窗是原生JavaScript弹窗(alert/confirm/prompt)还是自定义DOM弹窗,两种处理方式不同:

1. 处理原生JavaScript弹窗(以Selenium为例)

原生弹窗无法通过普通元素定位,需要用浏览器的弹窗处理API。因为弹窗是随机出现的,建议在操作菜单的前后或全局注入检查逻辑:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

# 封装弹窗检查关闭方法
def close_native_popup(driver):
    try:
        # 等待弹窗出现,超时时间设短(比如2秒),适配随机触发场景
        alert = WebDriverWait(driver, 2).until(EC.alert_is_present())
        alert.dismiss()  # 或alert.accept(),根据弹窗关闭逻辑选择
        print("关闭了原生广告弹窗")
    except TimeoutException:
        # 未出现弹窗则继续执行
        pass

# 使用示例:点击菜单前后调用检查
driver = webdriver.Chrome()
driver.get("https://master.nst.com.my/sports")

close_native_popup(driver)
driver.find_element("xpath", "//菜单元素定位路径").click()
close_native_popup(driver)

2. 处理自定义DOM弹窗(Selenium/Playwright通用思路)

这类弹窗是页面内的DOM元素,通常带有关闭按钮(如×、Close按钮),核心逻辑是用显式等待判断弹窗是否存在,存在则点击关闭:

Selenium实现:

def close_custom_popup(driver):
    try:
        # 定位关闭按钮,超时2秒
        close_btn = WebDriverWait(driver, 2).until(
            EC.element_to_be_clickable(("css selector", ".popup-close-btn"))  # 替换为实际选择器
        )
        close_btn.click()
        print("关闭了自定义广告弹窗")
    except TimeoutException:
        pass

# 在菜单操作前后调用
close_custom_popup(driver)

Playwright实现(更简洁):

Playwright自带灵活的等待机制,还可提前监听弹窗:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://master.nst.com.my/sports")

    # 提前监听原生弹窗,出现即关闭
    page.on("dialog", lambda dialog: dialog.dismiss())

    # 处理自定义弹窗
    def close_custom_popup(page):
        try:
            page.wait_for_selector(".popup-close-btn", timeout=2000).click()
            print("关闭自定义广告弹窗")
        except:
            pass

    # 点击菜单前后检查弹窗
    close_custom_popup(page)
    page.click("菜单选择器")
    close_custom_popup(page)

    browser.close()

通用优化技巧

  • 将关闭弹窗的方法封装为公共函数,在所有页面操作(点击菜单、页面跳转等)前后自动调用,减少重复代码。
  • 若弹窗为第三方广告,可尝试在浏览器启动时加载广告拦截扩展(如AdBlock),但需评估是否会改变测试环境真实性。
  • 记录弹窗出现的关联场景:若弹窗和特定菜单强绑定,可针对性延长该菜单操作后的弹窗检查超时时间。

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:22:19