Web-Öncelikli Doğrulamalar (Assertions)
TestFly, Playwright'ın expect() ve AssertJ kütüphanelerinden esinlenen web-öncelikli assertion'lar sunar. Tüm doğrulamalar, koşul sağlanana veya zaman aşımına uğrayana kadar DOM'u WebDriverWait ile otomatik olarak yoklar (poll eder). Doğrulama öncesinde manuel bekleme veya Thread.sleep() yazmanıza gerek kalmaz.
import static io.testfly.assertion.SeleniumAssert.assertThat;
// Veya doğrudan BaseTest, BasePage, BaseJUnit5Test ve BaseCucumberSteps içerisinden:
assertThat(By.id("dashboard")).isVisible();
Neden Web-Öncelikli Doğrulamalar?
Geleneksel assertion'lar (TestNG Assert.assertTrue(el.isDisplayed()) veya JUnit assertTrue), koşulu tek bir anda hemen değerlendirir. Eleman henüz animasyon aşamasındaysa, veri çekiliyorsa veya render edilmeye devam ediyorsa test gereksiz yere başarısız olur (flaky test).
TestFly'ın assertThat() mekanizması:
testfly.ymldosyasındakitimeouts.explicit(varsayılan 10s) süresince otomatik yeniden dener.- Her doğrulama adımını otomatik olarak
StepLogger'a kaydeder ve HTML raporda görselleştirir. - Hem Selenium
Byhem de akıcıLocator($(),getByRole()vb.) nesneleriyle tam uyumlu çalışır.
Mevcut Matcher'lar
Görünürlük (Visibility)
assertThat(By.id("welcome-banner")).isVisible();
assertThat(By.cssSelector(".spinner")).isHidden();
Metin (Text)
// Birebir metin eşleşmesi (trimmed)
assertThat(By.tagName("h1")).hasText("Dashboard");
// Alt metin içerme kontrolü
assertThat(By.id("greeting")).containsText("Hoş geldiniz");
Etkileşim ve Durum (Interactability)
assertThat(By.id("submit-btn")).isEnabled();
assertThat(By.id("delete-btn")).isDisabled();
assertThat(By.id("terms-checkbox")).isChecked();
assertThat(By.id("search-input")).isFocused();