零基础APP自动化测试教程(二)

时间:2022-12-19 05:58:11

本文接上篇-零基础APP自动化测试教程(一)
继安装使用之后,将讨论Appium的基础用法,希望读者读完此文能够利用Appium做些简单的自动化操作。

查看appPackage和appActivity

使用Appium对APP进行操作之前,首先我们得告诉它操作对象的package-Name和lanchable-Activity,即APP的入口,总不能为难人家让它猜你想执行的应用吧。

那么如何简单快捷的得到以上两条信息呢?可以通过aapt进行查询,aapt是Android自带的小工具,在SDK的build-tools目录下可以找到。如果安装时没有发现,也可以自行在网上搜索下载该工具。
该aapt指令如下,其中PackageName.apk是APP安装包的路径:
aapt dump badging PackageName.apk
在cmd中输入完成后,会反馈如下信息给我们,找到PackageName和launchable-activity
即可,这样我们就可以在Desired Capabilities中告诉Appium需要操作的APP信息了。

零基础APP自动化测试教程(二)

定位APP中的控件元素

找到APP的入口后,如何定位APP中的控件元素呢?即如何告诉Appium需要对哪个控件(如按钮、编辑框等)进行操作呢?别急,贴心的Appium为我们提供了众多的方法来解决这个问题。下面将介绍对原生应用元素的定位,WEB应用及混合应用暂时不做过多介绍。
这里需要分为两步走:
1.人工查找控件的id、name、ClassName、xpath、AccessibilityId等某条信息。这里可以利用Android自带的UIAutomatorViwer,该工具可以在SDK的tools目录下找到。如下图所示,在左边的UI界面中点击我们感兴趣的控件,该控件的详细信息就会显示在右边的列表框中,即包括了我们刚刚提到的控件信息。

零基础APP自动化测试教程(二)


2.调用函数来定位元素,这里将以Python为例进行说明,其他语言大同小异。
通过控件id定位元素,即上图中的resource-id
driver.find_element_by_id(id)driver.find_elements_by_id(id)
通过控件name定位元素,即上图中的text
driver.find_element_by_name(name)driver.find_elements_by_name(name)
通过控件ClassName定位元素,即上图中的class
driver.find_element_by_class_name(name)driver.find_elements_by_class_name(name)
通过控件AccessibilityId定位元素,即上图中的content-desc
driver.find_element_by_accessibility_id(id)driver.find_elements_by_accessibility_id(id)
通过控件xpath定位,其中xpath需要逐步拼凑出来,且此方法程序执行速度较慢,不到万不得已(如其他方法无法定位元素),不推荐使用之。
driver.find_element_by_xpath(xpath)driver.find_elements_by_xpath(xpath)
通过AndroidUiAutomator定位元素,通过Android UIAutomator类库去找元素
driver.find_element_by_android_uiautomator(uia_string)driver.find_elements_by_android_uiautomator(uia_string)
其中find_element是找寻某一个符合条件的元素,而find_elements是找寻所有符合条件的元素,并返回一个列表。

操作APP中的元素

通过前面两个步骤,好不容易告诉了Appium我们想要操作的元素后,那么问题来了,我们该如何操作已定位的元素呢?下面将会列举常用的操作。
点击控件:
driver.find_element_by_xxx(‘xxx’).click()
输入内容:
driver.find_element_by_xxx(‘xxx’). send_keys(‘xxx’)
从A点滑动至B点:
driver.swipe(start_x, start_y, end_x, end_y, duration)
清除输入的内容:
driver.find_element_by_xxx(‘xxx’). clear()
此元素用户是否可见:
driver.find_element_by_xxx('xxx').is_displayed()
此元素是否被选择:
driver.find_element_by_xxx('xxx').is_selected()
此元素是否可用:
driver.find_element_by_xxx('xxx').is_enabled()
获取元素左上角的坐标:
driver.find_element_by_xxx('xxx').location
当然,Appium不只可以完成上面的操作,它还包括了几乎所有的人为操作,如摇一摇、截图、缩放屏幕、打开通知栏等等。其他操作如果读者需要,可以查询对应语言依赖库中的源码得到,如Python的话就可以在webelement.py文件中找到。