Bir iOS geliştiricisiye arayüz (UI) testleri yazarken en çok zamanını neyin harcadığını sorsanız, pek çoğu aynı cevabı verecektir: kaydırma (scrolling). Ekranda görünmeyen bir öğeye ulaşmak, ona dokunmak ve doğru konumda olduğunu doğrulamak basit görünebilir ancak pratikte gerçekten büyük bir mühendislik problemidir. Bu makaledeki amaç, Trendyol gibi büyük e-ticaret projelerinde bu zorluyla nasıl karşılaşıldığını, mevcut çözümlerin neden yetersiz kaldığını ve XCScrollHelper adlı yenilikçi araçla sorunun nasıl kökten çözüldüğünü detaylıca incelemektir.
Kaydırma Testlerinin Gözle Görünmeyen Zorlukları
Widespread e-ticaret uygulamaları genellikle kampanyalar, ürün listeleri veya öneri bölümleri gibi çok uzun ve kaydırılabilir ekranlardan oluşur. Tek bir arayüz koleksiyonu içinde yer alan bu içerikler, çoğu zaman cihazın ekrana gösterebileceği almanın oldukça altındadır. Ekran görüntüleri (snapshot tests) için her bileşenin farklı durumlarını doğrulamamız gerekiyor; yani ilgili komponenti bulup o noktadaki ekranı yakalamamız gerekiyor.
Standart XCTest yaklaşımı ise şu adımları içerir: Belirli bir sayıda kaydırma işlemi yapıp hedef öğe ekranda belirene kadar testin devam etmesini sağlamak. Ancak bu yöntemin üç temel ve kritik sorunu vardır:
Birincisi yavaştır. Her bir kaydırma emri, XCTest'in aslında simüle edilmiş bir animasyonu çalıştırması, arayüzün oturmasını beklemesi ve erişilebilirlik ağını yeniden taraması gerektiği için büyük zaman alır. Tek bir hızlı yukarı kaydırma işlemi bile yaklaşık yarım ile bir saniye arasında sürer. Eğer hedef öğeniz 20 kaydırma uzağındaysa, sadece bu işlem ekranı kaydırmak için 10 ila 20 saniyeye mal olur.
İkincisi güvenilmezdir. Kaydırma mesafesi cihazın boyutuna, dinamik yazı tipi ayarlarına ve hücre yüksekliğine göre değişkenlik gösterir. Bir öğeyi bulmak bugün 15 kaydırma gerektirirken, daha sonra küçük bir düzenleme yapıldığında aynı öğe için 20 kaydırmaya ihtiyaç duyabilirsiniz. Bu durum en kötü senaryoyu kapsayacak kadar yüksek bir sınır belirlenmesini gerektirir ve bu da testin zaten yavaş olan süresini daha da uzatır.
Üçüncüsü, tam konum kontrolü yoktur. Öğeyi bulduktan sonra bile ekranda tam olarak nerede durduğu üzerinde kesin bir hakimiyet kuramazlar. Ekran görüntüsü alma testlerinde bile bu önemlidir; çünkü bir bileşenin görüntüleme alanının (viewport) üstünde mi yoksa ortasında mı göründüğü, testin geçip geçmeyeceğini belirleyen kritik bir faktördür.
XCScrollHelper Nasıl Bir Çözüm Sunuyor?
XCScrollHelper, XCTest'in mevcut kaydırma döngüsü mekanizmalarını tamamen devreden çıkarır. Bunun yerine uygulama süreci ile test süreci arasında dosya tabanlı bir iletişim kurar ve kaydırmayı doğrudan programatik olarak gerçekleştirir.
Bu çalışma şu şekilde işler: UI testi, simülatörün ortak kaynaklar dizini içinde yeni bir JSON dosyası oluşturur; bu dosyaya hedef öğenin erişilebilirlik kimliğini (accessibility identifier) ve istenen kaydırma pozisyonunu yazar. Uygulama tarafındaki Bir Dosya İzleyici (FileMonitor), bu dosyadaki değişiklikleri tespit eder. XCScrollHelper, UI Koleksiyonunun düzenleme niteliklerini kullanarak hedefin kesin koordinatlarını hesaplar. Daha sonra setContentOffset metodunu çağırarak doğrudan o noktaya kaydırır; böylece ne bir animasyon oynar ne de bekleme süresi istenir.
Uygulama, başarı veya başarısızlık sonucunu aynı dosyaya geri yazar. Test tarafı ise bu dosyadaki sonucu sürekli kontrol eder (polling), sonuçları okur ve test akışına devam eder. Temel fark tam olarak budur: Asla XCTest'in kaydırma mekanizmasına dokunulmaz. Uygulama içi setContentOffset çağrısı milisaniyeler içinde tamamlanır.
Sayılar Konuşuyor, Performans Artıyor
Tjen bir e-ticaret projesinde bulunan 2 bin 800'den fazla ekran görüntüsü test metodu ve bu metodun ait olduğu onlarca test dosyası gibi büyük ölçekli projelerde her kaydırma işlemi hayati önem taşır. Geleneksel döngü yaklaşımlarıyla yapılan tek bir sayfalık kaydırma testi ortalama 25 saniye sürerken, XCScrollHelper kullanıldığında bu süre 5 saniyeye kadar düşmektedir. Bu oran sadece beşe karşı bir iyileşme anlamına gelir.
Test paketinin tamamında bu verimlilik düşünüldüğünde elde edilen zaman tasarrufu büyük rakamlara ulaşır. Günün onlarca kez çalıştığı Sürekli Entegrasyon (CI) süreçlerinde, bu durum geliştiricilere geri bildirimlerinin saniyeler daha hızlı gelmesi anlamına gelir. Testlerin çok daha erken ve güvenilir bir şekilde tamamlanması, yazılım geliştirme döngüsünün hızlanmasına doğrudan katkı sağlar.
Uygulama Tarafında Kullanım Detayları
Uygulamanın başlangıç noktası olan AppDelegate dosyasına sadece birkaç satır kod eklenerek test otomasyonu izleyicisi başlatılır. Bu sayede hem standart liste görünümleri (Collection View) hem de düz kaydırma alanları (Scroll View) için tam destek sağlanmış olur.
Test tarafında ise eski, kırılgan ve yavaş döngü mekanizmalar yerine tek bir fonksiyon çağrısıyla istediğimiz sonuçlara ulaşırız. İster kampanya banner'ı gibi ana öğeleri bulalım, ister bir öneri başlığını veya yatay kayan kartları hedef alabilelim; XCScrollHelper bu karmaşık işlemleri sadece birkaç satırlık komutla gerçekleştirir. Bu programatik yaklaşım sayesinde testlerimizde hem inanılmaz bir hız kazanılır hem de beklenen doğruluğun ötesinde bir güvenilirlik sağlanmış olur.