Appium 使用技巧,助你快速入门移动端自动化!

最近在研究移动端的自动化,appium 是个不错的选择,优势就不必多讲了,直入主题,方便大家获取自己想要的知识,如下。
第一步就是各种配置的键值怎么获取。
类似这个

capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName", "Android Emulator");

一、启动项获取

1、设备 id 和 Android 版本号

image.png

获取系统版本:adb shell getprop ro.build.version.release

获取系统 API 版本:adb shell getprop ro.build.version.sdk

2、获取 apk 相关信息

包名、启动 Activity 什么的,可以使用 aapt 工具,要自己下载 aapt.exe 和配置环境变量

3、代码实现

大概如下

{
"platformName": "Android",
"deviceName": "DUR8JNOF9TFMYLQC",
"appPackage": "com.yao.club",
"appActivity": "com.yao.club.LoginActivity",
"platformVersion": "6.0"
}

注意要加这个属性才能支持中文

  "unicodeKeyboard": true,  "resetKeyboard": true

二、使用 desktop

1.录制脚本

这真的是一个很实用的功能。他似乎解决了我们一个大问题,那就是该使用哪个 API 的问题以及脚本的编写规范的问题。对于初步入坑的小伙伴来说是一个很好的参考。脚本录制功能就是那个眼睛图标,如下图:

image.png

点击该按钮以后如下图:

image.png

然后就可以在左边随便对 App 进行操作了,此处我进行的操作有:点击输入框,点击 Alert,滑动滑动条,滑动屏幕,点击软键盘并输入文本(这里我选择是 Python 语言)。这时候 Inspector 生成的脚本是非常简单的,只是对你操作的步骤进行记录,还不能执行,这段脚本如下:

TouchAction(driver).tap([(167, 73)])
TouchAction(driver).tap([(81, 300)])
TouchAction(driver).tap([(303, 414)])
el1 = driver.find_element_by_accessibility_id("IntegerA")
el1.click()
el1.send_keys("Hello")
TouchAction(driver)
.press({x: 198, y: 393})
.moveTo({x: 50: y: 0})
.release()
TouchAction(driver)
.press({x: 335, y: 264})
.moveTo({x: -183: y: -3})
.release()
TouchAction(driver).tap([(191, 498)])
TouchAction(driver).tap([(357, 698)])

这只是 Inspector 默认生成的极简脚本,善良的 Inspectory 为我们提供了一个功能那就是将极简脚本变成可执行脚本,操作如下图:

image.png

生成可执行脚本

image.png

2.功能介绍

image.png

1)滑动屏幕:滑动屏幕

2)坐标点击:可以通过 tap 进行点击(非原生 native 不可使用)

3)刷新页面:实时获取页面元素

4)搜索元素:判断页面元素是否存在,或者调试搜索条件及页面元素有几个等等

右击,点击 inspect element

image.png

可以看到当前页面的 XML

image.png

3.入门指南

AppiumDesktop 真的是一个好东西:

1、首先他可以定为元素信息(这里所说的元素是指 App 上的空间),这一点它和 Android 自带的 uiautomatorviewer 一样,但是 AppiumDesktop 可以定位 iOS 和 Android 两个操作系统的 App;

2、还有一点他可以录制脚本。这真的就很牛逼了。脚本语言还可以自己选择,比如我选择使用 Python 语言,那么录制出的脚本就是 Python 语言的。但是对于这一点上官网说了,这个功能只做学习的工具,不能够作为代码生成器(In sum, it is a learning tool, not a robust code generation feature, and should be used as such.png)。

image.png

上图就是 AppiumDesktop Inspactor 启动以后的样子,接下来咱们就讲讲怎么用这个神秘的 AppiumDesktop。

什么是 AppiumDesktop?

