Rayrun
← Back to Discord Forum

Playwright test videos with custom browser contexts

Hiya, I'm running playwright locally and can't get videos to attach to tests with custom browser contexts. My config is default (with the addition of video: on) and my custom context test is a slightly modified version of the example here - https://playwright.dev/docs/auth#testing-multiple-roles-together (with the storageState removed). any idea what I'm doing wrong?

config:

// @ts-check
const { defineConfig, devices } = require('@playwright/test');

/**
 * Read environment variables from file.
 * https://github.com/motdotla/dotenv
 */
// require('dotenv').config();

/**
 * @see https://playwright.dev/docs/test-configuration
 */
module.exports = defineConfig({
  testDir: './e2e',
  /* Run tests in files in parallel */
  fullyParallel: true,
  /* Fail the build on CI if you accidentally left test.only in the source code. */
  forbidOnly: !!process.env.CI,
  /* Retry on CI only */
  retries: process.env.CI ? 2 : 0,
  /* Opt out of parallel tests on CI. */
  workers: process.env.CI ? 1 : undefined,
  /* Reporter to use. See https://playwright.dev/docs/test-reporters */
  reporter: 'html',
  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
  use: {
    /* Base URL to use in actions like `await page.goto('/')`. */
    // baseURL: 'http://127.0.0.1:3000',

    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
    trace: 'on-first-retry',
    video: 'on',
  },

  /* Configure projects for major browsers */
  projects: [
    {
      name: 'chromium',
      use: { ...devices['Desktop Chrome'] },
    },

    {
      name: 'firefox',
      use: { ...devices['Desktop Firefox'] },
    },

    {
      name: 'webkit',
      use: { ...devices['Desktop Safari'] },
    },
  ],

});

and test

// @ts-check
const { test, expect } = require('@playwright/test');

test('has title', async ({ page }) => {
  await page.goto('https://playwright.dev/');

  // Expect a title "to contain" a substring.
  await expect(page).toHaveTitle(/Playwright/);
});

test('admin and user', async ({ browser }) => {
  // adminContext and all pages inside, including adminPage, are signed in as "admin".
  const adminContext = await browser.newContext();
  const adminPage = await adminContext.newPage();

  // userContext and all pages inside, including userPage, are signed in as "user".
  const userContext = await browser.newContext();
  const userPage = await userContext.newPage();

  // ... interact with both adminPage and userPage ...

  await adminContext.close();
  await userContext.close();
});

running it results in the attached image (note the lack of video for admin and user)

image.png

This thread is trying to answer question "Why can't videos attach to tests with custom browser contexts in Playwright?"

6 replies

any thoughts on how to solve this?

vipinphogat

Are you closing the context in the after test hook? Please note that for manually created context you will have to do context.close() at the end of test case

wait, does it have to be in the after test hook? I’m closing the context within the test

refactoreric

I don't think that matters. I wonder if maybe it's normal for custom-created contexts to have no videos? I haven't ever tested this. Don't know if the whole browser is instrumented or only the page fixture and the context fixture.

Possibly if you create the context yourself you have to take care of starting video recording yourself?

refactoreric

Hmm now that I read some docs on it, it seems to be taken care of. But there is the advice to await the context closing. (Which you are doing)

refactoreric

Maybe this is worth creating a GitHub issue for.

Related Discord Threads

TwitterGitHubLinkedIn
AboutQuestionsDiscord ForumBrowser ExtensionTagsQA Jobs

Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email luc@ray.run.