13.appium基础

基于 Python 语言的 appium API 的使用。

1. Desired Capabilities

appium 在启动 session 时,需要提供 Desired Capabilities。Desired Capabilities 本质上是字典对象,由客户端生成并发送给服务器(appium Desktop),告诉服务器 App 运行的环境。

Desired Capabilities 的基本配置:

from appium import webdriver

# 定义 Android 运行环境
desired_caps = {
   
    'deviceName': 'Android Emulator',
    'automationName': 'appium',
    'platformName': 'Android',
    'platformVersion': '7.0',
    'appPackage': 'com.android.calculator2',
    'appActivity': '.Calculator',
    'noReset': True,
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_capabilities=desired_caps)
...

各配置含义如下:

  • deviceName:启动的设备、真机或模拟器,如 iPhone Simulator、Android Emulator、Galaxy S4 等。
  • automationName:使用的自动化引擎,如 appium(默认)或 Selendroid(兼容 Android API 17 以下)。
  • platformName:使用的移动平台,如 iOS 或 Android。
  • platformVersion:指定平台的系统版本,如 Android 平台,版本为 7.0。
  • appPackage:被测试 App 的 Package 名,如 com.android.settings 等。
  • appActivity:被测试 App 的 Activity 名,如 Calculator、MainActivity、.Settings 等。
  • noReset:在会话前重置应用状态。当设置为 True 时,会跳过安装指引;默认为 false。

更多配置说明可参考官方文档:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

获取 appPackage 和 appActivity 的方法
appium 在启动 App 时必须要设置 appPackage 和 appActivity 两个参数。最简单的方式是直接询问开发人员~还可以通过以下两种方式得到这两个参数。

a.通过 adb 工具抓取日志进行分析
命令行窗口运行命令:adb logcat > D:/log.txt,将 adb 抓取的日志写入指定文件中。
在 Android 模拟器设备打开要测试的 App,做一些操作,命令行窗口快捷键 Ctrl+c 结束日志的捕捉。
打开 log.txt 文件,搜索 Displayed 关键字,查找 App 的 Package 和 Activity。此处 Package 是 com.android.calculator2,Activity 是 .Calculator
在这里插入图片描述
b. 通过 appt 查看信息
aapt 即 Android Asset Packaging Tool,在 SDK 的 build-tools 目录下。需要将该目录加入到系统变量 Path 中。该工具既可以查看、创建、更新 zip 格式的文档附件(zip、jar、apk),也可以将资源文件编译成二进制文件。
命令行窗口执行命令:aapt dump badging D:\ChromeDownload\qqlite_4.0.2.1075_537067759.apk
此处 Package 是 com.tencent.qqlite,Activity 是 com.tencent.mobileqq.activity.SplashActivity
在这里插入图片描述
在这里插入图片描述

2. 控件定位

对 UI 自动化测试来说,关键就是定位元素或控件。

appium 继承了 Selenium 的定位方法,并在其基础上进行了扩展,以适应移动端控件的定位。

appium 扩展的定位方法如下:

  • ios_uiautomation:find_element_by_ios_uiautomation()
  • ios_predicate:ind_element_by_ios_predicate()
  • ios_class_chain:find_element_by_ios_class_chain()
  • android_uiautomator:find_element_by_android_uiautomator()
  • android_viewtag:find_element_by_android_viewtag()
  • android_datamatcher:find_element_by_android_data_matcher()
  • accessibility_id:find_element_by_accessibility_id()
  • image:find_element_by_image()
  • custom:find_element_by_custom()

可以借助 Android SDK 自带的 UI Automator Viewer 工具对 Android 设备式模拟器中的控件进行定位。该工具在 SDK安装目录下的 tools/bin 下,直接双击 uiautomatorviewer.bat 文件启动,或者将该目录加入到系统变量 Path 中,命令行执行命令 uiautomatorviewer 启动。

UI Automator Viewer 界面,单击 Device Screenshot 按钮之后,进入 Android 设备或模拟器的当前界面。UI Automator Viewer 捕获到该界面,并显示相应信息。
在这里插入图片描述

(1)id 定位

id 定位是使用控件的 resource-id 进行定位的。当 Android 设备或模拟器的 Android 系统 API 版本低于 18 (也就是 Android 系统低于4.3)时,UI Automator Viewer 工具无法获取对应的 resource-id。
在这里插入图片描述
resource-id 使用方法:

driver.find_element_by_id("com.android.calculator2:id/op_mul")

(2)Class Name 定位

Class Name 定位是使用控件的 class 属性进行定位的。
在这里插入图片描述
计算器界面上的所有按钮的 class 属性都为 android.widget.Button。属性的重复性很高。我们可以先定位一组控件,再进一步筛选。除非其他方法都无法定位到控件,否则不考虑使用这种方法,效率低。

from appium import webdriver

desired_caps = {
   
    'deviceName': 'Android Emulator',
    'automationName': 'appium',
    'platformName': 'Android',
    'platformVersion': '7.0',
    
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值