0w0

Playwright 사용기

e2e 테스트 라이브러리가 여럿있지만, Playwright가 궁금해서 사용했다.

시작

npm init playwright@latest

자동생성

npx playwright codegen --save-storage=auth.json "url"

테스트

1. playwright로 test

tests 폴더 내에 *.spec.js로 테스트 저장

이렇게하면 인증을 여러 개 할 수 있음

const { test } = require('@playwright/test');

test.use({ storageState: 'adminStorageState.json' });

test('admin test', async ({ page }) => {});

test.describe(() => {
  test.use({ storageState: 'userStorageState.json' });

  test('user test', async ({ page }) => {});
});
npm run playwright test --headed
# or
npx playwright test --headed
# --headed는 headless: false

2. node로 test

*.js로 저장

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({
    headless: false,
  });
  const context = await browser.newContext({ storageState: './auth.json' });
  // 인증정보 사용

  // Open new page
  const page = await context.newPage();

  await page.goto('url');

  // 요소 찾기 & 새로고침
  async function attrChecker() {
    let status = await page.$('document.querySelector() 느낌으로 속성 선택');
    if (status !== null) {
      Promise.all([
        page.waitForNavigation({ waitUntil: 'load' }),
        page.locator('위와 같은 속성').click(),
      ]);
    } else {
      console.log('retry');
      await page.reload();
      attrChecker();
    }
  }

  await attrChecker();

  // ---------------------
  await context.close();
  await browser.close();
})();

즉시 실행 함수이므로

node ./*.js

실행가능

만약 cron 같은 것과 조합한다면

module.exports = async() => // ...

즉각 함수 해제하며 보내줘야 cron 예약에 맞춰 사용 가능

읽을거리