自动化测试中随机广告弹窗的检测与关闭方法咨询
自动化测试中检测并关闭随机广告弹窗的解决方案
先明确弹窗类型
首先要区分弹窗是原生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
相关产品推荐
相关产品推荐

