Məzmuna keç

Modul 6: Test Runner və konfiqurasiya

Əla testlər yaza bilərsiniz, lakin istədiyiniz testləri tam olaraq necə işlədəcəyinizi, nəyin sındığını başa düşmək və CI üçün layihəni konfiqurasiya etməyi öyrənməyə saatlar sərf edə bilərsiniz. Bu modul hər Playwright testinin arxasındakı mühərriki — runner-in özünü — əhatə edir ki, testlərinizin necə icra ediləcəyini tam idarə edəsiniz.

🎬 Video tezliklə əlavə olunacaq


Hər Playwright testi @playwright/test-dən idxal edilən iki funksiyadan qurulur.

import { test, expect } from '@playwright/test';
test('səhifə başlığı düzgündür', async ({ page }) => {
await page.goto('/');
await expect(page).toHaveTitle(/TestMarket/);
});

test(ad, fn) tək bir test hadisəsini qeydiyyata alır. Callback fixtures obyektini alır — { page } ən çox istifadə edilən fixture-dır. Playwright hər test üçün təzə brauzer səhifəsi yaradır və sonra bağlayır.

expect(dəyər) Playwright-ın assertion API-sidir. Node-un daxili assert-i deyil. Bir lokator verildiğinde avtomatik yenidən cəhd edir — şərt keçənə ya da expect.timeout bitənə qədər (defolt: 5 saniyə).

// Yenidən cəhd etmir — bir dəfəlik, yavaş səhifələrdə uğursuz olur
const text = await page.locator('h1').textContent();
expect(text).toBe('Xoş gəldiniz'); // dərhal keçir ya da uğursuz olur
// Avtomatik yenidən cəhd edir — şərt keçənə ya da vaxt aşımı bitənə qədər yenidən cəhd edir
await expect(page.locator('h1')).toHaveText('Xoş gəldiniz');

DOM assertion-ları üçün həmişə expect-in lokator formasını üstün tutun.

Yadda saxla: test(ad, fn) təzə page ilə bir test qeyd edir; expect(lokator) avtomatik yenidən cəhd edir (defolt 5 s), expect(dəyər) isə bir dəfə işləyir. DOM üçün lokator formasını seçin.


test.describe() əlaqəli testləri adlandırılmış blok altında qruplaşdırır. Terminal çıxışını düzənləyir, əhatəli hook-lar tətbiq edir və test faylını oxumağı asanlaşdırır.

import { test, expect } from '@playwright/test';
test.describe('Alış-veriş Səbəti', () => {
test('boş səbət mesajını göstərir', async ({ page }) => {
await page.goto('/cart');
await expect(page.getByText('Your cart is empty')).toBeVisible();
});
test('naviqasiyada element sayını göstərir', async ({ page }) => {
// ...
});
});

Describe blokları iç-içə ola bilər. Hər blokun öz hook-ları ola bilər. Çıxışdakı tam test adı Alış-veriş Səbəti > boş səbət mesajını göstərir şəklindədir.

Yadda saxla: test.describe() testləri qruplaşdırır, hook-ları əhatələyir və çıxışı adlandırır (Qrup > test) — sırf təşkilatidir, amma uğursuzluqları oxunaqlı edir.


Hook-lar əhatə daxilindəki hər testdən əvvəl ya da sonra avtomatik işləyir. Setup və teardown kodunu hər testə kopyalamaqdan qaçmaq üçün istifadə edin.

test.describe('Məhsullar Səhifəsi', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/products');
});
test('məhsul kartlarını göstərir', async ({ page }) => {
// page artıq /products-dadır — burada goto() lazım deyil
await expect(page.locator('.product-card').first()).toBeVisible();
});
test('axtarış nəticələri filtrləyir', async ({ page }) => {
// /products-da da
await page.fill('#search', 'Wireless');
await page.click('#apply-filters');
await expect(page.locator('.product-card')).not.toHaveCount(0);
});
test.afterEach(async ({ page }, testInfo) => {
if (testInfo.status !== 'passed') {
// isteğe bağlı: uğursuzluqda əlavə data qeyd edin ya da əldə edin
console.log('Test uğursuz oldu:', testInfo.title);
}
});
});

beforeAllafterAll bütün describe bloku üçün bir dəfə işləyir — mock server başlatmaq ya da bir dəfə daxil olmaq kimi bahalı setup üçün faydalıdır.

