Sparround

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ə olunur
  • selectOption('baku')<select>; value, label və ya { index } ilə; multi-select üçün massiv
  • check() / uncheck() — checkbox və radio. click()-dən üstündür, çünki idempotentdir: artıq işarələnibsə, işarəni götürmür
  • setInputFiles('path')<input type="file">; [] verilsə seçimi təmizləyir
  • clear() — 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. Sonra suggestedFilename(), 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ıqAPITipik səhv
Checkbox işarələməkcheck()click() — artıq işarəlidirsə, işarəni götürür
Fayl yükləməksetInputFiles()OS dialoqunu robot ilə idarə etməyə çalışmaq
Fayl endirməkwaitForEvent('download') + klikGözləməni klikdən SONRA başlatmaq
confirm() dialoqunu təsdiqləməkpage.once('dialog', d => d.accept())Handler-i klikdən sonra qeydiyyatdan keçirmək
iframe içindəki elementə çatmaqpage.frameLocator(...)Adi locator ilə axtarmaq — heç vaxt tapılmır
İki istifadəçini eyni testdə oynatmaqbrowser.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