ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

如何用 waitForNetworkIdleTimeout 自定义 Midscene 网页自动化的网络空闲等待

如何用 waitForNetworkIdleTimeout 自定义 Midscene 网页自动化的网络空闲等待 如何用 waitForNetworkIdleTimeout 自定义 Midscene 网页自动化的网络空闲等待【免费下载链接】midsceneGUI Agent for E2E Testing项目地址: https://gitcode.com/GitHub_Trending/mid/midscene在 Midscene 驱动网页自动化时点击、输入等操作之后页面往往还在发起请求此时截图或断言可能抓到旧内容。Midscene 的应对策略是在每次交互或导航后自动等待网络空闲等待超时时不报错、直接继续执行。如果你想让等待更久、更短或者在页面有长连接/轮询导致空闲等待始终超时干脆关掉它就需要用waitForNetworkIdleTimeout这个参数。本文覆盖三种配置入口Agent 构造参数、Playwright 测试 fixture、YAML 脚本并给出每种情况下如何从终端日志判断配置是否生效。默认行为先确认你现在处于哪种等待Midscene 网页自动化有两类自动等待见 Integrate with Playwright 文档 的 “Customize the network timeout” 一节等待类型参数默认值页面导航等待waitForNavigationTimeout5000ms点击、输入等操作后的网络空闲等待waitForNetworkIdleTimeout2000ms两个关键事实等待超时不会导致脚本失败。文档原话是 “Nothing would happen if the waiting process is timeout”——它只影响执行节奏不会把用例判为失败。参数设为0表示跳过对应的等待API Reference 中对PlaywrightPageAgent/PuppeteerPageAgent的选项说明均为 “Set to0to skip the wait”。另外有一个实现层面的差别需要注意在当前源码中操作后的网络空闲等待只在 Puppeteer 路径真正执行底层调用是page.waitForNetworkIdle({ idleTime: 200, concurrency: 2, timeout: this.waitForNetworkIdleTimeout })其中并发数2来自 常量定义而 Playwright 路径会打印一次警告后跳过实际等待[midscene:warning] waitForNetworkIdle is skipped for Playwright. Playwright does not provide an equivalent underlying capability for the intended post-action network idle behavior here.见 base-page.ts。也就是说如果你的用例跑在 Playwright 引擎上waitForNetworkIdleTimeout会被接受但操作后不会真正执行网络空闲等待导航等待仍然生效因为 Playwright 与 Puppeteer 共用waitForNavigation路径。调整该参数后主要观察 Puppeteer 路径与 YAML 脚本的表现。路径一在 Agent 构造参数中配置脚本直接集成适用于用脚本直接驱动PlaywrightAgent/PuppeteerPageAgent的场景。先安装依赖并配置模型环境变量文档中的示例# 依赖安装文档命令 npm install midscene/web playwright playwright/test tsx --save-dev # 模型环境文档示例替换 your-api-key export MIDSCENE_MODEL_BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1 export MIDSCENE_MODEL_API_KEYyour-api-key export MIDSCENE_MODEL_NAMEqwen3.7-plus export MIDSCENE_MODEL_FAMILYqwen3创建 Agent 时通过第二个参数传入选项waitForNetworkIdleTimeout与waitForNavigationTimeout均为可选数值毫秒import { PlaywrightPageAgent } from midscene/web/playwright; const agent new PlaywrightPageAgent(page, { waitForNetworkIdleTimeout: ms, // 每次操作后等待网络空闲的上限默认 2000设为 0 跳过 waitForNavigationTimeout: ms, // 动作触发导航时的等待上限默认 5000设为 0 跳过 });其中ms需要替换为你自己决定的毫秒数比如沿用默认的2000、调大到能覆盖慢加载的数值或0关闭等待参数名与默认值以 API Reference 为准文档没有给出其他推荐值因此具体调多大需要结合你目标页面的加载速度自行确定。Puppeteer 侧等价写法是把page换成 Puppeteer 的Page并 import 自midscene/web/puppeteer的PuppeteerPageAgent。运行脚本后文档给出的运行方式为npx tsx demo.ts成功时终端输出Midscene - report file updated: /path/to/report/some_id.html用浏览器打开即可查看报告——这是文档给出的通用运行验证方式。路径二Playwright 测试用例中通过 PlaywrightAiFixture 配置如果你的 Midscene 能力挂在playwright/test用例里在扩展test实例的 fixture 里传参即可。PlaywrightAiFixture()接受所有共享的PlaywrightAgent选项waitForNetworkIdleTimeout在 fixture 创建时直接写入文档示例代码中省略了与本主题无关的replanningCycleLimit// ./e2e/fixture.ts import { test as base } from playwright/test; import type { PlayWRightAiFixtureType } from midscene/web/playwright; import { PlaywrightAiFixture } from midscene/web/playwright; export const test base.extendPlayWRightAiFixtureType( PlaywrightAiFixture({ // 可选交互过程中等待网络空闲的超时时间默认 2000ms设为 0 禁用 waitForNetworkIdleTimeout: 2000, }), );要禁用等待时把该值改为0即可文档注释原话是 “default is 2000ms” / “设置为 0 则禁用超时”中文版。之后按常规方式运行用例验证npx playwright test ./e2e/ebay-search.spec.ts运行成功后会输出Midscene - report file updated: ./current_cwd/midscene_run/report/some_id.html打开报告文件即完成文档给出的验证步骤。路径三YAML 脚本中的web.page.waitForNetworkIdle用 YAML 脚本驱动 Puppeteer 模式时网络空闲策略放在page的waitForNetworkIdle小节下Automate with Scripts in YAML 的共享选项web: page: url: https://example.com waitForNetworkIdle: timeout: 2000 # 每次网络空闲等待的毫秒数可选默认 2000ms continueOnNetworkIdleError: true # 可选默认 true文档对两个子项的适用范围有明确区分timeout同时作用于 YAML 中web.url的初始打开以及aiTap、aiInput等后续操作后的等待continueOnNetworkIdleError只作用于初始打开初始打开等空闲超时时是否继续默认true表示继续后续操作时的等待即使超时也总是继续执行。实现上可以进一步确认agent-launcher.tstimeout小于等于0时初始打开不做任何空闲等待等待超时且continueOnNetworkIdleError为false时抛出错误failed to wait for network idle: ...否则打印警告后继续。如何判断配置已经生效Midscene 不会在成功时打印“已等待网络空闲 N ms”这类信息验证只能看等待超时或被跳过时的终端日志Puppeteer 路径Agent 构造参数、YAML 脚本空闲等待超时后终端出现[midscene:warning] Waiting for the network idle has timed out, but Midscene will continue execution.说明等待确实执行了、但没在你设定的时限内等到空闲。如果你把timeout调大后这条警告消失说明新时限已生效。YAML 脚本初始打开出现failed to wait for network idle after msms, but the script will continue.时日志中的毫秒数就是当前实际使用的超时值可以核对是否与你配置的一致若设置continueOnNetworkIdleError: false此处会直接抛错而不是警告。Playwright 路径只会看到一次waitForNetworkIdle is skipped for Playwright警告见上文实现说明这是当前版本 Playwright 引擎下的正常现象不代表配置丢失。边界与限制无论怎么调大waitForNetworkIdleTimeout等待超时都不会让自动化失败如果你需要“初始打开必须等到空闲否则失败”的严格语义只有 YAML 路径的continueOnNetworkIdleError: false能做到且它只覆盖初始打开。设为0是禁用而非报错适合页面存在持续轮询、网络永远不空闲的环境。waitForNetworkIdleTimeout操作后空闲等待和waitForNavigationTimeout导航等待默认5000是两个独立参数文档把它们并列列出改一个不影响另一个。需要更多 Agent 参数细节时继续查 API Reference 的 Web 一节 和 Integrate with Playwright 即可。【免费下载链接】midsceneGUI Agent for E2E Testing项目地址: https://gitcode.com/GitHub_Trending/mid/midscene创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表