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
test və expect
Bölmə: “test və expect”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 olurconst 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 edirawait 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
Bölmə: “test.describe”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.
beforeEach və afterEach
Bölmə: “beforeEach və afterEach”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); } });});beforeAll və afterAll 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', 'admin@test.io'); 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 və @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ı:
| Teq | Mənası |
|---|---|
@smoke | Sürətli, yüksək dəyərli sağlamlıq yoxlamaları — hər deploy-dan əvvəl işlədilir |
@regression | Tam suite — gecə ya da hər PR-da işlədilir |
@slow | Uzun müddətli testlər — dev döngüsü işlədilməsindən xaric edilir |
@wip | Hazırlanma prosesindədir — CI-də --grep-invert @wip ilə atlanır |
--grep ilə teqə görə filtrlə:
npx playwright test --grep "@smoke"npx playwright test --grep "@regression"npx playwright test --grep "@smoke|@regression" # hər iki teqnpx playwright test --grep-invert "@slow" # yavaş testləri xaric etYadda 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”# Bütün testləri işlətnpx playwright test
# Müəyyən bir faylı işlətnpx playwright test tests/auth/login.spec.ts
# Bir qovluqdakı bütün faylları işlətnpx playwright test tests/checkout/
# Ad alt-stringi ya da regex-ə uyğun testləri işlətnpx playwright test --grep "login"npx playwright test --grep "@smoke"npx playwright test --grep "login|cart"
# Testləri ada görə xaric etnpx playwright test --grep-invert "@slow"
# Müəyyən brauzer layihəsini işlətnpx playwright test --project chromiumnpx playwright test --project firefox
# Birləşdirmə: yalnız Firefox-da smoke testlərnpx playwright test tests/shop/ --grep "@smoke" --project firefox
# Paralelliyi idarə etnpx playwright test --workers 4npx playwright test --workers 1 # ardıcıl işlət (debug üçün daha asandır)
# Uğursuz testləri yenidən cəhd etnpx playwright test --retries 2Yadda 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.
UI rejimi
Bölmə: “UI rejimi”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
npx playwright test --uiUI 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 rejimi
Bölmə: “Debug rejimi”--debug Playwright Inspector-u — addım-addım sazlayıcısını açır.
# Bütün testləri debug etnpx playwright test --debug
# Müəyyən bir faylı debug etnpx playwright test tests/login.spec.ts --debugInspector-da edə bildikləriniz:
- Testin əvvəlində dayandır
F10ilə 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', 'user@example.com'); 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
Bölmə: “Trace viewer”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:
npx playwright show-trace test-results/menim-testim/trace.zipTrace viewer panelləri:
| Panel | Nə göstərir |
|---|---|
| Timeline | Üfüqi çubuq; scrubber-i zamandakı istənilən nöqtəyə sürükləyin |
| Actions | Zaman damğaları ilə hər Playwright əməliyyatının siyahısı |
| DOM snapshot | Hər əməliyyatdan əvvəl və sonra səhifənin tam vəziyyəti |
| Network | Hər HTTP sorğusu və cavabı |
| Console | console.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”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ı
Bölmə: “HTML hesabatı”HTML hesabatı hər test işlədilməsindən sonra yaradılan interaktiv, özünü özündə saxlayan bir panel-dir.
# Hesabatı açnpx playwright show-report
# Ya da playwright-report/index.html-i birbaşa brauzerda açınHesabat 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.
playwright.config.ts
Bölmə: “playwright.config.ts”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, use və projects hamısı oradadır.
baseURL
Bölmə: “baseURL”use-da baseURL təyin etmək testlərinizdə hər yerdə nisbi URL-lər yazmanıza imkan verir.
use: { baseURL: 'http://localhost:3000',}
// Testlərinizdə — nisbi URL-lər baseURL-ə qarşı həll edilirawait page.goto('/products'); // → http://localhost:3000/productsawait page.goto('/checkout'); // → http://localhost:3000/checkoutawait expect(page).toHaveURL('/cart'); // nisbi də olurStaging 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.
Brauzer layihələri
Bölmə: “Brauzer layihələri”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:
npx playwright test --project chromiumnpx playwright test --project firefoxnpx 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.
Mobil emulyasiya
Bölmə: “Mobil emulyasiya”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):
npx playwright test --retries 1Worker-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 workerworkers: '50%', // mövcud CPU nüvələrinin yarısıworkers: 1, // tam ardıcıl — debug etmək ən asandırfullyParallel — true 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ı:
| Parametr | Defolt | Nəni məhdudlaşdırır |
|---|---|---|
timeout | 30 000 ms | Tam test funksiyası |
expect.timeout | 5 000 ms | Tək bir expect() assertion-u |
use.actionTimeout | 30 000 ms | Tək bir əməliyyat (click, fill və s.) |
use.navigationTimeout | 30 000 ms | Tə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.
Tapşırıqlar
Bölmə: “Tapşırıqlar”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:
npm test # bütün testləri işlətnpm run test:smoke # yalnız @smoke testlərini işlətnpm run test:headed # brauzer görünən şəkildə işlətTapşırıq 2: Smoke testlərini işlədilir
Bölmə: “Tapşırıq 2: Smoke testlərini işlədilir”@smokeilə teqlənmiş ən az iki test olantests/smoke.spec.tsyaradı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/);});- Smoke suitesini işlədilir və yalnız 2 testin icra edildiyini təsdiqləyin:
npx playwright test --grep @smoke- Regression suitesini işlədilir və yalnız 1 testin icra edildiyini təsdiqləyin:
npx playwright test --grep @regressionTapşı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:
# Tək bir faylı işlətnpx playwright test tests/smoke.spec.ts
# Bir qovluqdakı bütün faylları işlətnpx playwright test tests/
# Adı "məhsullar" olan testləri işlətnpx playwright test --grep "məhsullar"
# Bir faylı müəyyən brauzer layihəsində işlətnpx playwright test tests/smoke.spec.ts --project chromiumHə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”- Smoke testlərini headed rejimdə işlədilir — brauzerin açıldığını izləyin:
npx playwright test --grep @smoke --headed- 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();});- Həmin testi debug rejimində işlədilir:
npx playwright test tests/smoke.spec.ts --debug-
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.
-
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”playwright.config.ts-də tracing-i aktiv edin:
use: { trace: 'on',}- Smoke testlərini işlədilir:
npx playwright test --grep @smoke- HTML hesabatını açın və istənilən test üçün trace ikonuna tıklayın:
npx playwright show-report-
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ı?
- Timeline scrubber-i bir
-
İsteğe bağlı olaraq trace zip-ni birbaşa açın:
npx playwright show-trace test-results/smoke-spec-ana-sehife-yuklendir-smoke-chromium/trace.zipƏsas nəticələr
Bölmə: “Əsas nəticələr”test()vəexpect()iki primitiv-dir.expect(lokator)avtomatik yenidən cəhd edir;expect(dəyər)etmir.test.describe()və hook-lar test kodunu DRY saxlayır.beforeEachəhatə daxilindəki hər testdən əvvəl işləyir;afterEachsonra.- Teqlər stringlərdir. Test adına
@smokeya da@regressionqoyun.--grepilə filtrlə. Xüsusi API tələb olunmur. - CLI birləşdiriləbilədir. Tam olaraq istədiyiniz alt kümeni işlətmək üçün fayl yolunu,
--grep,--projectvə--workers-ı birləşdirin. - İ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.
playwright.config.tsvahid həqiqət mənbəyidir.baseURL,retries,workers,reportervəprojectshamısı orada yaşayır.- Mobil emulyasiya bir sətirdir. Bir cihaz deskriptorunu layihənin
useblokuna yaymaqla o layihədəki hər test həmin cihaz kimi işləyir.