一、Desired Capabilities
Desired Capabilities 在启动 session 的时候是必须提供的。
Desired Capabilities 本质上是以 key value 字典的方式存放,客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。它告诉 appium Server这样一些事情:
本次测试是启动浏览器还是启动移动设备。
是启动Andorid还是启动iOS。
启动Android时,app的package是什么。
启动Android时,app的activity是什么。
…
固定写法参考如下:
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4.2'
desired_caps['deviceName'] = '127.0.0.1:62001'
desired_caps['appPackage'] = 'com.tencent.mobileqq'
desired_caps['appActivity'] = 'com.tencent.mobileqq.activity.SplashActivity' # android 独有
desired_caps["unicodeKeyboard"] = "True"
desired_caps["resetKeyboard"] = "True"
desired_caps["noReset"] = "True"
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
deviceName:启动哪种设备,是真机还是模拟器?iPhone Simulator,iPad Simulator,iPhone Retina 4-inch,Android Emulator,Galaxy S4…
automationName:使用哪种自动化引擎。appium(默认)还是Selendroid。
platformName:使用哪种移动平台。iOS, Android, orFirefoxOS。
platformVersion:指定平台的系统版本。例如指的Android平台,版本为5.1。
appActivity:待测试的app的Activity名字。比如MainActivity、.Settings。注意,原生app的话要在activity前加个”.“。
appPackage:待测试的app的Java package。比如com.example.android.myApp, com.android.settings。
- noReset:Don't reset app state before this session
- resetKeyboard:Reset keyboard to its original state, after running Unicode tests with
unicodeKeyboard
capability. Ignored if used alone. Defaultfalse
- unicodeKeyboard:Enable Unicode input, default
false
/127.0.0.1:4723 : appium-server 地址
更多的参数配置:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
知识拓展:定位appPackage与appActivity 方法
SDK中下载最新的build-tools,通过aapt dump badging xxx.apk命令来查appPackage与appActivity。
CMD下输入adb logcat | findstr /i Start,强制停止被测试软件,再次打开,观察logcat。(手动打开需要操作的appPackage ,从logcat 最下面开始找)
二、定位控件
appium 通过 uiautomatorviewer.bat 工具来查看控件的属性。该工具位于 Android SDK 的 /tools/bin/ 目录下。
1、id 定位
driver.find_element_by_id('resource-id')
# ID定位于selenium不同,可能存在重复的问题。
# appium-desktop抓取元素时如果出现有id,则可以直接用。