Dinamik beklentilerle çalışmak, modern web uygulamalarında içerik genellikle anında görünmediği için, UI otomasyonunun önemli bir sorunudur.
Konu
Otomasyonda erken versiyonlarda sert beklentiler (sleep) kullanılıyordu, bu da testlerin ya çok yavaş olmasına ya da uygulamalar normalden daha uzun sürede yüklendiğinde dalgalanmalara yol açıyordu. Bu, SPA ve ağır JS döneminde önemli bir sorun haline geldi.
Sorun Statik gecikmeler kullanmak, istikrarsız testlere ve zaman kaybına yol açar: otomatik testler yavaşlayabilir veya rastgele "başarısız" olabilir. Ayrıca, testlerin ölçeklenebilirliği ve bakımı zarar görür.
Çözüm
Dinamik (açık) beklentiler kullanmak: örneğin, Selenium'daki WebDriverWait, Cypress ve Playwright çerçevelerindeki waitFor fonksiyonları.
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, 10) # maksimum bekleme süresi 10 saniye wait.until(EC.visibility_of_element_located((By.ID, 'my-element')))
Ana özellikler:
Dinamik beklentiler varken sleep neden gerekli?
time.sleep() kullanımı yalnızca hata ayıklama veya acil durumlar için geçerlidir. Gerçek otomatik testlerde her zaman açık beklentiler yapılması daha iyidir.
Beklentilerin kullanımı dalgalanmaları tamamen ortadan kaldırabilir mi?
Hayır, eğer bekleme koşulları yetersiz tanımlanmışsa (örneğin, bir özellik bekliyorsak, ancak verilerin tam yüklenmesini beklemiyorsak), dalgalanmalar devam eder.
Tüm testler için tek bir küresel bekleme yapılabilir mi?
Hayır – unsurların görünüm koşulları farklıdır. Beklentiler yalnızca gerekli adımlara uygulanmalıdır.
sleep kullanmakTüm otomatik testler arasında "tıklama" ve kontrol arasında sleep(2) ile yazılmıştı. Sayfa güncellendikten sonra kullanıcılar gecikmelerden şikayet etti ve testler bazen yavaş internet nedeniyle başarısız oldu.
Artılar:
Eksiler:
Gerekli bloklar yüklendiğinde tıklamanın mümkün olabilmesi için açık beklentiler ayarladık. sleep kullanmaktan vazgeçtik, tüm testler istikrarlı ve hızlı geçiyor.
Artılar:
Eksiler: