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

是否可在feature file中设置可选步骤?应对点击后偶现报错弹窗场景

实现方案

方案1:前端原生业务代码实现

核心逻辑是监听报错触发的时机,做超时容错判断。

  • 点击主OK按钮后,先触发PageA的加载逻辑
  • 启动一个最大等待时长的定时器(比如设置为5s,覆盖绝大多数报错触发的时间窗口),同时监听自定义的报错弹窗触发事件
  • 只要监听到弹窗弹出,就给弹窗的OK按钮绑定一次点击回调,回调触发后再执行PageB的打开逻辑
  • 如果等待时长超过5s还没有监听到报错弹窗,直接执行PageB的打开逻辑,跳过点击步骤
// 点击主OK按钮的事件回调
document.querySelector('#main-ok-btn').addEventListener('click', async () => {
  // 先打开Page A
  window.open('page-a-url', '_blank');
  // 定义最大等待报错弹窗的时长,单位ms
  const MAX_WAIT_TIME = 5000;
  let errorPopupAppeared = false;

  // 监听报错弹窗弹出事件(适配你自身业务的报错触发逻辑即可)
  const errorListener = () => {
    errorPopupAppeared = true;
    // 给弹窗OK按钮绑定单次点击事件
    const errorOkBtn = document.querySelector('.error-popup .ok-btn');
    errorOkBtn.addEventListener('click', () => {
      // 点击后打开Page B
      window.open('page-b-url', '_blank');
    }, { once: true });
  };
  window.addEventListener('pageAErrorTrigger', errorListener, { once: true });

  // 超时判断,无报错则直接打开Page B
  setTimeout(() => {
    if (!errorPopupAppeared) {
      window.removeEventListener('pageAErrorTrigger', errorListener);
      window.open('page-b-url', '_blank');
    }
  }, MAX_WAIT_TIME);
})

方案2:UI自动化测试脚本实现(以Playwright为例,Selenium逻辑同理)

因为弹窗无唯一标识,所以用短间隔轮询+元素可见性判断的方式处理。

  • 点击主OK按钮后,先等待PageA加载完成
  • 开启最多N次轮询,每次间隔500ms,查询当前页面最上层的OK按钮是否存在且可点击
  • 如果查询到符合条件的按钮,点击后再打开/跳转PageB
  • 如果轮询结束未找到按钮,直接走PageB的操作逻辑
from playwright.sync_api import sync_playwright
import time

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("你的页面地址")
    
    # 点击主OK按钮
    page.get_by_role("button", name="OK").click()
    # 等待Page A加载完成
    page.wait_for_url("**/page-a*")

    # 轮询判断报错弹窗是否存在,最多轮询10次,每次500ms,总等待5s
    max_retry = 10
    retry_count = 0
    error_ok_clicked = False
    while retry_count < max_retry:
        # 匹配当前页面可见的OK按钮,取最后一个(最上层弹窗元素)避免匹配到其他同文本按钮
        error_ok_btn = page.get_by_role("button", name="OK").last
        if error_ok_btn.is_visible():
            error_ok_btn.click()
            error_ok_clicked = True
            break
        time.sleep(0.5)
        retry_count += 1

    # 无论是否点击过报错弹窗的OK,都执行后续PageB的操作
    page.wait_for_url("**/page-b*")
    # 后续PageB的操作逻辑

注意事项:如果是多窗口场景,需要先切换到PageA的窗口上下文再查询按钮,避免匹配到其他窗口的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:12:03