有人说 AppiumDesktop 是 Appium 新版的叫法,也就是在 Xcode8 之前和之后的叫法。因为 Xcode8 之前自带的自动化测试框架叫做 uiAutomation,Xcode8 之后完全弃用了这一框架,开始使用 XCUITest,这导致 Appium 大修其下层机制,以使用 Facebook 的 WebDriverAgen,也就是从这个时候在用 Appium 测试 iOS 应用的时候必须在 iPhone 手机上首先安装一个应用叫:WebDriverAgentRunner。也就是通过这个应用来启动我们被测应用。
所以 AppiumDesktop 不是 Appium。

Appium 的图标是这样的:

image.png

AppiumDesktop 的图标是这样的:

image.png

AppiumDesktop 启动以后的页面是这样的:

image.png

这里是以 iPhone 7 Plus 模拟器为例进行讲解:

platformName:因为用的是 iOS 手机

platformVersion:和实际模拟器版本一致,我的模拟器是 10.3 版本

deviceName:我是用的 iPhone 7 Plus,你也可以填写 iPhone Simulator,会启动一个默认的(iPhone 6)模拟器

app:所要安装的 app 这里安装的是官方提供的一个 Demo。当然也可以安装自己待测 app,但是就不一定是 text 了(可能是 filepath)

noReset:是一个 bool 值,选 TRUE。

如果想要使用真机,必须再加一个字段 udid,是 text 类型。

通过终端获取已连接电脑的 iPhone 的 udid 方法:

idevice_id -l

配置好这些信息以后点击 Save As...进行保存,保存以后以备日后使用(如果需要),这些信息被保存在“Saved Capability Sets”里。然后点击 Start Session 就可以启动
Inspector 了,这个过程比较慢,需要稍等几分钟。然后就会出现文章第一个图所示的窗口。

定位元素信息

写 Appium 脚本的最重要的一个信息是定位元素,获取元素的 ID 或者 xpath 等等类似的信息。

只需要点击 Inspector 最左边一栏的 Select 按钮,然后再去点击所要获取信息的元素即可,当元素突出显示时,其信息将显示在 Inspector 右侧的详细视图中。有些是用
accessibility id 定位,有些是 xpath 定位或者其他的定位信息,但是在 iOS 应用上 Appium 推荐使用 accessibility id 来定位一个元素信息。

在 Inspector 窗口的中间是您的应用程序的层次结构,表示为 XML。

滑动页面(元素)

现在可以定位当前页面的元素了,但是怎么滑动到下一个页面或者怎么滑动页面上的滑动条(slider)呢?

选中 Swipe。模拟在手机上的操作手势,从起点到终点各点击一下,就实现了滑动。

点击某一个元素

如果我们想要点击某一个元素进行下一步操作,比如在输入框内输入文本或者弹出一个 alert 该怎么操作呢?

选中 Tap。然后再去点击 textfield 或者 alert 我们就可以进行下一个操作了。如果想要定位 alert 上的元素信息,那就在 alert 弹出的时候在切换到 Select,然后点击想要定位的
元素就行了。

16 回帖
请输入回帖内容 ...
  • star

    棒棒哒 牛气😘 😘

  • huahua

    😑 我要喊人来盖楼了!写的非常的好!

  • superman

    真的嘛,感谢华华大佬😽 😽

  • superman

    谢谢星星

  • xiaoxiao

    感谢分享,就是截图太模糊了

  • superman

    QQ 截图确实模糊了点,下次注意

  • 1647172431

    顶👍

  • asd123456

    写的好清晰,深度好文

  • superman

    给个赞,谢谢

  • superman

    给个赞,谢谢啊

  • superman

    给个赞,谢谢啊!

  • xuanxuan

    666

  • Xiao

    666

  • lynnout

    请问 driver 是怎么获得的?

  • superman

    你录制个脚本看下就明白了

  • 1571488995339

    image.png
    录制好的代码导入 eclipse 中,client 和 junit 都导入了,但是不识别 TouchAction 函数类型,再次导包后又不识别 top,求解

请输入回帖内容 ...