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插件直接运行@标记过的部分,依次运行

 

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值