紧接上一篇文章,我们把录制的脚本包装成一个JUnit的测试类,并作了以下修改。
- 增加了从远程URL安装App的代码(也可指定本地的appPath);
- 去除原脚本中点击主屏幕图标启动App的代码,取代为使用driver.startActivity来启动App;
- 增加了验证图片的JUnit断言;
- 测试完成后,自动卸载App;
- 其他一些Appium有关的参数设置。
阅读和尝试运行本文中的例子,需要一些Java基础,如搭建基础开发环境、使用Maven下载Java依赖包、JUnit单元测试框架等,这些我们可在后续的编程语言的课程中给大家介绍。
- 从官网下载并安装IntelliJ Idea社区版(Community)的Java IDE;
执行以下命令,从Gitee代码仓库获取演示项目的源代码;
git clone https://gitee.com/ngtesting/ci_test_appium_simple.git
- 在Idea中打开项目,找到src/test/java目录下的AppiumTest.java文件;
- 在项目根目录中,执行mvn compile命令,下载Appium、JUnit等依赖项Jar包;
- 右击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());
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。