test.describe('Admin Paneli', () => {
test.beforeAll(async ({ browser }) => {
// bir dəfə login olmuş storage state yaradın
const page = await browser.newPage();
await page.goto('/auth/login');
await page.fill('#email', '[email protected]');
await page.fill('#password', 'admin123');
await page.click('#login-btn');
await page.context().storageState({ path: 'admin-state.json' });
await page.close();
});
test('istifadəçi siyahısını görə bilər', async ({ page }) => { /* ... */ });
test('istifadəçi silə bilər', async ({ page }) => { /* ... */ });
});

Yadda saxla: beforeEach/afterEach əhatədəki hər testin ətrafında işləyir; beforeAll/afterAll blok başına bir dəfə. Hər testə kopyalayacağınız setup üçün istifadə edin.


Teqlər: @smoke@regression

Bölmə: “Teqlər: @smoke və @regression”

Teqlər test adlarına yerləşdirilmiş sadə stringlərdir, @ ilə başlayır. Xüsusi API yoxdur — yalnız bir adlandırma konvensiyasıdır.

test('ana səhifə yüklənir @smoke', async ({ page }) => {
await page.goto('/');
await expect(page.locator('h1')).toBeVisible();
});
test('tam ödəniş axışı @regression', async ({ page }) => {
// ...
});
test('məhsul axtarışı @smoke @regression', async ({ page }) => {
// bu test hər iki suitəyə aiddir
});

Ümumi teq konvensiyaları:

TeqMənası
@smokeSürətli, yüksək dəyərli sağlamlıq yoxlamaları — hər deploy-dan əvvəl işlədilir
@regressionTam suite — gecə ya da hər PR-da işlədilir
@slowUzun müddətli testlər — dev döngüsü işlədilməsindən xaric edilir
@wipHazırlanma prosesindədir — CI-də --grep-invert @wip ilə atlanır

--grep ilə teqə görə filtrlə:

Terminal window
npx playwright test --grep "@smoke"
npx playwright test --grep "@regression"
npx playwright test --grep "@smoke|@regression" # hər iki teq
npx playwright test --grep-invert "@slow" # yavaş testləri xaric et

Yadda saxla: teq sadəcə test adındakı @mətn-dir — API yoxdur. --grep "@smoke" ilə seçin, --grep-invert "@slow" ilə xaric edin.


CLI: fayl, layihə və grep ilə işlətmək

Bölmə: “CLI: fayl, layihə və grep ilə işlətmək”
Terminal window
# Bütün testləri işlət
npx playwright test
# Müəyyən bir faylı işlət
npx playwright test tests/auth/login.spec.ts
# Bir qovluqdakı bütün faylları işlət
npx playwright test tests/checkout/
# Ad alt-stringi ya da regex-ə uyğun testləri işlət
npx playwright test --grep "login"
npx playwright test --grep "@smoke"
npx playwright test --grep "login|cart"
# Testləri ada görə xaric et
npx playwright test --grep-invert "@slow"
# Müəyyən brauzer layihəsini işlət
npx playwright test --project chromium
npx playwright test --project firefox
# Birləşdirmə: yalnız Firefox-da smoke testlər
npx playwright test tests/shop/ --grep "@smoke" --project firefox
# Paralelliyi idarə et
npx playwright test --workers 4
npx playwright test --workers 1 # ardıcıl işlət (debug üçün daha asandır)
# Uğursuz testləri yenidən cəhd et
npx playwright test --retries 2

Yadda saxla: işlətməni fayl yolu + --grep + --project + --workers-dən qurun ki, dəqiq istədiyiniz alt küməni icra edəsiniz.


npx playwright test --ui aşağıdakıları edə biləcəyiniz brauzer əsaslı bir panel açır:

  • Bütün test fayllarınıza və testlərə göz atın
  • Tək bir tıqlama ilə ayrı-ayrı testləri ya da tam suitləri işlədilir
  • Testlərin daxili brauzerda canlı icrasını izləyin
  • Hər test nəticəsi üçün trace, ekran görüntüsü və konsol çıxışını görün
  • Tək bir uğursuz testi dərhal yenidən işlədilir
Terminal window
npx playwright test --ui

UI rejimi inkişaf üçün idealdır — brauzerdan çıxmadan test runner-inin əks əlaqə döngüsünü əldə edirsiniz. CI üçün deyil.

