Otomasyon QAFrontend Otomasyon Mühendisi / QA

Dinamik olarak değişen UI (örneğin, SPA veya ağır JS yönlendirmeleri olan siteler) için otomatik testlerin nasıl doğru bir şekilde uygulanacağı?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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:

  • Testler sık sık yüklenme gecikmeleri, animasyonlar ve asenkron öğe değişiklikleri nedeniyle "düşüyor".
  • Seçicilerin istikrarsızlığı (dinamik id'ler, sınıflar, DOM yapısındaki değişiklikler).
  • Ön uçtaki değişikliklerden sonra testlerin sürdürülmesinin zorluğu.

Çözüm:

  • Öğelerin görünmesi veya değişmesi için açık beklemelerin (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')))
  • Daha dayanıklı lokatörlerle (data-testid, benzersiz nitelikler) çalışma.
  • Test altyapısının düzenlenmesi: API yanıtlarının mocklanması, özel test yardımcılarının kullanılması.
  • Ön uçta özel kancaların veya kararlı test-id'lerin eklenmesi.

Anahtar özellikler:

  • Dayanıklı lokatörler ve açık beklemelere vurgu
  • UI durumunun API veya servis olayları aracılığıyla doğrulanması
  • "Kattlar halinde" otomasyon: birim + entegrasyon + E2E

Kandırmaca sorular.

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.

Tipik hatalar ve anti-paterner

  • Dinamik veya dayanaksız lokatörlerin kullanılması
  • Açık beklemeler yerine örtük beklemeler (sleep)
  • Öğenin yalnızca varlığının kontrol edilmesi, değerinin/içeriğinin kontrol edilmemesi
  • API yanıtları/hizmetlerin mocklanmaması

Gerçek hayattan bir örnek

Olumsuz senaryo

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:

  • Hızlı otomatik test oluşturma
  • Basit yapı

Eksiler:

  • İstikrarsızlık (flaky tests)
  • Her bir sürümün sürdürülmesinin zorluğu

Olumlu senaryo

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:

  • Yüksek istikrar ve güvenilirlik
  • UI değişikliklerine uyum sağlama kolaylığı

Eksiler:

  • Ön uçtan destek gereklidir
  • Tüm API senaryoları mükemmel şekilde mocklanamaz