移动端自动化测试工具 Appium 快速入门

举报
zuozewei 发表于 2021/10/30 17:07:49 2021/10/30
【摘要】 Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用。“移动原生应用”是指那些用 iOS SDK 或者 Android SDK 写的应用。所谓的“移动web 应用”是指使用移动浏览器访问的应用(Appium 支持 iOS 上的 Safari 和 Android 上的 Chrome)。

前言

今天简单介绍 移动端 UI 自动测试工具 Appium。

Appium 概述

Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用。“移动原生应用”是指那些用 iOS SDK 或者 Android SDK 写的应用。所谓的“移动web 应用”是指使用移动浏览器访问的应用(Appium 支持 iOS 上的 Safari 和 Android 上的 Chrome)。所谓的“混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。Appium 既能在 window 安装也能在 Mac 上安装,但是 window 上只能跑安卓设备,Mac 上能跑安卓与 IOS 两个设备。

Guihub:You can write tests with your favorite dev tools using any WebDriver-compatible language such as Java, Objective-C, JavaScript (Node), PHP, Python, Ruby, C#, Clojure, or Perl with the Selenium WebDriver API and language-specific client libraries.

源码地址:https://github.com/appium/appium

架构图

在这里插入图片描述

UI 自动化收益

任何 UI 自动化测试都不能完部替代人工测试,收益率高不高看部门怎么使用任何工具使用都是两方看怎么使用,如果有重复的工作每次需要人工去回归,建议使用自动化去回归,部门大家都用自动使用,会让大家的心信提高因为每次都机会使用自己写的脚本去验证自己重复工作。

脚本维护成本真的高吗?大家都说成本高,自己是否真的维护过,写过脚本?如果没有写过,没有维护过,没有发言权。只有自己用了才知道是否高。

环境安装

桌面版本安装

打开下面链接选择版本为exe进行下载:

在这里插入图片描述

下载安装后:

在这里插入图片描述

点击启动:
在这里插入图片描述

DOS命令安装


安装JDK

下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html

配置环境变量:

JAVA_HOME:

JAVA_HOME=C:\Program Files (x86)\Java\jdk1.8.0_181
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
CLASSPATH:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

Java 验证:

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) Client VM (build 25.181-b13, mixed mode, sharing)

安装SDK

下载地址:

配置环境变量:
image.png

安装验证环境命令:appium-doctor

执行命令验证是否成功:
在这里插入图片描述

Appium 版本检查与运行显示:
在这里插入图片描述

注意:如果上面环境没有配置,请自己搜索解决。

常用操作方法

  • 点击:click()
  • 输入:
sendKeys(CharSequence... keysToSend);
  • 清除:clear()

  • 长按:
    image.png

  • 滑动:

image.png

  • 上下左右滑动,最简单的下滑命令行:(uuid 表示手机设备号)