Yadda saxla: --ui interaktiv inkişaf panelidir — testlərə göz atın, işlədin və canlı izləyin. Test yazmaq üçün əla, CI üçün deyil.


--debug Playwright Inspector-u — addım-addım sazlayıcısını açır.

Terminal window
# Bütün testləri debug et
npx playwright test --debug
# Müəyyən bir faylı debug et
npx playwright test tests/login.spec.ts --debug

Inspector-da edə bildikləriniz:

  • Testin əvvəlində dayandır
  • F10 ilə bir əməliyyat irəli get
  • Növbəti pause() çağırışına qədər işlət
  • Brauzerda lokatorları interaktiv şəkildə yoxlayın
  • Kodda və brauzerda vurğulanan cari əməliyyatı görün

Bütün əvvəlki əməliyyatları addım-addım rejimdə işlətmədən müəyyən bir nöqtədə durmaq üçün test içinə await page.pause() da əlavə edə bilərsiniz.

test('bu addımı debug et', async ({ page }) => {
await page.goto('/checkout');
await page.fill('#email', '[email protected]');
await page.pause(); // icra burada dayanır; Inspector açılır
await page.click('#submit');
});

Yadda saxla: --debug Inspector-u açır və əməliyyatları addım-addım keçir; dəqiq bir sətirdə dayanmaq üçün await page.pause() əlavə edin.


Trace viewer bir test icrasında baş verən hər şeyi qeyd edir: hər əməliyyat, hər əməliyyatdan əvvəl və sonra tam DOM snapshot-u, bütün şəbəkə sorğuları və brauzer konsolu.

playwright.config.ts-də tracing-i aktiv edin:

use: {
trace: 'on-first-retry', // yalnız test yenidən cəhd edildikdə trace qeyd edin
// trace: 'on', // həmişə qeyd edin (CI uğursuzluqlarını debug etmək üçün faydalıdır)
// trace: 'retain-on-failure', // yalnız test uğursuz olduqda trace-i saxlayın
}

Trace-i HTML hesabatından açın: Test işlədildikdən sonra HTML hesabatını açın (npx playwright show-report) və istənilən testin yanındakı trace ikonuna tıklayın.

Trace faylını birbaşa açın:

Terminal window
npx playwright show-trace test-results/menim-testim/trace.zip

Trace viewer panelləri:

PanelNə göstərir
TimelineÜfüqi çubuq; scrubber-i zamandakı istənilən nöqtəyə sürükləyin
ActionsZaman damğaları ilə hər Playwright əməliyyatının siyahısı
DOM snapshotHər əməliyyatdan əvvəl və sonra səhifənin tam vəziyyəti
NetworkHər HTTP sorğusu və cavabı
Consoleconsole.log, console.error və s. vasitəsilə qeydə alınan hər şey

Timeline scrubber ən güclü xüsusiyyətdir — testin uğursuz olduğu dəqiq ana sürükləyin və o anda səhifənin piksel-mükəmməl ekran görüntüsünü görün.

Yadda saxla: trace hər əməliyyatı əvvəl/sonra DOM snapshot-u, şəbəkə və konsolla qeyd edir. trace: 'on-first-retry' təyin edin və timeline-ı sındığı ana sürükləyin.


Ekran görüntüləri və videolar

Bölmə: “Ekran görüntüləri və videolar”
playwright.config.ts
use: {
screenshot: 'only-on-failure', // test uğursuz olduqda PNG çəkin
// screenshot: 'on', // həmişə çəkin
video: 'retain-on-failure', // yalnız test uğursuz olduqda videoyu saxlayın
// video: 'on', // həmişə qeyd edin
// video: 'off', // heç vaxt qeyd etməyin
}

Ekran görüntüləri və videolar trace faylları ilə birlikdə test-results/-da saxlanılır. CI-də həmin qovluğu build artefaktı kimi yükləyin.

Test içindən əl ilə ekran görüntüsü çəkin:

test('cari vəziyyəti əldə et', async ({ page }) => {
await page.goto('/dashboard');
await page.screenshot({ path: 'screenshots/dashboard.png', fullPage: true });
});

Yadda saxla: screenshot/video-nu *-on-failure-a təyin etsəniz, artefaktlar yalnız test uğursuz olduqda çəkilir — test-results/-a düşürlər.


HTML hesabatı hər test işlədilməsindən sonra yaradılan interaktiv, özünü özündə saxlayan bir panel-dir.

