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

Playwright测试因401网络错误失败,未授权跳转场景如何修复?

解决方案

你的问题核心是Playwright默认会将页面请求中的401错误判定为测试失败,但这个401是未登录流程中的正常现象;同时测试逻辑需调整,确保等待重定向完成后再做断言。

1. 过滤预期内的网络错误

在测试用例中添加网络请求监听,忽略/users/me接口的401错误,避免Playwright将其视为测试失败:

import { test } from "@playwright/test";

test("unauthorized users should be redirected to /login", async ({ page }) => {
  // 监听请求失败事件,忽略预期内的401错误
  page.on("requestfailed", (request) => {
    const isMeApi401 = request.url().includes("/users/me") 
      && request.failure()?.errorText.includes("401");
    if (!isMeApi401) {
      throw new Error(`请求失败: ${request.url()} ${request.failure()?.errorText}`);
    }
  });

  // 访问首页
  await page.goto("/");

  // 等待Unauthorized提示出现
  await page.waitForSelector('text="Unauthorized"');

  // 等待页面完成重定向到/login
  await page.waitForURL("**/login");

  // 断言当前URL包含/login
  expect(page.url()).toContain("/login");
});

2. 全局配置(可选)

如果多个测试用例都需要忽略这类401错误,可在playwright.config.ts中添加全局规则:

import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  use: {
    // 忽略HTTPS证书错误(若有需要)
    ignoreHTTPSErrors: true,
  },
  // 也可在全局钩子中统一处理请求失败逻辑
});

关键说明

  • Playwright默认会对所有失败的网络请求抛出错误,需手动过滤预期内的错误;
  • useMe钩子中的router.push("/login")需要时间完成导航,必须用page.waitForURL等待重定向结束,而非直接获取当前URL,否则可能拿到未完成跳转的首页地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:53:18