在 Playwright 中,无法将 page.goto 与 headless webkit 一起使用

In Playwright, can't use page.goto with headless webkit

我正在尝试在 Playwright 中为 Drupal 网站编写测试。我正在通过 WSL2 运行宁 Ubuntu 20.04。

我在我的 Playwright 配置文件中设置了一个基础 url (https://www.example.com)。

我有几个简单的步骤:

await this.page.goto('/user/logout');
await this.page.goto('/user/login');
await this.page.locator('input[name="name"]').fill('admin@example.com');
await this.page.locator('input[name="pass"]').fill('password');
await this.page.locator('input:has-text("Login")').click();
await this.page.waitForSelector('text="You are logged in"');
await this.page.goto('/admin/structure/webform/manage/myform', { waitUntil: 'networkIdle' });

我想在模拟的 iPhone 上进行测试,所以我在我的配置文件中使用了这个:

  name: 'iPhone 6/7/8',
  use: devices['iPhone 8'],

问题在于,在这个 iPhone 8 模拟设备中,仅在无头模式下,最后一个转到失败 (await this.page.goto('/admin/structure/webform/manage/myform'))。当我 运行 测试时,它会 100% 发生。

测试在 webkit(桌面)、chrome(桌面)、firefox(桌面)和 android(移动)上运行良好。当不是无头时,该测试也适用于 iOS。同样的步骤适用于真实的 iOS 设备。

我需要在最后一步添加 networkIdle 才能让它在无头 Chrome(桌面和 Android)上工作,所以我猜我可能需要进行另一项更改以使其在 iOS 上运行,但是什么?

当我观看我的测试视频时,当它进行到最后一步时,屏幕开始快速闪烁约 3 秒,然后变黑。

附加信息

list of Playwright devices的基础上,我复制了iPhone8的代码,试验了一下具体是什么原因导致的错误。

如下所示,将 isMobiletrue 更改为 false 将允许测试通过。因此,具体错误似乎与 isMobiletrue 所做的任何设置有关。

  projects: [
    {
      name: 'iPhone 6/7/8',
      use: {
        userAgent:
          'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/15.4 Mobile/15A372 Safari/604.1',
        browserName: 'webkit',
        viewport: {
          width: 375,
          height: 667,
        },
        deviceScaleFactor: 2,
        isMobile: false,
        hasTouch: true,
        defaultBrowserType: 'webkit',
      },
    },
  ],

Playwright bug report filed here.

playwright issue 中所述,此行为似乎是由 OS 中的故障引起的(在我的情况下,WSL2 上的 Ubuntu 运行)。

这已通过更新 ubuntu 中的所有包解决;不幸的是,有几个包,我不确定哪个是确切的修复,但要点是:

  1. Ubuntu 和 WSL2 有时会出现图形问题,可能会干扰编剧 运行 测试。
  2. 如果您开始发现问题,请更新 ubuntu,而不仅仅是 package.json