Herkese merhabalar. Normalde çok fazla Türkçe makale yazmıyordum ancak bu makalenin bir çok kişiye faydası olacağını düşündüğüm için Türkçe versiyonunu da yazma kararı aldım. Bundan iki yıl evvelinde Appium ile ilgili kapsamlı bir makale yazmıştım. Bu makaleye şuradan erişebilirsiniz. Ancak teknoloji denen meret şey yerinde durmuyor. Appium içinde bu böyle oldu ve Appium Desktop 2017 ortalarında (Beta olmaktan çıktı) duyuruldu. Bununla birlikte Android tarafında da Android tool’larını artık Android Studio içinde kullanabilir olduk. Diğer türlü command prompt üzerinde bunları kullanabiliyoruz. Bu makalede de bu değişikleri kapsayarak bir Appium’a başlangıç rehberi hazırladım. Ne işte, ne de evde MAC sahibi olamadığım için windows ortamında android telefon kullanarak bir native mobile test otomasyonu yapacağız. Haydi başlayalım.
Adım-1: JAVA ve Maven Kurulumları ve Konfigürasyonları
JAVA JDK’yı bu adresten indirin: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Kurulum adımları ve konfigürasyon ayarları şu makale’nin 4. ve 5. adımında anlatılmıştır. Ekran görüntülerine bakarak zaten anlarsınız. Anlamadığınız noktalarda yorum yazarsanız cevaplamaya çalışırım.
Adım-2: Android Studio Kurulumu ve Konfigürasyonu
Şu andrese gidelim https://developer.android.com/studio/index.html ve Android Studio’yu indirip, kurmaya başlayalım. Zaten yapacağımız işlemler next next next olacak.
Aşağıda gösterilen butona tıklayalım. “Download Android Studio For Windows“.
Next’e tıklayalım.
Seçeneklerin hepsini seçelim ve next’e tıklayalım.
Kurulum klasörünü değiştirmeden Next’leyip ilerleyelim.
Install’a tıklayıp, kurulumu başlatalım. Sonra da çay demlemeye gidelim. :)
Bu sizin ilk Android Studio kurulum deneyiminiz ise çok heyecanlanmış olabilirsiniz. O nedenle “Do not import settings” i seçelim. :) Zaten ilk kurulum olduğu için eskiden kalma ayarlarımız olmayacaktır. Sonra da OK’e tıklayalım.
Sonraki ekranda da Next’e tıklayın.
Standartlardan şaşmayalım. Standard’ı seçelim ve Next’leyelim.
Tema seçimine geldik. Tema vakfına da selam olsun buradan. Yeşillikleri koruyalım ve Darculayı seçelim. Gözler için A vitamini ve Darcula tema öneriyor doktorlar. ;)
Finish çizgisine yaklaştık. Finish’leyelim.
Bırakalım kurulum devam edip, sonlansın.
Sonunda kurulumlar tamamlandı ise Finish e tıklayalım.
“Configure” > “SDK Manager” e gidelim ve SDK bilgilerine bakalım. Bunlarla sistem değişkenlerini tanımlayacağız.
Çıkan ekranda Android versiyonunu seçelim. Ben 7.0 seçtim. Burada emulator’un Android API Level’ini seçmiş olduk.
Aşağıda gördüğünüz tool’ları seçelim ve OK’e tıklayalım.
Bir daha OK’e tıklayalım.
Finish’leyip, devam edelim.
Bu gerekli olan tool’ları da kurduktan sonra SDK Manager sayfasındaki Android SDK Location değerini kopyalayalm.
RapidEE tool aracını indirelim ve kuralım.
ANDROID_HOME değişkenini sistem değişkeni olarak ekleyelim ve değer olarak Android SDK lokasyonunu yapıştıralım. Zaten bir önceki adıma bunu kopyalayalım demiştim. ;) Hazır buraya gelmişken JAVA_HOME değişken değerini de kontrol edelim. O da JAVA JDK lokasyonunu göstermelidir. Aşağıdaki ok’lar anlattıklarımı gösteriyor.
Sonrasında aşağıdaki Android tool’larını ve JAVA JRE‘nin bin klasörünü (Java RunTime Environment) sistem’in path değişkenine ekleyelim.
Tüm bunları yaptıktan sonra bi kontrol edelim bakalım doğru mu yapmışız ayarları. Bir komut satırı ekranı açalım. Komut satırına “sdkmanager –list” yazalım ve enter’a basalım. Aşağıdaki gibi bir ekran bizi karşılarsa size puanım 9 kanka! :) Rapstar jurisi Rapçi Fuat’ı da analım. :)
“uiautomatorviewer” yazalım tıklayalım bakalım o da doğru çalışıyor mu?
Android Studio’da örnek bir proje oluşturalım. Sonrasında aşağıdaki gibi bir ekran göreceğiz. Aşağıda ok gösterilen link’e tıklayarak gerekli olan kütüphaneleri yükleyelim.
Finish’e tıklayalım.
Bu adımda bittikten sonra küçük, sevimli ve tatlış bir android ikonu göreceğiz. Ona da tıklayalım :) Buna tıkladığımızda bir sihir ortaya çıkacak (Magic Happens) ve Android Sanal Cihaz Yöneticisi açılacak.
Bir cihaz oluşturalım. “+ Create a Virtual Device” butonuna tıklayalım.
Sonra bir cihaz seçelim. Eğer PC’niz kuvvetli değilse eski model seçebilirsiniz. PC’nizi zorlamamış olursunuz. ;)
Bende test cihazı olarak Sony Xperia Android 7.0 olduğu için burada da Android 7.0’ı seçtim. Download’a tıklayalım.
Tüm kütüphaneleri indirdikten sonra Next’e tıklayalım.
Son olarak cihaz ayarlarına bakalım, cihazımıza benim güzel canım ciciş cihazım ismini verelim (şaka), cihaza bir istediğiniz bir isim verin ya da ne geldiyse öyle bırakın ve finish e tıklayın.
Sonra da oynat ikonuna tıklayalım.
Bu an keyifli! Android cihazın açıldığını göreceksiniz.
Şu ana kadar Android, JAVA ve sanal cihaz ayarlarını yaptık. Şimdi sırada Appium var. Şimdi onlar düşünsün. :)
Step-3: Appium Desktop Kurulumu ve Konfigürasyonu
Şu adrese gidelim: http://appium.io/downloads.html ve şuna tıklayalım “Appium-Desktop for OSX, Windows and Linux“.
Şuna tıklayalım “appium-desktop-Setup-1.3.1.exe” file. (Bu makaleyi 01.27.2018 tarihinde yazarken mevcut sürüm 1.3.1 idi.)
Kurulum dosyası indikten sonra dosyaya çift tıklayalım ve kurulumu başlatalım.
Kurulum da bittikten sonra appium ikonunu çift tıklayalım ve appium desktop’u açalım. Aşağıdaki ekranı göreceğiz.
Advanced bölümüne geçelim. Server adresini eğer emulator kullanacaksınız “127.0.0.1” olarak yazın gerçek cihaz kullanacaksanız “0.0.0.0” olarak yazın. Bir de “Allow Session Override” seçeneğini seçin. Bir session’da sorun olursa, diğer session onu ezebilsin.
Appium’a gerekli izinleri verelim.
Ve aşağıdaki ekranı gördüyseniz, appium server çalışıyor demektir.
Step-4: Android Cihaz Ayarları ve Test Öncesi Ayarlar
Sanal cihazın güvenlik bölümüne gidip bilinmeyen kaynaklara izin verelim.
Test için örnek bir .apk dosyası indirelim. Ben İsinOlsun’u seçtim.
apk dosyası indikten sonra sürükle-bırak yaparak sanal cihaza atalım. Otomatik olarak yükleme işlemi gerçekleşir.
Cihaz beni yalancı çıkarmazsa aşağıdaki gibi bir ekran göreceksiniz.
Evet, uygulamamız kuruldu.
Uygulama ikonuna tıklayınca uygulamanın açıldığını göreceksiniz.
Bize “app package info” ve “app activity info” bilgileri lazım. Bunları testi yazarken Desired Capabilities kısmında kullanacağız. Normalde aşağıdaki komut, o an açık olan ekrandaki aktivite ve paket bilgisini verir. Ama işin olsun için başlangıç aktivitesi splash ekranı. Onu yakalamak için APK info programını kullanacağız.
dumpsys window windows | grep -E 'mCurrentFocus'
APK Info uygulamasını da kuralım. Yine sürüklebırak yapacağız.
Uygulamayı açıp, İşinOlsun’u bulun ve uzunca basalım. Çıkan ekranda “Detailed Information” a basalım.
Aşağıdaki ekran gelecektir. İlk aktivite gördüğünüz gibi “com.isinolsun.app.activities.SplashActivity“. Aktiviye olarak bunu kullanacağız. Paket bilgisi olarak ise “com.isinolsun.com” kullanacağız. Bunu zaten yukarıdaki komutta da bulmuştuk.
Komut satırı açın ve “adb devices” yazıp, enter’a basalım. Bu komut bağlı cihazları gösterir. Buradan cihazın device id sini de görürüz. Bunları hep Desired Capabilites olarak kullanacağız.
Cihaz versiyonunu da ayarlara giderek kontrol edebilirsiniz.
Proje oluşturalım. IntelliJ’i açın, create a new project e basalım, Maven’ı seçelim ve ilerleyelim.
GroupId and ArtifactId için istediğiniz birşeyler yazabilirsiniz.
Projeye isim verelim.
“Enable Auto-Import”a tıklayalım.
mvnrepository.com sitesine gidelim ve TestNG, Appium, Selenium için en son dependency bilgilerini kopyalayıp, bunları pom.xml’e yapıştıralım.
pom.xml aşağıdaki gibi görünecektir.
Aşağıdaki gibi projemizde yeni bir JAVA class’ı oluşturalım.
Son kez cihaz bilgilerinizi kontrol edelim ve not edelim.
Appium server’a gidelim ve büyütece tıklayarak “Appium Inspector” u açalım.
Yukarıda hep kaydedelim, saklayalım dediğim bilgileri aşağıdaki gibi girelim.
Girişleri yaptıktan sonra bu değerleri save edelim. İleride de bunları artık kullanabiliriz.
“Start Session” a bastığınızda inspector açılacaktır.
Inspector o an cihazları ekrandaki elementleri size gösterir. Buradan ilgili element’in ID’sini ve ya XPath’ini bulabilirsiniz.
Tüm bu adımlardan sonra projeyi kodlayabiliriz.
Step-5: Emulator yerine Gerçek Cihaz Kullanın
Ben projeyi yapmaya başladığımda emulator de xpath’leri bulamadım. Ancak gerçek cihazda bunlar sorunsuz çalıştı. Normalde XPath kullanmamaya çalışsak ta bazen bunun zorunda kalabileceğimiz durumlar olabiliyor. Gerçek cihaz kullanmak adına aşağıdaki adımları yapmalıyız:
- Cihazını USB portu ile laptop’a ya da PC’nize bağlamalıyız.
- Settings > Developer ayarlarına gidelim ve USB Debugging (Hata Ayıklayıcı) özelliğini açalım.
- Komut satırında “adb devices” yazalım ve cihazınız ID sini öğrenip, Desired Capabilities de bunu kullanalım.
Step-6: Appium ve TestNG Kullanarak Mobile Test Otomasyon Projesi
Projenin test kodu aşağıdaki gibidir. Buradaki en kritik kısım DesiredCapabilities kısmı. Tüm ayarları buraya girmek gerekiyor. Geri kalan kısım Selenium ile kod yazmaya çok benziyor. Sadece mobile e özel element’ler, driver’lar vs. var. Projenin GitHub linki aşağıdaki gibidir. Bu proje başlangıç projesi olduğu için basit. Yaptığı işlemler; İşinOlsun uygulamasını açmak, Başlangıç ekranını atlamak, “İş Arıyorum”a tıklamak, çıkan işlerden ikincisini seçmek. Hepsi bu kadar basit çünkü bu ilk testimiz.
Project’s GitHub URL: https://github.com/swtestacademy/appium-sample-test
import io.appium.java_client.AppiumDriver; import io.appium.java_client.MobileElement; import io.appium.java_client.TouchAction; import io.appium.java_client.android.AndroidDriver; import org.openqa.selenium.By; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.net.MalformedURLException; import java.net.URL; public class ioSampleTest { public AppiumDriver<MobileElement> driver; public WebDriverWait wait; //Elements String secondNewJob = "//android.widget.FrameLayout[2]/android.widget.LinearLayout/" + "android.widget.RelativeLayout/android.widget.ImageView"; @BeforeMethod public void setup () throws MalformedURLException { DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability("deviceName", "Galaxy Nexut API 24"); caps.setCapability("udid", "WUJ01N4RQ3"); //DeviceId from "adb devices" command caps.setCapability("platformName", "Android"); caps.setCapability("platformVersion", "7.0"); caps.setCapability("skipUnlock","true"); caps.setCapability("appPackage", "com.isinolsun.app"); caps.setCapability("appActivity","com.isinolsun.app.activities.SplashActivity"); caps.setCapability("noReset","false"); driver = new AndroidDriver<MobileElement>(new URL("http://0.0.0.0:4723/wd/hub"),caps); wait = new WebDriverWait(driver, 10); } @Test public void basicTest () throws InterruptedException { //Click and pass Splash wait.until(ExpectedConditions.visibilityOfElementLocated (By.id("com.isinolsun.app:id/animation_view"))).click(); //Click and pass Tutorial wait.until(ExpectedConditions.visibilityOfElementLocated (By.id("com.isinolsun.app:id/btn_skip"))).click(); //Click to "Is Ariyorum" Button wait.until(ExpectedConditions.visibilityOfElementLocated (By.id("com.isinolsun.app:id/bluecollar_type_button"))).click(); //Notification Allow if (driver.findElements(By.id("com.android.packageinstaller:id/permission_allow_button")).size()>0) { driver.findElements(By.id("com.android.packageinstaller:id/permission_allow_button")).get(0).click(); } //Click second job wait.until(ExpectedConditions.visibilityOfElementLocated (By.xpath(secondNewJob))).click(); } @AfterMethod public void teardown(){ driver.quit(); } }
Bu makalede anlatacaklarım bu kadar. Gerçekten hazırlaması da uzun sürdü. Eğer size faydası olduysa, makaleyi beğendiyseniz, ne mutlu. Herkese çok teşekkürler arkadaşlar. Biraz espirili bir dille makaleyi yazmaya çalıştım. Ancak makale dili konusunda bazı değerli eleştiriler aldığım için biraz daha espiri seviyesini azalttım. :) Normal hayatta özelikle ekibimle daha keyifli muhabbetlerimiz ve akıl dondurucu espirilerimiz oluyor. :) Hayatta bir çok şey ciddi bari burada biraz eğlenelim. Nede olsa bizim mekan. ;) Eğer bir yerde takıldıysanız yorum yazın. Ya ben ya da üstadlardan birisi size yardımcı olur. Sevgiler, saygılar…
Onur Baskirt