一启动 Android 模拟器(Genymotion 俗称世界上最快的模拟器, 可自行百度安装)
二启动 Appium(Appium 环境安装可自行百度)
三安装应用到 Genymotion 上, 如下图我安装一个计算机的小应用, 包名为 CalcTest.apk
安装步骤:(基于 Android SDK 已经配置好了环境变量, 可自行百度)
1Win + R
2CMD
3adb devices -- 检查操作, 列出存在的设置名称
4adb install F:\Appium\CalcTest.apk -- 正式安装 App
如下图: 192.168.229.101:5555 就是我刚开启的 Genymotion 虚拟机
四安装成功之后回到 Genymotiong 可以看到已经安装成功了
打开该应用, 可以看到实际是个简单的计算器
五打开 Eclipse 创建 Maven 项目并使用 uiautomatorviewer 工具 (Android SDK 工具包自带的) 进行基本元素定位操作
1 打开 Android SDK 可找到路径: android-sdks\tools 如下(获取 App 包名可反编译: aapt dump badging apk 路径)
2 打开 uiautomatorviewr.bat
3 编写基本代码如下仅供参考:
- package appium_demo;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.concurrent.TimeUnit;
- import org.openqa.selenium.By;
- import org.openqa.selenium.remote.DesiredCapabilities;
- import io.appium.java_client.android.AndroidDriver;
- /** * @author 李小卫 E-mail:yyymlxw@163.com @date 创建时间 2018 年 2 月 11 日上午 10:10:02 */
- public class calc_demo {
- public static void main(String[] args) throws MalformedURLException {
- AndroidDriver driver;
- DesiredCapabilities des = new DesiredCapabilities();
- // des.setCapability("automationName", "Appium");//Selendroid // 自动化的模式选择
- // des.setCapability("app", "C:\\software\\CalcTest.apk");// 配置待测试的 apk 的路径
- // des.setCapability("browserName", "chrome"); //h5
- des.setCapability("platformName", "Android"); // 平台名称
- des.setCapability("platformVersion", "4.4"); // 手机操作系统版本
- des.setCapability("udid", "192.168.229.101:5555"); // 连接的物理设备的唯一设备标识
- des.setCapability("deviceName", "S4"); // 使用的手机类型或模拟器类型 UDID
- des.setCapability("appPackage", "com.sky.jisuanji"); //App 安装后的包名, 注意与原来的 CalcTest.apk 不一样
- des.setCapability("appActivity", ".JisuanjizixieActivity"); //app 测试人员常常要获取 activity, 进行相关测试, 后续会讲到
- des.setCapability("unicodeKeyboard", "True"); // 支持中文输入
- des.setCapability("resetKeyboard", "True"); // 支持中文输入
- des.setCapability("newCommandTimeout", "10"); // 没有新命令时的超时时间设置
- des.setCapability("nosign", "True"); // 跳过检查和对应用进行 debug 签名的步骤
- driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), des); // 虚拟机默认地址
- driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // 设置超时等待时间, 默认 250ms
- driver.findElement(By.id("com.android.calculator2:id/digit1")).click(); // 定位 1
- driver.findElement(By.id("com.android.calculator2:id/plus")).click(); // 定位 +
- driver.findElement(By.id("com.android.calculator2:id/digit6")).click(); // 定位 6
- driver.findElement(By.id("com.android.calculator2:id/equal")).click(); // 定位 =
- }
- }
六使用 TestNG 编写正式测试用例并开始执行测试了
- package appium_operate;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.concurrent.TimeUnit;
- import org.openqa.selenium.By;
- import org.openqa.selenium.remote.DesiredCapabilities;
- import org.testng.Assert;
- import org.testng.annotations.BeforeTest;
- import org.testng.annotations.DataProvider;
- import org.testng.annotations.Test;
- import io.appium.java_client.android.AndroidDriver;
- /** * @author 李小卫 E-mail:yyymlxw@163.com @date 创建时间 2018 年 2 月 11 日上午 10:30:02 */
- public class CalcTest {
- AndroidDriver driver;@BeforeTest public void setUp() throws MalformedURLException {
- DesiredCapabilities des = new DesiredCapabilities();
- // des.setCapability("app", "c:\\");
- des.setCapability("platformName", "Android");
- des.setCapability("platformVersion", "4.4");
- des.setCapability("udid", "192.168.43.101:5555");
- des.setCapability("deviceName", "s4");
- des.setCapability("appPackage", "com.android.calculator2"); //com.android.contacts
- des.setCapability("appActivity", ".Calculator"); //.activities.PeopleActivity
- des.setCapability("unicodeKeyboard", "True");
- des.setCapability("resetKeyboard", "True");
- des.setCapability("newCommandTimeout", "15");
- des.setCapability("nosign", "True");
- driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), des);
- driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
- }@Test(enabled = false) public void add() {
- driver.findElement(By.xpath("//android.widget.Button[@text=5]")).click();
- driver.findElement(By.xpath("//android.widget.Button[@text=+]")).click();
- driver.findElement(By.xpath("//android.widget.Button[@text=8]")).click();
- driver.findElement(By.xpath("//android.widget.Button[@text==]")).click();
- String value = driver.findElement(By.xpath("//android.widget.EditText[@class=android.widget.EditText]")).getAttribute("text");
- Assert.assertEquals(value, "13");
- }@Test(enabled = false) public void sub() {
- driver.findElement(By.xpath("//android.widget.Button[@text=1]")).click();
- driver.findElement(By.xpath("//android.widget.Button[@text=0]")).click();
- driver.findElement(By.xpath("//android.widget.Button[@text=-]")).click();
- driver.findElement(By.xpath("//android.widget.Button[@text=8]")).click();
- driver.findElement(By.xpath("//android.widget.Button[@text==]")).click();
- String value = driver.findElement(By.xpath("//android.widget.EditText[@class=android.widget.EditText]")).getAttribute("text");
- Assert.assertEquals(value, "2");
- }@Test(enabled = false) public void mul() {
- driver.findElement(By.xpath("//android.widget.Button[@text=5]")).click();
- driver.findElement(By.xpath("//android.widget.Button[@text=×]")).click();
- driver.findElement(By.xpath("//android.widget.Button[@text=8]")).click();
- driver.findElement(By.xpath("//android.widget.Button[@text==]")).click();
- String value = driver.findElement(By.xpath("//android.widget.EditText[@class=android.widget.EditText]")).getAttribute("text");
- Assert.assertEquals(value, "40");
- }@DataProvider(name = "testdata") public Object[][] getData() {
- return new Object[][] {
- {
- "20",
- "80",
- "100",
- "+"
- },
- {
- "90",
- "3",
- "270",
- "×"
- },
- {
- "6",
- "2",
- "3",
- "÷"
- }
- };
- }@Test(dataProvider = "testdata") public void calcTestcase(String num1, String num2, String result, String calcType) {
- for (char num: num1.toCharArray()) {
- driver.findElement(By.xpath("//android.widget.Button[@text=" + String.valueOf(num) + "]")).click();
- }
- driver.findElement(By.xpath("//android.widget.Button[@text=" + calcType + "]")).click();
- for (char num: num2.toCharArray()) {
- driver.findElement(By.xpath("//android.widget.Button[@text=" + String.valueOf(num) + "]")).click();
- }
- driver.findElement(By.xpath("//android.widget.Button[@text==]")).click();
- String value = driver.findElement(By.xpath("//android.widget.EditText[@class=android.widget.EditText]")).getAttribute("text");
- Assert.assertEquals(value, result);
- }
- }
来源: http://www.bubuko.com/infodetail-2495146.html