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

Playwright中page.goto自动从HTTPS重定向到HTTP致404问题

问题

执行Playwright E2E测试时,登录的setup阶段可正常创建会话存储,但进入logout的teardown阶段时,page.goto会自动从HTTPS跳转到HTTP,导致404错误。无论是使用baseURL还是硬编码HTTPS地址,都会出现该问题。

配置文件(playwright.config.ts)

// playwright.config.ts

export const STORAGE_STATE = 'tests/e2e/storageState.json';
...
  projects: [
    {
      name: 'Log into Wordpress',
      testDir: './setup',
      testMatch: 'login.ts',
      teardown: 'wp teardown',
      use: {
        storageState: STORAGE_STATE,
        baseURL: 'https://wordpress.test'
      },
    },
    {
    // Teardown Steps
      name: 'wp teardown',
      testDir: './setup',
      testMatch: 'logout.ts',
      use: {
        storageState: STORAGE_STATE,
        baseURL: 'https://wordpress.test',
        ignoreHTTPSErrors: false,
      },
    },
  ]

Teardown代码(logout.ts)

// logout.ts
import { test as teardown } from '@playwright/test';

teardown('logout of the admin', async ({ page }) => {
  await page.goto('/'); 
  console.log(page.url()); // httpS://wordpress.test
  await page.goto('/wp-admin');
  console.log(page.url()); // http://wordpress.test/wp-admin
  await page.goto('https://wordpress.test/wp-admin');
  console.log(page.url()); // http://wordpress.test/wp-admin


  // tests fails here with 404, because it tries to navigate to http instead of https

});

解决方案

1. 修正WordPress站点URL配置

登录WordPress后台,进入设置→常规,确认**WordPress地址(URL)和站点地址(URL)**均设置为https://wordpress.test。如果这两个地址是HTTP,WordPress会强制页面跳转至HTTP协议,导致Playwright请求出错。

2. 强制Playwright使用HTTPS

在teardown项目的配置中添加forceHTTPS: true,强制所有请求使用HTTPS协议,覆盖可能的重定向:

{
  name: 'wp teardown',
  testDir: './setup',
  testMatch: 'logout.ts',
  use: {
    storageState: STORAGE_STATE,
    baseURL: 'https://wordpress.test',
    ignoreHTTPSErrors: false,
    forceHTTPS: true // 新增配置
  },
}

会话存储文件(storageState.json)可能保存了HTTP协议的Cookie,导致跳转时自动切换协议。可以在teardown开始前清除这类Cookie:

// 修改logout.ts,添加Cookie清理逻辑
teardown('logout of the admin', async ({ page, context }) => {
  // 清除wordpress.test域名下非HTTPS的Cookie
  await context.clearCookies({ domain: 'wordpress.test', secure: false });
  
  await page.goto('/wp-admin');
  // 后续登出操作
});

4. 检查服务器重定向规则

如果本地使用Nginx、Apache等服务器,需确认没有将HTTPS请求重定向到HTTP的规则。比如Nginx要确保配置了正确的HTTPS反向代理,避免强制跳转至HTTP。

内容的提问来源于stack exchange,提问作者Иван Харалампиев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:20:13