📦 Page Object Model — Doğru Yapılışı
Page Object Model — Doğru Yapılışı: Page Object Model, Java'daki encapsulation ilkesinin test katmanına uygulanmasıdır: bir sınıf kendi iç implementasyonunu gizler ve dışarıya sa
Page Object Model, Java'daki encapsulation ilkesinin test katmanına uygulanmasıdır: bir sınıf kendi iç implementasyonunu gizler ve dışarıya sadece bir API (metod) seti sunar — tıpkı HashMap'in içinde nasıl çalıştığını bilmeden put() ve get() kullanman gibi. LoginPage sınıfı, "#email" locator'ının hangi attribute'a dayandığını, "Giriş Yap" butonunun DOM'da tam olarak nerede olduğunu gizler; test sadece loginPage.login("user@test.com", "pass123") çağırır. Peki neden test dosyasına locator'ı direkt yazmak yetmez? Frontend ekibi login formunu yeniden düzenlediğinde, locator test dosyasına dağılmışsa her test dosyasını taramak gerekir — Java'da bir private field'ın adını değiştirince IDE otomatik refactor yapsa da, Playwright test dosyalarına yayılmış string locator'ları IDE bulamaz. LoginPage sınıfı değiştirilince tüm testler otomatik güncellenir. QA gerçeği: "login flow değişti, 47 test kırmızı yandı" krizi genellikle POM uygulanmamış projelerde gerçekleşir; POM'un varlığında aynı değişiklik LoginPage.java'da (veya login-page.ts'de) tek bir locator güncellemesi demektir ve 47 test otomatik yeşile döner.
POM olmadan: 20 farklı test dosyasında aynı login locator'ları ve aynı login adımları kopyalanır. Login butonu "Giriş Yap" yerine "Oturum Aç" olarak değiştiğinde, 20 dosyayı tek tek düzeltmen gerekir. POM ile: locator ve login mantığı LoginPage sınıfında bir kere yazılır; buton metni değiştiğinde sadece o sınıfı güncellersin, tüm testler otomatik düzelir.
Bu, Selenium projelerinde yazdığın "Page Object" sınıflarıyla %100 aynı tasarım deseni — @FindBy ile alan tanımlayıp login() metodu yazdığın LoginPage class'ını hatırla. Playwright'ta @FindBy yerine constructor içinde page.getByRole(...) ile locator tanımlarsın; PageFactory.initElements() gibi ekstra bir başlatma adımına gerek yoktur, locator'lar "lazy" çalışır (gerçek arama, kullanıldığı anda olur).
Micro Lab: Playwright — Locator secimi
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
Adim Adim: Playwright — Locator secimi
Once getByRole, getByLabel, getByPlaceholder gibi semantic locator dene
Semantic bulamazsan getByText veya getByTestId kullan
CSS/XPath gerekiyorsa page.locator("css") veya page.locator("xpath=...") yaz
await expect(locator).toBeVisible() ile locatorin calistigini dogrula
Birden fazla element eslesiryorsa .first() / .nth() / .filter() ile daralt
Playwright locator secimi ve dogrulama sirasi nedir?
POM Olmadan vs POM ile
POM Yok — Kod Tekrarı