Appium自动化测试

相关链接

官网:http://appium.io/

使用Java编写API文档:http://appium.github.io/java-client/

学习文档:https://www.cnblogs.com/fnng/p/4540731.html

技术展示

安装(仅Windows)

若电脑上未安装node.js,请先安装node.js
  • 下载安装包,下载地址为:https://nodejs.org/en/download/
  • 选择对应的版本,下载后,打开安装,一直下一步即可(可修改安装目录)
  • 安装完成后,检测下path环境变量是否配置了Node.js,打开Windows命令提示符,输入命令"path",输出如下结果:


    image
Android的SDK安装

相信Android开发人员都已安装好Android的SDK了,但Android的环境变量你设置了么?我本机的目录为:E:\Android\Sdk。

下面设置环境变量:“我的电脑” 右键菜单 ---> 属性 ---> 高级 ---> 环境变量 ---> 系统变量 ---> 新建:

变量名 变量值
ANDROID_HOME E:\Android\Sdk

找到 path 变量名—> “编辑” 添加:

变量名 变量值
PATH ;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;
安装 Appium Server

可以在Appium官方网站上下载操作系统相应的Appium版本,下载地址:https://bitbucket.org/appium/appium.app/downloads/,
若无法下载,也可使用提供的百度网盘下载地址:

链接: https://pan.baidu.com/s/1UdbSk02TzUS8BQKzOQFYfw 提取码: zus2

下载的 AppiumForWindows.zip 进行解压,点击 appium-installer.exe 进行安装。

[图片上传失败...(image-ef357a-1566473978926)].png)

根据提示,一步一步进行安装,这里不再啰嗦。最终在会桌面上生成 Appium图标 , 双击启动,appium server 界面如下:

[图片上传失败...(image-777f1-1566473978926)].png)

最后,打开Windows命令提示符,输入“appium-doctor”命令,如果出现以下提示,说明你Appium所需要的各项环境都已准备完成。

[图片上传失败...(image-506b25-1566473978926)].png)

注:如果提示:“appium-doctor”不是内部或外部命令,找到Appium的安装目录,例如:

E:\Appium\node_modules\.bin

添加到环境变量path下面(参考Java环境的设置)

Appium-desktop
Appium-desktop是什么

Appium-Server有一两年没有更新了。Windows版在 2015 年底止步于的 AppiumForWindows_1_4_16_1.zip。

于是,新的工具 Appium-desktop 来了! 它来继续 Appium-Server的使命,当然, Appium-Server当前仍然是可用的。

注:Appium-Server最高支持模拟器Android版本为6.0,推荐使用 Appium-desktop。

下载与安装

下载地址:https://github.com/appium/appium-desktop/releases
根据自己的平台选择相关的包进行下载。本文以 Windows 为例,选择 Appium-windows-1.12.1.exe 文件进行下载,下载完成后,双击 exe 文件,等待安装完成即可。

启动运行

双击打开桌面上紫色的 appium 图标

[图片上传失败...(image-a9b10d-1566473978926)].png)

点击 “启动服务器 V 1.12.1” 按钮启动服务

[图片上传失败...(image-77e1cf-1566473978926)].png)

现在可以启动移动设备(真机或模拟器),编写Appium自动化测试脚本,可以通过 Appium-desktop 来运行测试。

连接真机测试

主要讲解如何连接真机进行测试。

  • 手机通过USB连接电脑,选择传输文件(MTP)
    [图片上传失败...(image-974f88-1566473978926)].png)
  • 打开开发者选项,允许USB调试,允许USB安装
    [图片上传失败...(image-fa3c7-1566473978926)].png)
  • 打开Windows命令提示符,输入"adb devices",可弹出电脑是否连接真机,获取到真机的devices
    [图片上传失败...(image-f26060-1566473978926)].png)

注:如果提示:“adb”不是内部或外部命令,找到adb的安装目录,例如:

E:\Android\Sdk\platform-tools

添加到环境变量path下面(参考Java环境的设置)

java-client安装与测试

此次主要讲解的是使用 Java 语言编写 appium 自动化测试脚本。

前提条件
  • 安装 Java 环境
  • 安装 IntelliJ IDEA 或 Eclipse (下面讲解的是Eclipse)
  • 安装 Maven
Maven 安装 Java-client
  • 启动Eclipse,创建Maven项目
    [图片上传失败...(image-327473-1566473978926)].png)
  • 导入 appium 的 Java-client
    [图片上传失败...(image-170867-1566473978926)].png)
  • 输入项目名称,id即可下一步
  • 最后,pom.xml中的信息应如下:
    [图片上传失败...(image-1de956-1566473978926)].png)

注:截止至4月26日为止,最新版本为7.0.0,最新版本号,可在github Java-client开源项目上查看。

开始测试

编写第一个Appium测试程序

启动APP
package com.test;

import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;

public class TestLanuch {

    private static String path = "E:\\Epoint\\epoint\\component\\FramePlugins\\workplatform\\release\\workplatform-release.apk";

    public static void main(String[] args) throws MalformedURLException, InterruptedException {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "8ea41751");
        capabilities.setCapability("automationName", "uiautomator2");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "8.0.0");
        capabilities.setCapability("autoGrantPermissions", true);
        capabilities.setCapability("app", path);

        AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

        driver.quit();
    }
}

  • deviceName:启动哪种设备,是真机还是模拟器,若是真机,填写"adb devices"获取的设备号
  • automationName:使用哪种自动化引擎
  • platformName:使用哪种移动平台
  • platformVersion:指定平台的系统版本。例如指的Android平台,版本为8.0.0
  • autoGrantPermissions:是否自动允许权限
  • app:打包后,apk在本地的路径
  • appPackage:应用的包名
  • appActivity:应用启动页

注:若手机上本无此APP,使用参数app,不使用appPackage和appActivity,若手机上有此APP,使用appPackage和appActivity,不使用参数app。

登录APP
public static void testLogin(long time) {
    if (timer == null) {
        timer = new Timer();
    }
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            if (driver.getPageSource().contains("com.epoint.workplatform:id/iv_cancel")) {
                System.out.println("APP需要更新");
                System.out.println("取消更新");
                driver.findElement(By.id("com.epoint.workplatform:id/iv_cancel")).click();
                if (timer != null) {
                    timer.cancel();
                    timer = null;
                }
                testLogin(2000);
            } else if (driver.currentActivity().contains("MainActivity")) {
                System.out.println("用户已登录过");
                System.out.println(driver.getPageSource());
            } else if (driver.currentActivity().contains("launcher.Launcher")) {
                System.out.println("返回桌面");
            } else if (driver.currentActivity().contains("GrantPermissionsActivity")) {
                System.out.println("初次登录");
                System.out.println("授予权限");
                driver.findElement(By.id("android:id/button1")).click();
                if (timer != null) {
                    timer.cancel();
                    timer = null;
                }
                testLogin(5000);
            } else if (driver.currentActivity().contains("LoginActivity")) {
                driver.findElement(By.id("com.epoint.workplatform:id/et_loginid")).sendKeys("dywei");
                driver.findElement(By.id("com.epoint.workplatform:id/et_pwd")).sendKeys("11111");
                driver.findElement(By.id("com.epoint.workplatform:id/btn_login")).click();
                System.out.println("登录成功");
            } else {
                System.out.println("启动页时间太长");
                System.out.println(driver.getPageSource());
            }
        }
    }, time);
}

技术总结

测试脚本的编写并不局限于Java,支持多种语言,且可以实现一套测试脚本的编写完成Android端和iOS端的自动化测试,有兴趣的可以研究研究。

你可能感兴趣的:(Appium自动化测试)