Vacib Playwright API-ləri: formalar, fayllar, dialoglar, frame-lər
Form elementləri ilə iş — gündəlik işin 80%-i:
fill(value)— input/textarea; sahəni əvvəlcə təmizləyir.type()köhnədir və yavaşdır; yalnız hərf-hərf yazmaq tələb olunanda (autocomplete, maskalanmış sahə)pressSequentially()istifadə olunurselectOption('baku')—<select>; value, label və ya{ index }ilə; multi-select üçün massivcheck()/uncheck()— checkbox və radio.click()-dən üstündür, çünki idempotentdir: artıq işarələnibsə, işarəni götürmürsetInputFiles('path')—<input type="file">;[]verilsə seçimi təmizləyirclear()— sahəni boşaldır (fill('')ilə eynidir)
Mühüm detal: setInputFiles OS-un fayl dialoqunu açmır — birbaşa input elementinə fayl təyin edir. Bu, avtomatlaşdırmanı OS-dan asılı olmaqdan xilas edir.
Hadisə əsaslı API-lər — burada bir qayda hər şeyi həll edir: gözləməni hadisəni doğuran klikdən ƏVVƏL başlat. Əks halda hadisə klik ilə gözləmə arasında baş verir və test timeout-a düşür.
- Download:
const dl = page.waitForEvent('download')→ klik →await dl. SonrasuggestedFilename(),path(),saveAs() - Yeni tab:
const p = context.waitForEvent('page')→ klik (target="_blank") →await p - File chooser: gizli input-u olan custom düymələr üçün
page.waitForEvent('filechooser')
Dialoglar (alert, confirm, prompt) fərqli işləyir: Playwright onları avtomatik dismiss edir, əks halda səhifə donardı. Nəticə: dialoqu "görmək" üçün page.on('dialog', ...) handler-i klikdən əvvəl qeydiyyatdan keçməlidir.
iframe — DOM-un ayrı sənədidir, adi locator ora çatmır. page.frameLocator('iframe[title="3D Secure"]') ilə frame kontekstinə keçilir; sonra içəridə adi locator-lar işləyir.
Tab, pəncərə və context fərqi: page — bir tab; context — izolyasiya olunmuş brauzer profili (öz cookie-ləri, öz storage-ı); browser — proses. İki fərqli istifadəçini eyni testdə oynatmaq üçün iki context lazımdır — iki tab kifayət deyil, çünki tab-lar sessiyanı paylaşır.
| Tapşırıq | API | Tipik səhv |
|---|---|---|
| Checkbox işarələmək | check() | click() — artıq işarəlidirsə, işarəni götürür |
| Fayl yükləmək | setInputFiles() | OS dialoqunu robot ilə idarə etməyə çalışmaq |
| Fayl endirmək | waitForEvent('download') + klik | Gözləməni klikdən SONRA başlatmaq |
| confirm() dialoqunu təsdiqləmək | page.once('dialog', d => d.accept()) | Handler-i klikdən sonra qeydiyyatdan keçirmək |
| iframe içindəki elementə çatmaq | page.frameLocator(...) | Adi locator ilə axtarmaq — heç vaxt tapılmır |
| İki istifadəçini eyni testdə oynatmaq | browser.newContext() × 2 | İki tab açmaq — sessiya paylaşılır |
Bu mövzudan interview-un ən çox verilən üç sualı: "iframe-lə necə işləyirsən?", "yeni tab açılırsa nə edirsən?", "fayl yükləməsini necə test edirsən?". Üçü də sadə sualdır, amma cavabı bilməmək dərhal "real layihə təcrübəsi yoxdur" siqnalı verir. Hər üçü üçün bir cümləlik cavabı hazır saxla — bunlar əzbərlənməli az sayda API-lərdəndir.
📚 Mənbələr və sənədlər
- Page APIrəsmiplaywright.dev