如何用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
相关产品推荐
相关产品推荐