adb -s " + uuid + " shell input touchscreen swipe 400 800 400 400
     /**
         * 滑动方法
         *
         * @param driver
         * @param direction up、down、left、right
         */

        static Duration duration = Duration.ofSeconds(1);
        public static void swipe(AndroidDriver<AndroidElement> driver, String direction) {
            switch (direction.toLowerCase()) {
                case "up":
                    SwipeUp(driver);
                    break;
                case "down":
                    SwipeDown(driver);
                    break;
                case "left":
                    SwipeLeft(driver);
                    break;
                case "right":
                    SwipeRight(driver);
                    break;
                default:
                    System.out.println("方向参数不对,只能是up、down、left、right");
                    break;
            }
        }


        /**
         * 上滑
         *
         * @param driver
         */

        public static void SwipeUp(AndroidDriver<AndroidElement> driver) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Dimension size = driver.manage().window().getSize();
            int height = size.height;
            int width = size.width;
            new TouchAction(driver).longPress(PointOption.point(width / 2, 100))
                    .moveTo(PointOption.point(width / 2, height - 100)).release()
                    .perform();

        }


        /**
         * 下滑
         *
         * @param driver
         */

        public static void SwipeDown(AndroidDriver<AndroidElement> driver) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Dimension size = driver.manage().window().getSize();
            int height = size.height;
            int width = size.width;
            new TouchAction(driver)
                    .longPress(PointOption.point(width / 2, height - 100))
                    .moveTo(PointOption.point(width / 2, 100)).release().perform();
        }


        /**
         * 左滑
         *
         * @param driver
         */

        public static void SwipeLeft(AndroidDriver<AndroidElement> driver) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Dimension size = driver.manage().window().getSize();
            int height = size.height;
            int width = size.width;
            new TouchAction(driver)
                    .longPress(PointOption.point(width - 100, height / 2))
                    .moveTo(PointOption.point(100, height / 2)).release().perform();
        }


        /**
         * 右滑
         *
         * @param driver
         */

        public static void SwipeRight(AndroidDriver<AndroidElement> driver) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            Dimension size = driver.manage().window().getSize();
            int height = size.height;
            int width = size.width;
            new TouchAction(driver).longPress(PointOption.point(100, height / 2))
                    .moveTo(PointOption.point(width - 100, height / 2)).release()
                    .perform();
        }
  • 获取属性:getAttribute()
  • 获取文本:getText()
  • 获取资源:getPageSource()
  • 元素定位,两种方式。
    • 第一种使用 sdk 中的【uiautomatorviewer.bat】进行元素定位
      打开:
      在这里插入图片描述

双击 uiautomatorviewer.bat 即可弹出:

在这里插入图片描述

在操作上面之前需要链接手机或者链接模拟器并操作命令显示:adb devices
如果是模拟器需要先链接:adb connect 127.0.0.1:62001 这样再次链接.
在这里插入图片描述

模拟器链接显示:
在这里插入图片描述

点击 sdk 中的【uiautomatorviewer.bat】
在这里插入图片描述

链接成功显示:
在这里插入图片描述

鼠标点击某个控件就会提示该控件可操作的相应内容:
在这里插入图片描述

说明:

其实在做移动端自动化测试,定位方式很少基本就是 id/name/xpath/ 坐标等定位方式。

常见定位方式

ID 定位

在这里插入图片描述

 driver.findElement(By.id("xxxxxx")).click();

name定位

在这里插入图片描述

 driver.findElement(By.name("xxxxxx")).click();

xpath 定位

xpath定位是最常用的一种方式,可以去学习下 xpath 语法:

但是网上也有大牛做一个插件,做 ui 自动化可直接使用:- https://github.com/lazytestteam/lazyuiautomatorviewer

大家下载后替换 sdk 中的 uiautomatorviewer.jar 就可使用。

点击 uiautomatorviewer.bat 再次弹出如下:

在这里插入图片描述

driver.findElement(By.xpath("xxxxxx")).click();

定位 h5 页面

启动:
在这里插入图片描述

点击:
在这里插入图片描述

再弹出对话中输入:
在这里插入图片描述

在下面选项框中输入:
需要获取 appPackage 与 appActivity

使用命令:

aapt d badging pinduoduov4.76.0_downcc.com.apk |findstr "package launchable-activity"

获取结果:
在这里插入图片描述

{  "platformName": "Android",  "deviceName": "127.0.0.1:62001",  "appPackage": "com.xunmeng.pinduoduo",  "appActivity": "com.xunmeng.pinduoduo.ui.activity.MainFrameActivity"}

点击启动:

在这里插入图片描述

在这里插入图片描述

显示正在启动:
在这里插入图片描述

启动完毕显示:
在这里插入图片描述

启动完毕,剩下的就是常用与其他操作一样:

在这里插入图片描述

运行效果

在这里插入图片描述

log 弹出:

在这里插入图片描述

工程目录

在这里插入图片描述

注意:
如果在启动的时候有问题,自己微调下,大概大家只是看看而已,有问题到群里问或者联系@就行会单独指导怎么使用。

总结

使用 maven 建立项目,通过 tesng 做测试类与传参,以上简单介绍了环境部署,定位方式,启动类,报告类等方法。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。