自動化測試程式 appium 如何執行在實體手機Android?
這篇文章主要說明當Appium手機自動化測試完成之後,如何執行在Android 虛擬環境上與實體手機上,
其實程式只有一個字須修改,另外環境的部分與手機的設定如何做基本的錯誤排除也做一些基本的說明。
最後,附上一個完整的小算盤Native App 測試程式說明如何用Java 實作。
Android 實體手機執行的程式修改?
Appium 完成的自動化測試程式,如果要執行在實體手機上,程式只有一行(應該是一個字)需要修改
“Android emulator” => “Android device”
- 執行在虛擬環境: cap.setCapability(MobileCapabilityType.DEVICE_NAME,”Android emulator“);
- 執行在實體手機:cap.setCapability(MobileCapabilityType.DEVICE_NAME,”Android device“);
錯誤狀況排除
除錯,執行前確定手機的連接狀況,例如這個例子有連接一個實體手機與虛擬機。
$adb devices
4d00b3de5ea0a0bc device
emulator-5554 device
如果沒有顯示已連結的手機,可以執行下列指令重新啟動:
$adb kill-server
$adb start-server
開發者模式
另外,檢查手機是否已將開發者模式啟動。
- Stock Android: Settings > About phone > Build number
- Samsung Galaxy S5: Settings > About device > Build number
- LG G3: Settings > About phone > Software information > Build number
- HTC One (M8): Settings > About > Software information > More > Build number
Build Number 連續按七次之後,就會進入開發者模式。
將 USB debugging 模式 enable。
範例程式
這個範例程式執行後,
- 1. 會啟動計算機,
- 2. 按下 5 + 4 =
- 3. 驗證結果是否為 9
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
package myAppium;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.remote.MobilePlatform;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class TestCalculator {
AndroidDriver driver;
@BeforeClass
public void setUp() throws MalformedURLException{
DesiredCapabilities caps = new DesiredCapabilities();
//caps.setCapability(MobileCapabilityType.PLATFORM_VERSION,"19");
//caps.setCapability("avd","Nexus_One21");// Mention the created AVD name
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
//If running on emulator
//caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Android emulator");
// if running on physical device
caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Android device");
caps.setCapability(MobileCapabilityType.APP_PACKAGE,"com.android.calculator2");
caps.setCapability(MobileCapabilityType.APP_ACTIVITY,"com.android.calculator2.Calculator");
driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
// For iOS
// caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
// caps.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone 5");
// driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
}
@Test
public void testExample(){
WebElement five=driver.findElement(By.name("5"));
five.click();
WebElement plus=driver.findElement(By.name("+"));
plus.click();
WebElement four=driver.findElement(By.name("4"));
four.click();
WebElement equalTo=driver.findElementByAccessibilityId("equals");
equalTo.click();
WebElement results=driver.findElement(By.id("com.android.calculator2:id/formula"));
System.out.println("result=" + results.getText());
Assert.assertEquals("9", results.getText());
}
@AfterClass
public void tearDown(){
driver.closeApp();
}
}
[/pastacode]