Android CI and Appium

22
Copyright © SELA Software & Education Labs, Ltd. | 14-18 Baruch Hirsch St., Bnei Brak 51202, Israel | www.selagroup.com Mobile CI & Appium Oren Ashkenazy Mail: [email protected] Blog: http://blogs.microsoft.co.il/oren 604/

Transcript of Android CI and Appium

Page 1: Android CI and Appium

Copyright © SELA Software & Education Labs, Ltd. | 14-18 Baruch Hirsch St., Bnei Brak 51202, Israel | www.selagroup.com

Mobile CI & Appium

Oren AshkenazyMail: [email protected]: http://blogs.microsoft.co.il/oren604/

Page 2: Android CI and Appium

What is Xamarin?What is Continues Integration?Getting your APK for google storeDeploy APK (Emulator)TFS Build Template IntegrationWhy Appium?Finding the objectsAppium Project DemoWebDriver Common CommandsAndroid Emulators

Agenda

Page 3: Android CI and Appium

70%-90% Shared Code

Xamarin Intro

Page 4: Android CI and Appium

Continuous Integration

Page 5: Android CI and Appium

Create a Private Key (Java SDK):$ keytool -genkey -v -keystore <filename>.keystore -alias <key-name> -keyalg RSA -keysize 2048 -validity 10000

Compile The Project:Msbuild.exe MyAwesomeApp.sln /t:PackageForAndroid

Sign the APK using (Java SDK): $ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore xample.keystore MyAwesomeApp.apk publishingdoc

Zipalign the APK (Android SDK Build Tools):

zipalign –MyAwesomeApp.apk MyAwesomeApp-Aligned.apk

Store Ready – The Commands

Page 6: Android CI and Appium

Uninstall Previous Installation: adb <machineName> uninstall <name of package/application>

Install New Package: adb <machineName> install MyAwesomeApp-Aligned.apk

*adb = Android Debug Bridge

ADB Deploy & Install

Page 7: Android CI and Appium

TFS Build Template

Page 8: Android CI and Appium

Web/Native/Hybrid AppsSelenium Based FrameworkCross Platform (IOS/Android/WP)Open SourceEasy Setup & Configuration

Why Appium?

Page 9: Android CI and Appium

Appium Architecture Web Driver Script

Appium Server (Node.JS)

Automation commands are sent via JSON 1

2Appium Sever invoke commands on devices

3

Appium Server logs the result to console4

Client sends back notification to the server

4.2 +

Page 10: Android CI and Appium

System RequirementsJAVA SDKAndroid SDKAppium ServerAndroid Device (Real/Emulator) with Android 4.2+ADB Interface Drivers

Page 11: Android CI and Appium

Find Android ObjectsUIAutomation Viewer (Under Android SDK Tools)

Scans UI objectsGet Xpath hierarchy

Page 12: Android CI and Appium

Demo

UIAutomationViewer

Page 13: Android CI and Appium

Setting The Test ProjectRequired Packages:

MS Unit Test or NunitAppium WebDriverSelenium WebDriver

Page 14: Android CI and Appium

Demo

Hello Appium

Page 15: Android CI and Appium

Test Setup – here we’ll setup the application and driver variables

[TestInitialize] public void TestInit() { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.SetCapability("device", "Android"); capabilities.SetCapability(CapabilityType.Platform, "Windows"); capabilities.SetCapability("deviceName", "H30-U10"); capabilities.SetCapability("platformName", "Android"); capabilities.SetCapability("platformVersion", "5.02"); capabilities.SetCapability("appPackage", "com.appName"); capabilities.SetCapability("appActivity", "com.appName.Main"); driver = new AndroidDriver(new Uri("http://127.0.0.1:4723/wd/hub"), capabilities,

TimeSpan.FromSeconds(180)); }

TestInitialize

Page 16: Android CI and Appium

Test Setup – here we’ll setup the application and driver variables

[TestInitialize] public void TestInit() { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.SetCapability("device", "Android"); capabilities.SetCapability(CapabilityType.Platform, "Windows"); capabilities.SetCapability("deviceName", "H30-U10"); capabilities.SetCapability("platformName", "Android"); capabilities.SetCapability("platformVersion", "5.02"); capabilities.SetCapability("appPackage", "com.appName"); // capabilities.SetCapability("appActivity", "com.appName.Main");

capabilities.SetCapability("app", @“C:\Apps\com.mobile.AppName-Signed.apk"); driver = new AndroidDriver(new Uri("http://127.0.0.1:4723/wd/hub"), capabilities,

TimeSpan.FromSeconds(180)); }

TestInitialize – app install

Page 17: Android CI and Appium

var tabs = driver.FindElements(By.Id("com.whatsapp:id/tab"));

foreach (var tab in tabs) { if (tab.Text == "CHATS") { tab.Click(); } }

driver.FindElement(By.Id("com.whatsapp:id/menuitem_new_conversation")).Click(); var contacts = driver.FindElements(By.Id("com.whatsapp:id/contactpicker_row_name")); driver.FindElement(By.Id("android:id/search_src_text")).SendKeys(“Contact"); driver.FindElement(By.Id("com.whatsapp:id/contactpicker_row_content")).Click(); driver.FindElement(By.Id("com.whatsapp:id/entry")).SendKeys("Hello"); driver.FindElement(By.Id("com.whatsapp:id/send")).Click();

TestMethod

Page 18: Android CI and Appium

WebDriver Basic MethodsActions

Clear();Click();FindElement(string);Array/List FindElements(string,string…);SendKeys(string);Submit();

ExploreGetAttribute();GetCSSValue();Enable();Selected();Size();Text();

Page 19: Android CI and Appium

The need for speed …We need fast emulators!!

Page 20: Android CI and Appium

AVD Configuration

Page 21: Android CI and Appium

Android Emulators

Page 22: Android CI and Appium

Questions