Terminal window
# Hesabatı aç
npx playwright show-report
# Ya da playwright-report/index.html-i birbaşa brauzerda açın

Hesabat göstərir:

  • Yuxarıda keçdi / uğursuz oldu / atlandı xülasəsi
  • Müddət, status və brauzer layihəsi ilə test siyahısı
  • Hər test üçün daxili ekran görüntüləri, videolar və trace bağlantıları
  • Filtr və axtarış idarəetmə elementləri

Xüsusi çıxış qovluğu təyin edin:

reporter: [
['html', { outputFolder: 'menim-hesabatim', open: 'never' }],
['list'],
],

playwright-report/-u .gitignore-a əlavə edin — o, yaradılan çıxışdır, mənbə kodu deyil. CI-də build artefaktı kimi yükləyin və uğursuzluqları araşdırmanız lazım olduqda endirin.

Yadda saxla: npx playwright show-report interaktiv xülasəni açır (status, trace, video). Yaradılan çıxışdır — playwright-report/-u gitignore edin.


Konfiqurasiya faylı test suitənizin necə işlədiyinin vahid mənbəyidir.

import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
// Playwright-ın test fayllarını axtardığı qovluq
testDir: './tests',
// Tək bir testin öldürülməzdən əvvəl işləyə biləcəyi maksimum müddət
timeout: 30_000,
// expect() assertion-unun uğursuz olmadan əvvəl yenidən cəhd etdiyi maksimum müddət
expect: {
timeout: 5_000,
},
// Uğursuz testi neçə dəfə yenidən işlətmək (0 = yenidən cəhd yoxdur)
retries: process.env.CI ? 2 : 0,
// Neçə testin paralel işlədildiyi
workers: process.env.CI ? 4 : undefined,
// CI-də test.only()-i bloklayır — təsadüfi commit-lərin qarşısını alır
forbidOnly: !!process.env.CI,
// Çıxış formatları
reporter: [
['html', { open: 'never' }],
['list'],
],
// Bütün layihələr üçün paylaşılan brauzer seçimləri
use: {
baseURL: 'http://localhost:3000',
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
},
// Brauzer layihələri
projects: [
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },
{ name: 'firefox', use: { ...devices['Desktop Firefox'] } },
{ name: 'webkit', use: { ...devices['Desktop Safari'] } },
],
});

Yadda saxla: playwright.config.ts vahid həqiqət mənbəyidir — testDir, timeout, retries, workers, reporter, useprojects hamısı oradadır.


use-da baseURL təyin etmək testlərinizdə hər yerdə nisbi URL-lər yazmanıza imkan verir.

playwright.config.ts
use: {
baseURL: 'http://localhost:3000',
}
// Testlərinizdə — nisbi URL-lər baseURL-ə qarşı həll edilir
await page.goto('/products'); // → http://localhost:3000/products
await page.goto('/checkout'); // → http://localhost:3000/checkout
await expect(page).toHaveURL('/cart'); // nisbi də olur

Staging mühitinə deploy etdiyinizdə axtarıb-dəyişdirmə lazım deyil — konfiqurasiyada bir dəfə əsas URL-i dəyişin.

Yadda saxla: baseURL-i bir dəfə təyin edin və hər yerdə nisbi yol yazın (page.goto('/products')); mühit dəyişmək bir sətirlik dəyişiklik olur.


Layihələr fərqli brauzer konfiqurasiyaları müəyyən edir. --project olmadan npx playwright test işlədildiğinde hər testi hər layihəyə qarşı işlədir.

projects: [
// Masaüstü brauzerlər
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },
{ name: 'firefox', use: { ...devices['Desktop Firefox'] } },
{ name: 'webkit', use: { ...devices['Desktop Safari'] } },
// Testlərin bir alt kümesini mobil cihazda işlət (əhatəni üçün testMatch istifadə edin)
{
name: 'Mobile Chrome',
use: { ...devices['Pixel 7'] },
testMatch: /.*mobile.*/,
},
],

CLI-dən tək bir layihəni işlət:

Terminal window
npx playwright test --project chromium
npx playwright test --project firefox
npx playwright test --project "Mobile Chrome"

Yadda saxla: hər layihə adlandırılmış brauzer konfiqurasiyasıdır; npx playwright test hər layihəni, --project chromium yalnız birini işlədir.


