如何在 Playwright 测试中指定目标项目(平台)

val*_*alk 1 mobile platform playwright

桌面版和移动版有不同的 UI 版本,我正在努力专门针对移动版进行某些测试,同时强制其余测试仅针对桌面版运行。除了现有的浏览器之外,我还添加了一个移动目标,如下所示:

{
    name:  'mobile',
    use: {
        ...devices['iPhone 12'],
        viewport: {
            width:  390,
            height:  844
        },
        headless:  false,
        video:  'on-first-retry'
    },
},
Run Code Online (Sandbox Code Playgroud)

这是正确运行模拟指定移动目标的测试。问题是它会尝试使用此配置进行每个测试,而我需要它只为移动设备运行指定的测试。

我能想到实现该目标的唯一方法是创建两个单独的项目。有没有更好的“可配置”方式?

小智 6

您想要testProject.grep选项吗?

过滤以仅运行标题与模式之一匹配的测试。例如,通过grep: /cart/应该只运行标题中带有“cart”的测试。也可以通过 -g 选项在全局和命令行中使用。

{
    name:  'mobile',
    use: {
        ...devices['iPhone 12'],
        viewport: {
            width:  390,
            height:  844
        },
        headless:  false,
        video:  'on-first-retry',
    },
    grep: /mobile/
},
Run Code Online (Sandbox Code Playgroud)


Ala*_*Das 5

您可以在剧作家配置文件中使用称为项目的东西。对于不同的项目类型,您可以使用正则表达式模式来识别要运行的测试:

import type { PlaywrightTestConfig } from '@playwright/test';
const config: PlaywrightTestConfig = {
  timeout: 60000, // Timeout is shared between all tests.
  projects: [
    {
      name: 'Smoke',
      testMatch: /.*smoke.spec.ts/,
      retries: 0,
    },
    {
      name: 'Default',
      testIgnore: /.*something.spec.ts/,
      retries: 2,
    },
  ],
};
export default config;
Run Code Online (Sandbox Code Playgroud)

然后要运行测试,您可以这样做:

npx playwright test --project=Smoke
Run Code Online (Sandbox Code Playgroud)