, . Appium Essentials. :
:
- Android
- Android
- Chrome, Gmail
- iOS. Body Mass Index (BMI)
- iOS
- iOS. -
, , :
Android |
iOS |
Java ( 7 ) |
Mac OS ( 10.7 ) |
Android SDK API, 17 |
Xcode ( 4.6.3 ; 5.1) |
Android |
iOS [ ] |
Chrome |
iOS |
Eclipse [ Idea] |
SafariLauncher |
TestNG |
ios-webkit-debug-proxy |
Appium |
Java ( 7 ) |
Appium ( Java) |
Eclipse [ Idea] |
Selenium Server Java- WebDriver |
TestNG |
Apk Info app |
Selenium Server Java- WebDriver |
|
Appium |
|
Appium ( Java) |
, Android USB.
, ,
adb devices
Android-. , adb-:
adb kill-server
adb start-server
Desired capabilities Android
1 , . , .
, :
import java.io.File;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.remote.MobileCapabilityType;
DC:
DesiredCapabilities caps = new DesiredCapabilities();
File app=new File("path of the apk");// apk
caps.setCapability(MobileCapabilityType.APP,app);// ,
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");// Android
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");// OS
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Moto X");//
caps.setCapability(MobileCapabilityType.APP_PACKAGE, " ( , apk info app)");
caps.setCapability(MobileCapabilityType.APP_ACTIVITY, ", ( apk info app)");
Desired capabilities Android -
-, , , : APP, APP PACKAGE APP ACTIVITY, .
, :
import java.io.File;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.remote.MobileCapabilityType;
DC:
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");// Android
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");// OS
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Moto X");//
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome"); // Chrome
, .
:
import io.appium.java_client.android.AndroidDriver;
import java.net.URL;
:
AndroidDriver driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);// , Appium-
Android.
provisional profile, SafariLauncher ios-webkit-debug-proxy
iOS, .
Provisional profile
, iOS.
iOS Developer Program
,
, .
:
-
- iOS Mac
- Xcode ( 6) Window -> Devices

- Show Provisional Profiles

- +, , Done

