紧接上一篇文章,我们把录制的脚本包装成一个JUnit的测试类,并作了以下修改。

  • 增加了从远程URL安装App的代码(也可指定本地的appPath);
  • 去除原脚本中点击主屏幕图标启动App的代码,取代为使用driver.startActivity来启动App;
  • 增加了验证图片的JUnit断言;
  • 测试完成后,自动卸载App;
  • 其他一些Appium有关的参数设置。

阅读和尝试运行本文中的例子,需要一些Java基础,如搭建基础开发环境、使用Maven下载Java依赖包、JUnit单元测试框架等,这些我们可在后续的编程语言的课程中给大家介绍。

  1. 官网下载并安装IntelliJ Idea社区版(Community)的Java IDE;
  2. 执行以下命令,从Gitee代码仓库获取演示项目的源代码;

    git clone https://gitee.com/ngtesting/ci_test_appium_simple.git
  3. 在Idea中打开项目,找到src/test/java目录下的AppiumTest.java文件;
  4. 在项目根目录中,执行mvn compile命令,下载Appium、JUnit等依赖项Jar包;
  5. 右击AppiumTest.java测试类文件,选择Debug菜单项,执行JUnit单元测试。

这里给出完整的Java代码文件,其他语言的例子,请参照Appium官方示例

package com.deeptest.sample.appium.android;

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.Activity;
import io.appium.java_client.android.AndroidDriver;
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class AppiumTest {
    static final Logger logger = LoggerFactory.getLogger(AppiumAndroidTest.class);

    // 初始化比变量
    String appPath = "https://dl.cnezsoft.com/testing/res/app/android/eyes-android-hello-world.apk";
    String appPackage = "com.applitools.helloworld.android";
    String appActivity = ".MainActivity";
    AndroidDriver driver;

    @Before
    public void setUp() throws Exception {
        // 配置测试能力
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("deviceName", "xiaomi");
        capabilities.setCapability("automationName", "Uiautomator2");
        capabilities.setCapability("autoGrantPermissions", true);
        capabilities.setCapability("noReset", true);

        // 创建AndroidDriver实例,链接到Appium Server
        driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

        // 安装测试App
        driver.installApp(appPath);

        // 暂停5秒
        Thread.sleep(5000);

        // 启动安装的App
        Activity activity = new Activity(appPackage, appActivity);
        driver.startActivity(activity);
    }

    @After
    public void tearDown() {
        if (driver != null) {
            // 卸载App
            driver.removeApp(appPackage);

            // 退出Driver
            driver.quit();
        }
    }

    @Test()
    public void test() {
        // 使用Id选择器,查找指定的控件。
        MobileElement el2 = (MobileElement) driver.findElementById(appPackage + ":id/random_number_check_box");
        // 点击控件
        el2.click();

        // 使用Id选择器,查找指定的控件。
        MobileElement el3 = (MobileElement) driver.findElementById(appPackage + ":id/click_me_btn");
        // 点击控件
        el3.click();

        // 使用Id选择器,查找指定的图片。
        WebElement image = driver.findElement(By.id(appPackage + ":id/image"));
        // 验图片存在,断言输出。
        Assert.assertTrue("图片显示正常", image.isDisplayed());
    }
}

专题目录


陈哥聊测试
158 声望3.3k 粉丝

资深敏捷测试顾问,国内知名项目管理软件禅道团队成员。