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

如何用for循环为Playwright测试做数据参数化?附报错求助

问题排查与修复

错误原因

报错page.goto: net::ERR_ABORTED的核心原因是**forEach循环不支持异步等待**:你在forEach中定义的async回调会被立即触发,但循环本身不会等待每一轮的异步操作完成。后续的await page.goto('https://large-type.com/#finished')会提前执行,浏览器此时会中断还在进行的https://computer-database.gatling.io/computers导航请求,从而抛出该错误。

修复后的代码

将forEach替换为for...of循环,它能正确等待每个异步步骤完成后再进入下一轮循环:

test('1 way to 3 and finish in 1', async ({ page }) => {
  await page.goto('https://large-type.com/#starting');
  await page.waitForTimeout(2000);

  // 用for...of替代forEach,保证异步操作按顺序执行
  for (const data of computerData) {
    await page.goto("https://computer-database.gatling.io/computers");
    await page.click("#add");
    await page.fill("#name", data.name);
    await page.selectOption("#company", {label: data.manufacture});
    await page.click("input[type='submit']");
    await expect(page.locator("div.alert-message.warning")).toContainText(`Done ! Computer ${data.name} has been created`);
  }

  await page.goto('https://large-type.com/#finished');
  await page.waitForTimeout(2000);
});

额外优化建议

  • 尽量避免使用page.waitForTimeout,它属于强制等待,稳定性较差。可以改用page.waitForLoadState('networkidle'),或者等待页面关键元素加载完成(比如await page.waitForSelector('#add'))来确保页面就绪。
  • 确认computerData是结构合法的数组,每个元素的name和manufacture字段值正确,避免后续元素定位或填充时出现额外错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:11:17