安装Appium Server
使用淘宝的cnpm安装appium是最稳定快速的方法:
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g appium
PS. -g是全局安装,安装到/usr/local/lib/node_modules, 我自己的电脑上是安装到里/usr/local/bin下
全局安装的appium只要运行appium
安装特定版本的appium:cnpm install appium@1.11 , 要运行特定版本,输入该版本的目录下的main.js来运行: ./node_modules/appium/build/lib/main.js
Selector Strategies
参考 https://appium.io/docs/en/commands/element/find-elements/index.html#selector-strategies
在Appium Desktop client里可以先测试定位符是否正确
# 一般用到id/xpath/accessibilityid, 不推荐class
- find_element_by_id是指resource_id(resource_id是真正的元素属性,id是appium提供的一个定位方式的名字。ios里面对应的是name属性)
- find_element_by_accessibility_id 是指content-desc (webview)
用xpath定位的时候,没有足够的属性来定位,可以用instance
//*[@text='基金'] //*[@text='基金' and @instance='4'] //*[@resource-id='com.xueqiu.android:id/buttons_container’]//*[@text='基金'] //*[contains(@resource-id, 'buttons_container’)]//*[@text='基金']
webview
- 不需要css定位:直接使用accessibility-id或者xpath定位就可以直接定位到
- 需要css定位以及其他的js执行功能:contexts api
模拟器上的测试
- webview控件会被映射为原生控件,类型为View,其中的文本内容会变成content-desc或者text
- 6.0会把webview中的控件变成一个带有content-desc属性的View控件
- 9.0会把webview中的控件变成一个带有text属性的View控件
真机
- 如果app未开启webview的调试属性,是无法分析内部的控件的
- 个别手机可能会默认打开此属性,所以默认也能访问到h5内部的控件
- 如果还是访问不到,检查webview的调试属性是否开启,此时需要让研发配合打开webview的调试属性
webview调试
>>adb -s (设备udid) shell cat /proc/net/unix | grep webview
如果只有一个设备 adb shell cat /proc/net/unix | grep webview
0000000000000000: 00000002 00000000 00010000 0001 01 2545836 @webview_devtools_remote_32073
0000000000000000: 00000002 00000000 00010000 0001 01 9455057 @webview_devtools_remote_25324
- 看哪个进程开了webview组件
>>adb -s (设备udid) shell ps 32073 25324
- 重定向
>>adb -s (设备udid) forward tcp:7777 localabstract:webview_devtools_remote_32073
>>adb forward --list
- Chrome devtools远程调试协议,参考 https://chromedevtools.github.io/devtools-protocol/
>>curl http://127.0.0.1:7777/json/version
{ "Android-Package": "com.xueqiu.android", "Browser": "Chrome/69.0.3497.100", "Protocol-Version": "1.3", "User-Agent": "Mozilla/5.0 (Linux; Android 8.1.0; Android SDK built for x86 Build/OSM1.180201.031; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36", "V8-Version": "6.9.427.23", "WebKit-Version": "537.36 (@8920e690dd011895672947112477d10d5c8afb09)", "webSocketDebuggerUrl": "ws://127.0.0.1:9222/devtools/browser" }
>>http://127.0.0.1:9222/json/list
[ { "description": "{\"attached\":true,\"empty\":false,\"height\":2540,\"screenX\":0,\"screenY\":252,\"visible\":true,\"width\":1440}", "devtoolsFrontendUrl": "http://chrome-devtools-frontend.appspot.com/serve_rev/@8920e690dd011895672947112477d10d5c8afb09/inspector.html?ws=127.0.0.1:7777/devtools/page/F960D549EC118B7A5A86D94B82DDEBDC", "id": "F960D549EC118B7A5A86D94B82DDEBDC", "title": "平安证券 极速开户", "type": "page", "url": "https://broker.xueqiu.com/open/pazq-v4?snb_from=tab&undefined", "webSocketDebuggerUrl": "ws://127.0.0.1:7777/devtools/page/F960D549EC118B7A5A86D94B82DDEBDC" }, { "description": "{\"attached\":true,\"empty\":false,\"height\":2371,\"screenX\":0,\"screenY\":253,\"visible\":true,\"width\":1440}", "devtoolsFrontendUrl": "http://chrome-devtools-frontend.appspot.com/serve_rev/@8920e690dd011895672947112477d10d5c8afb09/inspector.html?ws=127.0.0.1:7777/devtools/page/9AA8CBCF929D7B79A426E55958F49285", "id": "9AA8CBCF929D7B79A426E55958F49285", "title": "实盘交易", "type": "page", "url": "file:///data/user/0/com.xueqiu.android/files/com.xueqiu.android.h5/modules/broker/tradeHome.html", "webSocketDebuggerUrl": "ws://127.0.0.1:7777/devtools/page/9AA8CBCF929D7B79A426E55958F49285" } ]
- 使用Chrome62调试android webview,打开chrome://inspect/#devices,点击inspect。可与你分析元素定位,分析网络性能
>>adb forward --remove-all
有些时候设备连接久了,找不到连接的设备或者模拟器,使用adb kill -server,在adb devices查找,就可以找到
清理数据:adb shell pm clear com.xueqiu.android
from 赫格沃兹-思寒