UI自动化之java+appium环境安装了数次,但是仍然记不清具体步骤,总结了下,一是因为不懂原理,二是因为不知道安装的东西对UI自动化的实际意义,现总结一下,相信以后不会再忘记
一、框架原理
二、环境安装
1)安装jdk---配置环境变量---查询jdk版本:java -version
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html
目的:java开发包,包含了java运行环境和java工具,用于开发java程序,自动化代码(也可以安装python等)
2)安装sdk--配置环境变量(需要配置platform-tools和tools)--查询adb版本:adb version
下载地址:http://sdk.android-studio.org/
目的:提供安卓开发工具,操作安卓系统,比如:adb命令
3)安装夜神模拟器(安装成功后,设置--高级设置--设置成手机模式)
下载地址:https://www.yeshen.com/
目的:模拟手机
注意:安装夜神模拟器后,安装目录下自带了adb安装,可能跟已安装的sdk版本产生冲突
1.进入夜神模拟器安装目录下,查询自带adb版本
2.将Android SDK的adb.exe拷贝至夜神bin目录下,同时需要替换掉夜神bin目录下的nox_adb.exe和adb.exe
3.再次查询夜神中自带adb版本
4)(如果appium没有安装node,需要自行另外安装)安装nodejs--配置环境变量--查询node版本:node -v
下载地址:https://nodejs.org/en/download/
目的:Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。Appium是使用nodejs实现的,所以node是解释器
5)安装appium--配置appium环境变量--配置node环境变量--查询appium-doctor与node -v正常
下载地址:https://bitbucket.org/appium/appium.app/downloads/
目的:驱动手机的服务器
appium安装完成后会自动安装node,目录在..\Appium\node_modules\.bin(node也可以自行安装)
6)TestNG安装
目的:测试框架(注解,支持多线程测试等)
安装步骤略
7)元素定位器
Android SDK自带的元素定位器在tools目录下uiautomatorviewer.bat/monitor.bat
三、代码构建
使用java语言,maven项目管理、testng单元测试框架、夜神模拟器模拟手机,代码实现如下:
实例:操作的是meizu的一款计算器app
pom文件,注意依赖了testng,appium
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springmaven</groupId>
<artifactId>ui</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--单元测试相关包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.0.0-beta1</version>
</dependency>
<!--UI自动化相关包-->
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>5.0.3</version>
</dependency>
<!--spring相关包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>1.4.2.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.mashape.unirest</groupId>
<artifactId>unirest-java</artifactId>
<version>1.4.9</version>
</dependency>
</dependencies>
<!-- 添加主程序入口,否则打包后,执行会找不到主清单-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
实现代码之前先准备好所需参数
1)platformName:平台名称Andriod或者IOS
2)devicesName:设备码,使用adb devices进行查询
3)platformVersion:andriod版本号,手机或者模拟器设置中进行查看
4)appPackage、appActivity:需要测试的app包名等
通过 adb shell dumpsys window w |findstr \/ |findstr name= 命令进行获取
图略,夜神模拟器和真机请求一致
代码:
package UI;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import io.appium.java_client.android.AndroidDriver;
public class admin {
AndroidDriver driver;
/**
* app打开操作,使用testng中BeforeTest标记,优先于test执行
*/
@BeforeTest
public void setUp() throws Exception {
String platformName = "Android";
String deviceName = "127.0.0.1:62001";
String platformVersion = "4.4.2";
String appPackage = "com.meizu.flyme.calculator";
String appActivity = "com.meizu.flyme.calculator.Calculator";
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //设置所需要的浏览器
//支持中文
capabilities.setCapability("unicodeKeyboard", "True");
capabilities.setCapability("resetKeyboard", "True");
//不每次运行都安装app
capabilities.setCapability("noReset", "true");
//设备设置
capabilities.setCapability("platformName", platformName); //平台名称,分为Android和IOS
capabilities.setCapability("deviceName", deviceName); //设备码,adb devices进行查询
capabilities.setCapability("platformVersion", platformVersion); //andriod版本号,手机或者模拟器设置中进行查看
capabilities.setCapability("appPackage", appPackage); //app包名,通过adb shell dumpsys window w |findstr \/ |findstr name= 获取
capabilities.setCapability("appActivity", appActivity);
//初始化
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);//虚拟机默认地址
}
/**
* app关闭操作,使用testng中AfterTest标记,在test后面执行
*/
@AfterTest
public void tearDown() {
driver.quit();
}
/**
* app内容操作
*/
@Test
public void test() {
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); //隐式等待30s
driver.findElement(By.xpath("//android.widget.TextView[@text='人民币']")).click();
driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS); //隐式等待30s
driver.findElement(By.xpath("//android.widget.TextView[@text='美元']")).click();
driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS); //隐式等待30s
driver.findElement(By.xpath("//android.widget.TextView[@text='港币']")).click();
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); //隐式等待30s
}
}
四、运行测试
1)打开appium客户端
2)打开测试机
夜神模拟器:打开夜神模拟器客户端,且打开cmd输入:adb connect 127.0.0.1:62001
真机(手机):需要打开开发者模式,连接usb
3)运行
使用testng插件直接运行@标记过的部分,依次运行