Playwright ~50 daxili cihaz deskriptoru ilə gəlir. Hər deskriptor viewport, user agent, deviceScaleFactor, toxunma hadisələrini və brauzerin isMobile bildirip bildirməyeceğini təyin edir.

import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
projects: [
{
name: 'iPhone 14',
use: { ...devices['iPhone 14'] },
},
{
name: 'Pixel 7',
use: { ...devices['Pixel 7'] },
},
{
name: 'iPad Pro',
use: { ...devices['iPad Pro 11'] },
},
],
});

Ön ayarı olmadan xüsusi viewport və user agent da təyin edə bilərsiniz:

use: {
viewport: { width: 375, height: 812 },
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 ...)',
isMobile: true,
hasTouch: true,
}

Yadda saxla: cihaz deskriptorunu (...devices['iPhone 14']) layihənin use-una yayın — içindəki hər test həmin viewport, user agent və toxunma ilə işləyir.


Yenidən cəhdlər, worker-lər və vaxt aşımları

Bölmə: “Yenidən cəhdlər, worker-lər və vaxt aşımları”

Yenidən cəhdlər uğursuz testi avtomatik olaraq yenidən işlədir. Son yenidən cəhdin trace-i həmişə saxlanılır.

retries: 2, // uğursuz testləri ən çox 3 dəfə işlət (1 orijinal + 2 yenidən cəhd)

CLI-dən yenidən cəhdlə işlət (konfiqurasiyadan üstün tutur):

Terminal window
npx playwright test --retries 1

Worker-lər neçə testin paralel işlədildiğini idarə edir. Defolt olaraq Playwright CPU nüvələrinin təxminən yarısını istifadə edir.

workers: 4, // həmişə 4 paralel worker
workers: '50%', // mövcud CPU nüvələrinin yarısı
workers: 1, // tam ardıcıl — debug etmək ən asandır

fullyParalleltrue olduqda eyni fayldakı testlər paralel işlədilə bilər. Defolt false-dur (fayldakı testlər ardıcıl işləyir; test faylları paralel işləyir).

fullyParallel: true,

Vaxt aşımı iyerarxiyası:

ParametrDefoltNəni məhdudlaşdırır
timeout30 000 msTam test funksiyası
expect.timeout5 000 msTək bir expect() assertion-u
use.actionTimeout30 000 msTək bir əməliyyat (click, fill və s.)
use.navigationTimeout30 000 msTək bir naviqasiya (goto, waitForURL)

Test-başına override edin:

test('yavaş inteqrasiya testi', async ({ page }) => {
test.setTimeout(120_000); // yalnız bu test üçün vaxt aşımını uzadın
// ...
});

Yadda saxla: retries uğursuzluqları yenidən işlədir, workers paralelliyi təyin edir və vaxt aşımı iyerarxiyası test (30 s) > əməliyyat/naviqasiya (30 s) > expect (5 s)-dir.


Bu tapşırıqlar yerli Playwright layihəsini istifadə edir. Bütün əmrləri tests/starter/ qovluğundan işlədilir.


Tapşırıq 1: npm skriptlərini əlavə edin

Bölmə: “Tapşırıq 1: npm skriptlərini əlavə edin”

package.json-u açın və ümumi test rejimləri üçün qısa yollarınız olması üçün aşağıdakı skriptləri əlavə edin:

{
"scripts": {
"test": "playwright test",
"test:smoke": "playwright test --grep @smoke",
"test:headed": "playwright test --headed",
"test:ui": "playwright test --ui",
"test:debug": "playwright test --debug",
"test:report": "playwright show-report"
}
}

Skriptləri əlavə etdikdən sonra işlədildiklərini yoxlayın:

Terminal window
npm test # bütün testləri işlət
npm run test:smoke # yalnız @smoke testlərini işlət
npm run test:headed # brauzer görünən şəkildə işlət

Tapşırıq 2: Smoke testlərini işlədilir

Bölmə: “Tapşırıq 2: Smoke testlərini işlədilir”
  1. @smoke ilə teqlənmiş ən az iki test olan tests/smoke.spec.ts yaradın:
