UI自動化-java+appium+testng框架搭建

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安裝

下載地址:http://beust.com/eclipse

目的:測試框架(註解,支持多線程測試等)

安裝步驟略

 

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
    }

}

 

?mid=&wid=51824&sid=&tid=8731&rid=LOADED&custom1=mp.csdn.net&custom2=%2Fpostedit%2F90081210&t=1574229447703?mid=&wid=51824&sid=&tid=8731&rid=FINISHED&custom1=mp.csdn.net&t=1574229447703四、運行測試

1)打開appium客戶端

2)打開測試機

夜神模擬器:打開夜神模擬器客戶端,且打開cmd輸入:adb connect 127.0.0.1:62001

真機(手機):需要打開開發者模式,連接usb

3)運行

使用testng插件直接運行@標記過的部分,依次運行

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章