Modul 6 · Python for SDETs
UI avtomatlaşdırma
Playwright ilə
Real brauzeri idarə et — istifadəçi kimi tap, icra et və assert et
page fixture
get_by_* lokatorlar
avtomatik gözləmə
web-first expect
Bir fixture: page
# pip install pytest-playwright
import re
from playwright.sync_api import expect
def test_products_page(page):
page.goto("http://localhost:3000/products")
expect(page).to_have_title(re.compile("TestMarket Lab"))
🌐pytest-playwright hər testə təzə page verir — təmiz brauzer konteksti, yazılacaq quraşdırma və ya söküş yox.
🎬Standart olaraq headless; idarə etməsini izləmək üçün --headed, debaq edərkən yavaşlatmaq üçün --slowmo əlavə et.
Elementləri istifadəçinin gördüyü kimi tap
Lokatorlar: get_by_*
test id
get_by_test_id()
tətbiqin göndərdiyi data-testid qarmaqları — ən möhkəm
role
get_by_role()
düymələr, linklər, başlıqlar — həm də a11y yoxlaması
label
get_by_label()
form sahələri görünən etiketinə görə
text
get_by_text()
görünən mətn — əlverişli, amma ən kövrək
🎯Niyyətə görə tap: get_by_test_id ən möhkəmdir (yenidən stilləndirməyə tab gətirən qarmaq); get_by_role / get_by_label əlçatımlılıq yoxlaması kimi də işləyir; get_by_text ən kövrəkdir.
Əl ilə sleep yox
Əməliyyatlar elementi avtomatik gözləyir
elementi tap
→
Playwright gözləyir: görünən & aktiv
→
sonra .click() / .fill()
page.get_by_label("Email").fill("customer@test.io")
page.get_by_test_id("login-submit").click()
⏱️Hər əməliyyat elementin əməliyyata yararlı olması üçün timeout-a qədər avtomatik gözləyir — ona görə time.sleep() bir qoxudur, düzəliş yox.
Təkrar cəhd edən assert-lər
from playwright.sync_api import expect
# waits until it's visible, or fails
expect(
page.get_by_test_id("nav-logout")
).to_be_visible()
✅expect(locator) şərt doğru olana və ya timeout çatana qədər avtomatik təkrar cəhd edir — bir millisaniyə erkən assert etməkdən flake yox.
🆚pytest-in sadə assert-indən fərqli: web-first expect bir dəfə yoxlamaq əvəzinə canlı səhifəni yoxlayır (poll).
🎭
Real brauzeri
idarə et
Rola görə tap, avtomatik gözləmə ilə icra et və web-first expect ilə assert et
🧪
Məşq
UI vasitəsilə daxil ol və logout düyməsinin görünən olmasını gözlə (expect)
🎯
Lokatorlar
CSS və ya XPath-dan əvvəl get_by_role / get_by_label-ə müraciət et
➡️
Modul 7
Page Object Model — seçiciləri oxunaqlı səhifə siniflərinin arxasında gizlə