import { test, expect } from '@playwright/test';
test('ana səhifə yüklənir @smoke', async ({ page }) => {
await page.goto('/');
await expect(page.locator('h1')).toBeVisible();
});
test('məhsullar səhifəsi yüklənir @smoke', async ({ page }) => {
await page.goto('/products');
await expect(page.locator('.product-card').first()).toBeVisible();
});
test('ödəniş daxil olmadıqda login-ə yönləndirir @regression', async ({ page }) => {
await page.goto('/checkout');
await expect(page).toHaveURL(/\/auth\/login/);
});
  1. Smoke suitesini işlədilir və yalnız 2 testin icra edildiyini təsdiqləyin:
Terminal window
npx playwright test --grep @smoke
  1. Regression suitesini işlədilir və yalnız 1 testin icra edildiyini təsdiqləyin:
Terminal window
npx playwright test --grep @regression

Tapşırıq 3: Tək bir spec faylını işlədilir

Bölmə: “Tapşırıq 3: Tək bir spec faylını işlədilir”

Ən ümumi CLI hədəfləmə nümunələrini tətbiq edin:

Terminal window
# Tək bir faylı işlət
npx playwright test tests/smoke.spec.ts
# Bir qovluqdakı bütün faylları işlət
npx playwright test tests/
# Adı "məhsullar" olan testləri işlət
npx playwright test --grep "məhsullar"
# Bir faylı müəyyən brauzer layihəsində işlət
npx playwright test tests/smoke.spec.ts --project chromium

Hər əmrin terminal çıxışında nəyi dəyişdirdiyini müşahidə edin.


Tapşırıq 4: Headed və debug rejimi

Bölmə: “Tapşırıq 4: Headed və debug rejimi”
  1. Smoke testlərini headed rejimdə işlədilir — brauzerin açıldığını izləyin:
Terminal window
npx playwright test --grep @smoke --headed
  1. Bir testə await page.pause() əlavə edin:
test('ana səhifə yüklənir @smoke', async ({ page }) => {
await page.goto('/');
await page.pause(); // Inspector burada açılır
await expect(page.locator('h1')).toBeVisible();
});
  1. Həmin testi debug rejimində işlədilir:
Terminal window
npx playwright test tests/smoke.spec.ts --debug
  1. Inspector-da: test boyunca addımlayın, lokator seçicini tıqlayın, bir seçici yazın və canlı vurğulandığını görün.

  2. Commit etməzdən əvvəl page.pause()-u silin.


Tapşırıq 5: Trace-i yoxlayın

Bölmə: “Tapşırıq 5: Trace-i yoxlayın”
  1. playwright.config.ts-də tracing-i aktiv edin:
use: {
trace: 'on',
}
  1. Smoke testlərini işlədilir:
Terminal window
npx playwright test --grep @smoke
  1. HTML hesabatını açın və istənilən test üçün trace ikonuna tıklayın:
Terminal window
npx playwright show-report
  1. Trace viewer-da:

    • Timeline scrubber-i bir page.goto əməliyyatına sürükləyin və DOM snapshot-una baxın
    • Network tab-ını açın — səhifə hansı sorğuları etdi?
    • Console tab-ını açın — hər hansı xəta ya da xəbərdarlıq varmı?
  2. İsteğe bağlı olaraq trace zip-ni birbaşa açın:

Terminal window
npx playwright show-trace test-results/smoke-spec-ana-sehife-yuklendir-smoke-chromium/trace.zip

  1. test()expect() iki primitiv-dir. expect(lokator) avtomatik yenidən cəhd edir; expect(dəyər) etmir.
  2. test.describe() və hook-lar test kodunu DRY saxlayır. beforeEach əhatə daxilindəki hər testdən əvvəl işləyir; afterEach sonra.
  3. Teqlər stringlərdir. Test adına @smoke ya da @regression qoyun. --grep ilə filtrlə. Xüsusi API tələb olunmur.
  4. CLI birləşdiriləbilədir. Tam olaraq istədiyiniz alt kümeni işlətmək üçün fayl yolunu, --grep, --project--workers-ı birləşdirin.
  5. İnkişaf üçün UI rejimi, sazlama üçün debug rejimi, CI uğursuzluqları üçün trace viewer. Hansı alətin hansı vəziyyətə uyğun olduğunu bilin.
  6. playwright.config.ts vahid həqiqət mənbəyidir. baseURL, retries, workers, reporterprojects hamısı orada yaşayır.
  7. Mobil emulyasiya bir sətirdir. Bir cihaz deskriptorunu layihənin use blokuna yaymaqla o layihədəki hər test həmin cihaz kimi işləyir.