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插件直接運行@標記過的部分,依次運行