SafariLauncher ios-webkit-debug-proxy
SafariLauncher Safari . SafariLauncher iOS, Safari:
-
- Xcode SafariLauncher
- build
- SafariLauncher Appium.dmg; :
- Appium.dmg
- Show Package Contents Contents/Resources/node_modules/appium/build/SafariLauncher
- SafariLauncher.zip
- submodules/SafariLauncher/build/Release-iphoneos SafariLauncher .
- submodules SafariLauncher.zip
ios-webkit-debug-proxy Mac, web-view. , brew
brew install ios-webkit-debug-proxy
.
Desired capabilities iOS
1 , . , .
, :
import java.io.File;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.remote.MobileCapabilityType;
DC:
DesiredCapabilities caps = new DesiredCapabilities();
File app=new File("path of the .app");
caps.setCapability(MobileCapabilityType.APP,app);
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");//
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPad");//
caps.setCapability("udid","Id ");//UDID
Desired capabilities iOS -
. : APP, APP PACKAGE APP ACTIVITY. .
, :
import java.io.File;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.remote.MobileCapabilityType;
DC:
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
caps.setCapability(MobileCapabilityType.DEVICE_NAME,"iPad");
caps.setCapability("udid","UDID ");
caps.setCapability(MobileCapabilityType.BROWSER_NAME,"Safari"); // Safari
, .
:
import io.appium.java_client.ios.IOSDriver;
import java.net.URL;
:
IOSDriver driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"),caps); //, Appium-
iOS.
TestNG :
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class TestAppIication {
IOSDriver driver;
@BeforeClass //
public void setUp() throws MalformedURLException{
DesiredCapabilities caps = new DesiredCapabilities();
File app=new File("path of the .app");
caps.setCapability(MobileCapabilityType.APP,app);
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
caps.setCapability(MobileCapabilityType.DEVICE_NAME,"iPad");
caps.setCapability("udid","UDID ");
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari");// , -
driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@Test
public void testExample(){
//
}
@AfterClass
public void tearDown(){
driver.closeApp();
//driver.quit(); // , -
}
}
Android
Android, , ( ), avd.
Android:
- desired capabilities, dialer
caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.android.dialer");
caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.android.dialer.DialtactsActivity");
- dial pad. AccessibityId
WebElement dialPad= driver.findElementByAccessibilityId("dial pad"));
dialPad.click();
- . , 0-9 name
for(int n=0;n<10;n++){
driver.findElement(By.name(""+n+"")).click();
}
- , ,
- . AccessibilityId:
WebElement dial= driver.findElementByAccessibilityId("dial"));
- :
dial.click();
- , TestNG, :
public class TestAppIication {
AndroidDriver driver;
@BeforeClass
public void setUp() throws MalformedURLException{
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");//I am using Moto X as Real Device
caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.android.dialer");
caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.android.dialer.DailtactsActivity");
driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@Test
public void testExample(){
WebElement dialPad=driver.findElementByAccessibilityId("dial pad");
dialPad.click();
for(int n=0;n<10;n++){
driver.findElement(By.name(""+n+"")).click();
}
WebElement dial=driver.findElementByAccessibilityId("dial");
dial.click();
}
@AfterClass
public void tearDown(){
driver.closeApp();
}
}
iOS
BMI

. , :
- desired capabilities,
File app=new File("/Users/mhans/appium/ios/BmiCalc.app");//You can change it with your app address
caps.setCapability(MobileCapabilityType.APP,app);//To set the app path
- . Xpath
WebElement height=driver.findElement(By.xpath("(//UIATextField)[2]"));
WebElement weight=driver.findElement(By.xpath("(//UIATextField)[4]"));
- calculate. name:
WebElement calculateBMI=driver.findElement(By.name("Calculate BMI"));
-
height.sendKeys("1.82");
-
weight.sendKeys("75");
-
calculateBMI.click();
- , TestNG, :
public class TestAppIication {
IOSDriver driver;
@BeforeClass
public void setUp() throws MalformedURLException{
File app=new File("/Users/mhans/appium/ios/BmiCalc.app");//You can change it with your app address
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(MobileCapabilityType.APP,app);
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
caps.setCapability(MobileCapabilityType.DEVICE_NAME,"iPad");
caps.setCapability("udid","Real Device Id ");
driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@Test
public void testExample(){
WebElement height=driver.findElement(By.xpath("(//UIATextField)[2]"));
height.sendKeys("1.82");
WebElement weight=driver.findElement(By.xpath("(//UIATextField)[4]"));
weight.sendKeys("75");
WebElement calculateBMI=driver.findElement(By.name("Calculate BMI"));
calculateBMI.click();
}
@AfterClass
public void tearDown(){
driver.closeApp();
}
}
Android
, Gmail. , , Chrome , , / SignIn
- desired capabilities, Chrome
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
-
driver.get("https://www.gmail.com");
- username. name
WebElement username=driver.findElement(By.name("Email"));
-
username.sendKeys("test");
- , password. name
WebElement password=driver.findElement(By.name("Passwd"));
-
password.sendKeys("test");
- SignIn. name
WebElement signIn=driver.findElement(By.name("signIn"));
-
signIn.click();
- , TestNG, :
public class TestAppIication {
AndroidDriver driver;
@BeforeClass
public void setUp() throws MalformedURLException {
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");
driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@Test
public void testExample(){
driver.get("https://www.gmail.com");
WebElement username=driver.findElement(By.name("Email"));
username.sendKeys("test");
WebElement password=driver.findElement(By.name("Passwd"));
password.sendKeys("test");
WebElement signIn=driver.findElement(By.name("signIn"));
signIn.click();
}
@AfterClass
public void tearDown(){
driver.quit();
}
}
iOS
, Google. , , , , Search
- desired capabilities, Safari
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari");
-
driver.get("https://www.google.com");
- searchBox. name
WebElement searchBox=driver.findElement(By.name("q"));
-
searchBox.sendKeys("Appium for mobile automation");
- , :
ios_webkit_debug_proxy -c 2e5n6f615z66e98c1d07d22ee09658130d345443:27753 d
2e5n6f615z66e98c1d07d22ee09658130d345443 UDID . 27753
- , Web Inspector (Settings | Safari | Advanced) SafariLauncher
- , TestNG, :
public class TestAppIication {
IOSDriver driver;
@BeforeClass
public void setUp() throws MalformedURLException{
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(MobileCapabilityType.BROWSER_NAME, "Safari");
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPad");
caps.setCapability("udid","Real Device Identifier");
driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@Test
public void testExample(){
driver.get("https://www.google.com");
WebElement searchBox=driver.findElement(By.name("q"));
searchBox.sendKeys("Appium for mobile automation");
}
@AfterClass
public void tearDown(){
driver.quit();
}
}
Android
,
Hybridtestapp
, ,
. Hybridtestapp, .

:
- desired capabilities,
File app=new File("C:\\Appium_test\\HybridtestApp.apk");// (On window platform)
caps.setCapability(MobileCapabilityType.APP,app);
caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.example.hybridtestapp");
caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.example.hybridtestapp.MainActivity");
- , WebView
Set contexts = driver.getContextHandles();
for (String context : contexts) {
System.out.println(context); //
}
driver.context("WEBVIEW_com.example.hybridtestapp");
driver.context((String) contextNames.toArray()[1]);
- WebView, First Name. name
WebElement firstName=driver.findElement(By.name("fname"));
firstName.sendKeys("test");
- Last Name
WebElement lastName=driver.findElement(By.name("lname"));
lastName.sendKeys("test");
-
WebElement age=driver.findElement(By.name("age"));
age.sendKeys("26");
WebElement username=driver.findElement(By.name("username"));
username.sendKeys("appiumTester");
WebElement password=driver.findElement(By.id("psw"));
password.sendKeys("appium@123");
- Register
WebElement registerButton=driver.findElement(By.id("register"));
registerButton.click();
- , TestNG, :
public class TestAppIication {
AndroidDriver driver;
@BeforeClass
public void setUp() throws MalformedURLException{
File app=new File("C:\\Appium_test\\HybridtestApp.apk");
caps.setCapability(MobileCapabilityType.APP,app);
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "Moto X");
caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium");// Selendroid android 4.4
caps.setCapability(MobileCapabilityType.APP_PACKAGE, "com.example.hybridtestapp");
caps.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.example.hybridtestapp.MainActivity");
driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@Test
public void testExample(){
Set contexts = driver.getContextHandles();
for (String context : contexts) {
System.out.println(context);
}
driver.context((String) contexts.toArray()[1]);
WebElement firstName=driver.findElement(By.name("fname"));
firstName.sendKeys("test");
WebElement lastName=driver.findElement(By.name("lname"));
lastName.sendKeys("test");
WebElement age=driver.findElement(By.name("age"));
age.sendKeys("26");
WebElement username=driver.findElement(By.name("username"));
username.sendKeys("appiumTester");
WebElement password=driver.findElement(By.id("psw"));
password.sendKeys("appium@123");
WebElement registerButton=driver.findElement(By.id("register"));
registerButton.click();
}
@AfterClass
public void tearDown(){
driver.closeApp();
}
}
iOS
WebViewApp

:
- desired capabilities,
File app=new File("/Users/mhans/appium/ios/WebViewApp.app");
caps.setCapability(MobileCapabilityType.APP,app);
-
WebElement editBox=driver.findElement(By.className("UIATextField"));
editBox.sendKeys("www.google.com");
- Go
WebElement goButton=driver.findElement(By.name("Go"));
goButton.click();
- , WebView
Set contexts = driver.getContextHandles();
for (String context : contexts) {
System.out.println(context);
}
driver.context("WEBVIEW_com.example.testapp");
driver.context((String) contextNames.toArray()[1]);
- . google. Images:
WebElement images=driver.findElement(By.linkText("Images"));
images.click();
- ,
ios_webkit_debug_proxy -c :27753 d
27753
- , TestNG, :
public class TestAppIication {
IOSDriver driver;
@BeforeClass
public void setUp() throws MalformedURLException{
DesiredCapabilities caps = new DesiredCapabilities();
File app=new File("/Users/mhans/appium/ios/WebViewApp.app");
caps.setCapability(MobileCapabilityType.APP,app);
caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "8.1");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPad");
caps.setCapability("udid","Real Device Identifier");
driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@Test
public void testExample(){
WebElement editBox=driver.findElement(By.className("UIATextField"));
editBox.sendKeys("https://www.google.com");
WebElement goButton=driver.findElement(By.name("Go"));
goButton.click();
Set contexts = driver.getContextHandles();
for (String context : contexts) {
System.out.println(context);
}
driver.context((String) contexts.toArray()[1]);
WebElement images=driver.findElement(By.linkText("Images"));
images.click();
}
@AfterClass
public void tearDown(){
driver.closeApp();
}
}
. , , , , .
https://habrahabr.ru/post/333546/