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/
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
70%-90% Shared Code
Xamarin Intro
Continuous Integration
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
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
TFS Build Template
Web/Native/Hybrid AppsSelenium Based FrameworkCross Platform (IOS/Android/WP)Open SourceEasy Setup & Configuration
Why 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 +
System RequirementsJAVA SDKAndroid SDKAppium ServerAndroid Device (Real/Emulator) with Android 4.2+ADB Interface Drivers
Find Android ObjectsUIAutomation Viewer (Under Android SDK Tools)
Scans UI objectsGet Xpath hierarchy
Demo
UIAutomationViewer
Setting The Test ProjectRequired Packages:
MS Unit Test or NunitAppium WebDriverSelenium WebDriver
Demo
Hello 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
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
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
WebDriver Basic MethodsActions
Clear();Click();FindElement(string);Array/List FindElements(string,string…);SendKeys(string);Submit();
ExploreGetAttribute();GetCSSValue();Enable();Selected();Size();Text();
The need for speed …We need fast emulators!!
AVD Configuration
Android Emulators
Questions
Top Related