为了解决工作中的一个问题,开始学习selendroid。
工作中,有一些所谓H5应用需要测试,这些应用程序描述如下:
- 通过微信平台传播,也就是依靠微信的朋友圈传播;
- 可以通过类似于http://XXXWWWYYY这样的地址访问;
- 应用内容一般是一些时事热点,比如国家的两会、奥运会、中秋节等等;
- 应用一般由10~20页面组成,可以通过手指的点击滑动等操作切换页面;
- 页面元素包括文字、图片、音乐等;
测试的步骤是:
- 先把每个H5应用的url地址发送到微信聊天窗口;
- 点击url地址;
- 打开应用后,依次检查每个页面是否可以正常打开;
移动端的应用分为native、mobile web、hybrid三类,前面提到的H5产品都属于hybrid类型:
- 使用iOS和安卓SDK开发的产品属于原生应用(native);
- 可以通过移动端浏览器访问的应用属于移动web应用(mobile web);
- 有个原生的控件叫做webview,原生应用通过它可以和web内容进行交互,于是使用webview的原生应用叫做混合型应用(hybrid);
曾经选用appium对这些H5应用进行自动化测试。由于微信的qq浏览器内核有限制,导致通过appium只能读取到native这一个“上下文(context)”,无法获取webview这个“上下文”,也就无法进一步操作webview中的元素。
在testerhome这个移动测试社区中,chenhengjie123 提到:
Appium 获取 context 使用的是
adb shell cat /proc/net/unix
,然后通过分析里面的内容实现的。相关代码为:
https://github.com/appium/appium/blob/6dd575948220725b897f89775b97c4e1ab8fc28b/lib/devices/android/android-hybrid.js(里面的androidHybrid.listWebviews
方法)而 selendroid 是通过遍历 Hierarchy 结构来找 webview 的(WebView 这个 class 的实例)。相关代码:
https://github.com/selendroid/selendroid/blob/acdd467f001d0afec6278a6f160775bce62d79e3/selendroid-server/src/main/java/io/selendroid/server/model/internal/WebViewHandleMapper.java(里面的findWebViews
方法)
于是开始学习selendroid。