Sorunun geçmişi:
Modern tek sayfa uygulamalarının (SPA) React, Angular, Vue tabanlı ortaya çıkması, UI test otomasyonunda yeni problemlerle karşılaşılmasına yol açtı: verilerin asenkron yüklenmesi, karmaşık dinamik arayüz öğeleri, istemci tarafı yönlendirme. Klasik yaklaşımlar (örneğin, seçiciler veya statik olarak oluşturulmuş DOM) bu tür uygulamalar için güvenilir olmayı bıraktı.
Problem:
Çözüm:
explicit waits) kullanılması:from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 20) my_element = wait.until(EC.visibility_of_element_located((By.ID, 'dynamic_id')))
Anahtar özellikler:
SPA testlerinde yalnızca XPATH veya CSS lokatörlerine güvenilebilir mi?
Hayır. XPATH/CSS türü lokatörler, DOM'daki her değişiklikte sık sık bozulur. Dayanıklı data-* niteliklerini veya test-id'leri kullanmak daha iyidir.
Selenium/WebDriverWait asenkronluk sorunlarını tamamen çözer mi?
Hayır. WebDriverWait, gecikmeler nedeniyle düşmeleri önlemeye yardımcı olur ancak karmaşık bir UI'nin doğru bir şekilde yüklenmesini ve durumunu garanti etmez. Ek kontrol, API mocklama ve UI durumlarıyla çalışma gereklidir.
UI'nin doğru bir şekilde yüklendiğini doğrulamak için sayfadaki yalnızca görünür öğelerin varlığı yeterli mi?
Hayır. Bir öğe görünüyorsa ancak beklenen verileri veya durumu içermiyorsa, "boş" yüklemeyi başarılı olarak yanlış değerlendirebilirsiniz. İçeriği ve alanların değerlerini doğrulamak gerekir.
Otomatik testler zamanlanmış olarak çalıştırılmakta, XPath seçicileri ve sleep gecikmeleri kullanılmaktadır. UI güncellemesinden sonra, yarım test öğelerin yokluğu veya yeni id/class ile yer değiştirmesi nedeniyle düşmektedir.
Artılar:
Eksiler:
UI'ye data-testid'ler eklenir, testler açık beklemeler ve özel test kancaları kullanır. Tüm ağ yanıtları mocklanır, testler yalnızca varlığı değil, öğelerin içeriğini de doğrular.
Artılar:
Eksiler: