您可以在一个浏览器上下文 Playwright Javascript 中运行多个测试吗?

el_*_*ggs 10 automated-tests node.js playwright

是否可以在一个浏览器窗口中为剧作家/测试运行多个测试?

目前它将点击 browser.close(); 每次测试后,即使他们在同一页面上进行测试,这也会在测试上花费大量额外时间。

test.beforeAll(async ({ browser }) => {
  const context = await browser.newContext();
  const page = await context.newPage();
  await page.goto('https://example.com');
});

test('nav test', async ({ page }) => {    
  const name = await page.innerText('.navbar__title');  
  expect(name).toBe('Playwright');
});

test('header test', async ({ page }) => {   
  const name = await page.innerText('.navbar__header');  
  expect(name).toBe('Playwright');
});
Run Code Online (Sandbox Code Playgroud)

Ric*_*rds 24

当您创建这样的测试时, test('header test', async ({page}) => { 您正在指定page并告诉它创建一个新的页面上下文。

page从测试中删除- 并分享您从测试中创建的测试.beforeAll

尝试这个:

test.describe('1 page multiple tests', () => {
    let page;
    test.beforeAll(async ({ browser }) => {
        const context = await browser.newContext();
        page = await context.newPage();
        await page.goto('https://example.com');
    });

    test.afterAll(async ({ browser }) => {
        browser.close;
    });

    test('nav test', async () => {
        const name = await page.innerText('h1');
        expect(name).toContain('Example');
    });

    test('header test', async () => {
        const name = await page.innerText('h1');
        expect(name).toContain('Domain');
    });
});
Run Code Online (Sandbox Code Playgroud)

像这样运行它:

npx playwright test .\StackTests_SinglePage.spec.ts --headed
Run Code Online (Sandbox Code Playgroud)

(你可以在那里看到我的文件名)

如果它尝试并行运行您的测试,您可能需要将其切换为 1 个工作线程。

对我来说,该代码打开 1 个浏览器,1 个页面,通过了两项测试并关闭。 在此输入图像描述


Mar*_*oha 2

您可以尝试将测试包装在描述块中吗?因此,它们被视为一个整体,而不是单独的测试。

test.describe('two tests for same page', () => {
   test('nav test', async ({ page }) => {    
     const name = await page.innerText('.navbar__title');  
     expect(name).toBe('Playwright');
   });

   test('header test', async ({ page }) => {   
    const name = await page.innerText('.navbar__header');  
    expect(name).toBe('Playwright');
  });
});

Run Code Online (Sandbox Code Playgroud)