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端的自动化测试,有兴趣的可以研究研究。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容