Search code examples
playwright

Playwright: Saving session storage


I'm very new to Playwright. I'm trying to follow this https://playwright.dev/docs/auth#reuse-signed-in-state so I can login and then save the session for further tests.

My steps work fine in a test but once I've moved them to global-setup.ts I get a timeout:

import { chromium, FullConfig } from '@playwright/test'

async function globalSetup(config: FullConfig) {
  const browser = await chromium.launch()
  const page = await browser.newPage()
  

  await page.goto('MYDOMAIN/login');
  await page.locator("a[testid='googleSignIn']").click()
  await page.locator("input[type='email']").fill('MYEMAIL')
  await page.locator(
    "button[class='VfPpkd-LgbsSe VfPpkd-LgbsSe-OWXEXe-k8QpJ VfPpkd-LgbsSe-OWXEXe-dgl2Hf nCP5yc AjY5Oe DuMIQc LQeN7 qIypjc TrZEUc lw1w4b']",
  ).click()
await page.locator("input[type='password']").fill('MYPASSWORD')
await page.locator(
  "button[class='VfPpkd-LgbsSe VfPpkd-LgbsSe-OWXEXe-k8QpJ VfPpkd-LgbsSe-OWXEXe-dgl2Hf nCP5yc AjY5Oe DuMIQc LQeN7 qIypjc TrZEUc lw1w4b']",
).click()

  // Save signed-in state to 'storageState.json'.
  await page.context().storageState({ path: 'storageState.json' })
  await browser.close()
}

export default globalSetup

The above steps log me in fine in a test but now I've set my config file to use the saved session storage:

storageState: 'storageState.json',

When I run a test I don't see a browser appear it just waits a minute and then says:

locator.click: Timeout 30000ms exceeded. =========================== logs =========================== waiting for selector "button[class='VfPpkd-LgbsSe VfPpkd-LgbsSe-OWXEXe-k8QpJ VfPpkd-LgbsSe-OWXEXe-dgl2Hf nCP5yc AjY5Oe DuMIQc LQeN7 qIypjc TrZEUc lw1w4b']"

at ../../global-setup.ts:15

13 | await page.locator( 14 | "button[class='VfPpkd-LgbsSe VfPpkd-LgbsSe-OWXEXe-k8QpJ VfPpkd-LgbsSe-OWXEXe-dgl2Hf nCP5yc AjY5Oe DuMIQc LQeN7 qIypjc TrZEUc lw1w4b']",

15 | ).click() | ^

The time out is the step just before I enter my password. I'm running the tests with this command:

yarn playwright test login-page-tests --headed

Am I doing something wrong?


Solution

  • I wouldn't count on these google login class names. Did you try running something like:

    await page.locator('text="Next"').click()