我正试图用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模拟设备中,最后一个goto失败(await this.page.goto('/admin/structure/webform/manage/myform')
(。当我运行测试时,这种情况100%发生。
该测试在webkit(桌面(、chrome(桌面(,firefox(桌面(和android(移动(上运行良好。该测试在iOS上也适用于非无头的情况。同样的步骤也适用于真正的iOS设备。
我需要在最后一步中添加networkIdle
,使其在无头Chrome(桌面和安卓(上运行,所以我想我可能需要再做一次更改,才能在iOS上运行,但怎么办?
当我观看测试的视频时,当它进入最后一步时,屏幕开始快速闪烁约3秒,然后变黑。
附加信息
根据Playwright设备的列表,我复制了iPhone 8的代码,并进行了实验,看看是什么导致了错误。
如下所示,将isMobile
从true
更改为false
将允许测试通过。因此,具体错误似乎与将isMobile
设置为true
的操作有关。
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错误报告在此提交。
正如剧作家问题中所描述的,这种行为似乎是由操作系统故障引起的(在我的案例中,Ubuntu运行在WSL2上(。
这是通过更新ubuntu中的所有包来解决的;不幸的是,有几个包裹,我不确定哪一个是确切的解决方案,但要点是:
- Ubuntu和WSL2有时会出现图形问题,这可能会干扰剧作家运行测试
- 如果您开始看到问题,请更新ubuntu,而不仅仅是
package.json