乐哈哈yoyo 发表于 2017-6-22 11:00:22

Crosswalk App UI 自动化

For @lihuazhang
Web技术大势所趋,随着移动端浏览器引擎性能的持续优化以及移动设备硬件持续增强,web技术在移动设备上的的春天在离我们越来越近。
Crosswalk 虽然只是针对安卓平台,但是由于低于android 4.4 的webview 是一个蹩脚的Android WebKit浏览器内核(android版本越低性能就越差,android 4.4以上已经使用了Chromium ),所以英特尔公司发布了 Crosswalk引擎,可以让 Android 4.0-4.3 的手机上的应用打包 Chromium 引擎而不是 Android WebKit。基于此,有蛮多应用还是选择了crosswalk作为app自带的浏览器引擎。
@lihuazhang 在上篇文章中抛砖引玉介绍了crosswalk,我接着这边文章简单介绍下基于Crosswalk app UI 自动化,部分内容来自互联网。
Crosswalk WebDriver实现在介绍如何使用Crosswalk WebDriver实现应用控制自动化之前,我们先为希望对Crosswalk WebDriver实现感兴趣的读者介绍一下Crosswalk WebDriver的具体实现。Crosswalk基于Chromium浏览器项目,Chromium浏览器已经对WebDriver有相当稳定的支持,但对于以应用程序见长的Crosswalk来说,还是需要额外的开发工作来支持原始Chromium WebDriver针对应用程序所做的增强和优化。
Crosswalk WebDriver核心模块主要分为HttpHandler模块、DeviceManager模块以及DevToolsClient模块。首先测试人员使用Selenium编写基于WebDriver的测试脚本,测试脚本通过W3C规定的标准JSON over HTTPWire Protocol与Crosswalk WebDriver的HttpHandler模块通信,解析接收到的测试命令,之后由DevToolsClient模块调用WebSocket通过Devtools Protocol协议与终端上Web Application进行通信,其中涉及到对实际硬件或者模拟器的操作部分则由抽象的DeviceManager模块来完成,截至目前DeviceManager模块实现了对Android 设备和Tizen 设备的支持,最后Web Application实际执行的反馈数据再以相反的方向流回Selenium测试端,整个流程的测试细节都会以Log的形式记录下来供测试人员分析。

https://testerhome.com/photo/2015/67a6e02ef15415783b564d47d8880c70.png


Crosswalk app UI 自动化实现题外话:我在13年底的时候就接触到了crosswalk 这个框架,我们的android版本的app也经历了从原生的webview切换到crosswalk的过程当中,整个应用的体验有了一定的提升,但是额外附带的crosswalk以及一些插件使得app达到了几十兆,相对应的UI自动化框架为了能兼容crosswalk版本的app也集成了crosswalk 的driver,配合uiautomator也算是一种组合。
简单实践:
xwalkdriver server
    xwalkdriver 的linux版本的binary可以在其github网站上下载。
selenium remote driver
从selenium(http://docs.seleniumhq.org/download/)上下载你熟悉的语言包. 例如, 安装python 的binaries可以使用pip:
$ pip install selenium
Android SDK
需要下载android SDK: http://developer.android.com/sdk/index.html
Run xwalkdriver server

[*]启动 Android SDK's Android Debug Bridge (adb) server:>$ adb start-server
2.确保 adb shell 有对device上 /data/local 读写权限:
adb shell su -c chmod 777 /data/local
3.启动xwalkdriver,默认监听9515端口:
$ ./walkdriver

https://testerhome.com/photo/2015/6bf7e438f2ab0996ae9841427e8db214.png


Sample Test
from selenium import webdriver
capabilities = {
'xwalkOptions': {
    'androidPackage': 'YOUR_PACKAGE_NAME',
    'androidActivity': '.YOUR_ACTIVITY_NAME',
    'adb-port': 5037(default option if not selected),
}
}
driver = webdriver.Remote('http://**.**.**.**:9515', capabilities)
"""
Your regular python-webdriver code.
"""
driver.quit()
在这里我没有过多的分享,是因为本身crosswalk这块我也只是集成到了项目框架里,没有过多去研究它,其次如果你熟悉webdriver,其实也没有太多学习的成本,如果你的app有多个webview,自己window handle切换下,如果要做native操作,和uiautomator结合下,效果也不错。

草帽路飞UU 发表于 2017-6-22 11:09:07

感谢分享,看来 corsswalk 用的地方还真不少。

乐哈哈yoyo 发表于 2017-6-22 11:10:17

草帽路飞UU 发表于 2017-6-22 11:09
感谢分享,看来 corsswalk 用的地方还真不少。

对了,你们在 ubuntu 上使用 xwalkdriver 有没有装什么依赖库?
现在在尝试用 docker 跑 xwalkdriver ,总是提示缺少某些动态库。。。

乐哈哈yoyo 发表于 2017-6-22 13:57:38

好文!
提个小问题,markdown 的粗体格式在前面两个星号前必须有一个空格,否则会认为你就是想显示星号。同时一些序号格式要求和其他格式之间有一个空行。我看到文中有两个地方出现了 markdown 的字符了。
页: [1]
查看完整版本: Crosswalk App UI 自动化