🏗️ Framework Mimarisi (SOLID + POM)
Framework Mimarisi (SOLID + POM): Appium'un Java client'ı Selenium'un WebDriver arayüzünü EXTENDS eder — bu yüzden bu sekmeye kadar yazdığın her parça (AppiumBy locator'ları, App
Appium'un Java client'ı Selenium'un WebDriver arayüzünü EXTENDS eder — bu yüzden bu sekmeye kadar yazdığın her parça (AppiumBy locator'ları, AppiumFluentWait, @Test metotları) Selenium'daki AYNI mimari sorunla karşı karşıyadır: DriverManager olmadan her test kendi driver'ını yaratır, paralel koşumda thread'ler karışır. Ama burada İKİNCİ bir katman daha var ki Selenium'da hiç YOKTUR: aynı "Giriş Ekranı" senaryosu Android'de `resource-id` ile, iOS'ta `accessibility id` ile TAMAMEN farklı locator'lara sahiptir — kod aynı iş kuralını (login) uygularken, İKİ platformda İKİ farklı teknik gerçekle karşılaşır. İkinci benzetme: bir uluslararası şirketin aynı ürünü farklı ülkelerde satması gibi — ürün (senaryo) AYNIDIR ("giriş yap"), ama ambalaj/dil/fiş tipi (locator'lar, native SDK) ülkeye (platforma) göre DEĞİŞİR; satış ekibi (test) "ürünü sat" der, hangi ambalajın kullanılacağına lojistik katman (POM) karar verir. Peki Android testleri zaten çalışıyorken, neden iOS için AYRI bir sınıf yazmak yerine if/else eklemiyoruz? Çünkü platform sayısı ikiden fazla olabilir (Android + iOS + tablet varyantları) ve her yeni platform için mevcut sınıfı değiştirmek, diğer platformların testlerini kırma riski taşır — tam olarak OCP'nin çözdüğü problem. Java karşılaştırması: bu, bir `PaymentGateway` arayüzünün `StripeGateway`/`PaypalGateway` ile ayrı ayrı uygulanmasıyla AYNI motivasyondur. QA bağlamı: cross-platform soyutlama olmadan bir "giriş akışı değişti" haberi HEM Android HEM iOS test dosyalarını ayrı ayrı kırar; doğru soyutlamada TEK arayüz sözleşmesi sabit kalır, sadece platforma özgü implementasyon güncellenir.
Appium Framework'ünü Adım Adım İnşa Et
Aşağıdaki 4 parça, bu sekmede birazdan tek tek inşa edeceğin mimarinin BÜYÜK RESMİ. Şimdilik hepsi kilitli — her parçanın kendi adımındaki "Kendin Dene" pratiğini ilk kez doğru bitirdiğinde, o parça burada kilitliden İNŞA EDİLDİ'ye döner.
🧭 Adım 1 — Büyük Resim: Cross-Platform Framework Mindmap
Aynı mimari burada beş ayrı açıdan gösteriliyor: önce ana akış (bir test çalışırken kim kimi çağırır), sonra kurulum akışı (capabilities'ten driver'a), sonra "cihaz paralelliği" (Selenium'un thread paralelliğine EK OLARAK burada bir de cihaz/emulator boyutu var), sonra veri paylaşım kapsamı (device matrix / capabilities) ve son olarak her sınıfın "yapar/yapmaz" listesi.
3️⃣ Cihaz Paralelliği — Selenium'un Thread Paralelliğine EK OLARAK
Thread-1 → Pixel 7 (Android 14)
Thread-2 → iPhone 15 (iOS 17)
Thread-3 → Samsung S23 (Android 13)
Selenium'da ThreadLocal sadece "hangi thread hangi tarayıcı sekmesine sahip" sorusunu çözerdi. Appium'da AYNI ThreadLocal deseni geçerlidir ama bir boyut daha eklenir: her thread'in driver'ı FARKLI bir FİZİKSEL cihaza veya emulator'e bağlanabilir — CapabilitiesFactory, hangi thread'in hangi cihaz/OS sürümü kombinasyonunu alacağını belirler. Bir device farm'da (örn. BrowserStack App Automate) bu, AYNI test senaryosunun 20 farklı gerçek cihazda EŞ ZAMANLI koşmasını sağlar — ThreadLocal olmadan bu 20 cihaz birbirinin komutlarını KARIŞTIRIRDI.
4️⃣ Veri Paylaşım Kapsamı — Test Verisi Nereden Gelir?
5️⃣ Kim Ne Yapar? — Sınıf Sorumlulukları
LoginScreen (arayüz)
AndroidLoginScreen / IOSLoginScreen