-
playwright를 알아보자Programming/JavaScript & TypeScript 2022. 7. 4. 07:31728x90
PlayWright란? (https://playwright.dev/)
MS에서 내놓은 웹앱 자동화 테스트 툴이다.
Any browser • Any platform • One API
어떤 브라우저, 어떤 플랫폼에서든지 하나의 API로 테스트를 할 수 있다는게 강점이다.
추가적으로 여러가지 장점을 더 나열해놨지만, 나에게는 이게 가장 큰 매력인것 같다. (업무상 다양한 기기에서 테스트를 필요하다.
설치 방법
설치는 간단하다. 아래 두 명령어만 넣으면 된다.
더보기npm i -D @playwright/test
# install supported browsers
npx playwright installTest #1
'Hello World'를 찍듯이, 가장 기본적인 테스트부터 해보자
//파일명 : tests/example.spec.ts import { test, expect } from '@playwright/test'; test('basic test', async ({ page }) => { await page.goto('https://playwright.dev/'); const title = page.locator('.navbar__inner .navbar__title'); await expect(title).toHaveText('Playwright'); });
코드를 설명하자면,
'https://playwright.dev/' 사이트로 이동하고, selector를 이용하여 navbar__inner와 .navbar__title을 찾는다.
찾은 Selector가 'Playwright'인지 보는 것이다.
실행하는 모습이 보고싶지 않다면
$ npx playwright test
브라우저를 띄워서 실행하는 모습을 보고 싶으면 아래 명령어를 이용하면 된다.
$ npx playwright test --headed
Test #2 - Global config file 적용
Test#1은 기본 browser에서만 테스트를 진행했다.
config 파일을 만들어서 다양하게 테스트를 진행해 볼 수도 있다.
projects 부분에 여러개의 devices를 넣어준다. (아이폰이나 갤럭시도 지원을 한다.)
명령어는 동일하게 npx playwright test로 진행하면 된다.
// playwright.config.ts import { type PlaywrightTestConfig, devices } from '@playwright/test'; const config: PlaywrightTestConfig = { forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, use: { trace: 'on-first-retry', }, projects: [ { name: 'chromium', use: { ...devices['Desktop Chrome'] }, }, { name: 'firefox', use: { ...devices['Desktop Firefox'] }, }, { name: 'webkit', use: { ...devices['Desktop Safari'] }, }, ], }; export default config;
Test #3 - inspect 사용
selector를 찾으라니...정말 어려운일이 아닐까라는 생각이 든다.
웹이 class명이 다 있는것도 아니고, title을 모두 가진것들이 아니라고 생각하기때문이다.
그래서 나온것이 playwright inspect이다.
Playwright를 debug 모드로 실행시켜 한단계씩 진행가능하게 한다.
PWDEBUG=1 npx playwright test
그리고 code 중간에 아래와 같은 구문을 넣으면 break point처럼 동작한다.
// Pause on the following line. await page.pause();
pause로 멈춘 모습 inspect에서 'Record'를 누르고 웹사이트의 특정 부분을 선택해보면 알아서 Selector에 맞체 추출을 해준다.
이걸 바로 가져다 사용하면 된다.
'Programming > JavaScript & TypeScript' 카테고리의 다른 글
[NextJS] 외부 주소에서 이미지 가져올 때.. (0) 2022.09.07 [NextJS] getServerSideProps, getStaticProps 사용 (0) 2022.09.07 Javascript에서의 this (0) 2022.05.24 Skeleton UI (0) 2022.05.20 [상태관리 라이브러리] Zustand (0) 2022.05.20