为了解决工作中的一个问题,开始学习selendroid。

工作中,有一些所谓H5应用需要测试,这些应用程序描述如下:

  1. 通过微信平台传播,也就是依靠微信的朋友圈传播;
  2. 可以通过类似于http://XXXWWWYYY这样的地址访问;
  3. 应用内容一般是一些时事热点,比如国家的两会、奥运会、中秋节等等;
  4. 应用一般由10~20页面组成,可以通过手指的点击滑动等操作切换页面;
  5. 页面元素包括文字、图片、音乐等;

测试的步骤是:

  1. 先把每个H5应用的url地址发送到微信聊天窗口;
  2. 点击url地址;
  3. 打开应用后,依次检查每个页面是否可以正常打开;

移动端的应用分为native、mobile web、hybrid三类,前面提到的H5产品都属于hybrid类型:

  1. 使用iOS和安卓SDK开发的产品属于原生应用(native);
  2. 可以通过移动端浏览器访问的应用属于移动web应用(mobile web);
  3. 有个原生的控件叫做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。

学习selendroid初衷的更多相关文章

  1. Diligent Engine学习笔记初衷

    2020年过去一个月了,回首过去的一年,工作确实很忙,但是自己个人的技术也没得到什么成长,项目当中一些比较难搞的问题也没得到更深入的研究.思来想去,希望新的一年能改变自己的工作方式,将工作上的事物进一 ...

  2. Python pandas学习总结

    本来打算学习pandas模块,并写一个博客记录一下自己的学习,但是不知道怎么了,最近好像有点急功近利,就想把别人的东西复制过来,当心沉下来,自己自觉地将原本写满的pandas学习笔记删除了,这次打算写 ...

  3. 我的Linux学习之路及参考书籍

    学习目的 很简单的考虑,最近在各大招聘网站上找工作,发现多数c/c++开发职位都需要Linux开发经验,让我很苦恼,因为Linux我到目前为止知之甚少,知道Linux的概念,也在大学期间了解过一段时间 ...

  4. iOS 10 消息推送(UserNotifications)秘籍总结(一)

    前言 之前说会单独整理消息通知的内容,但是因为工(就)作(是)的(很)事(懒)没有更新文章,违背了自己的学习的初衷.因为互联网一定要有危机意识,说不定眼一睁,我们就out丢了饭碗. 图片来源网络.jp ...

  5. 20155238 2016-2017-2《Java程序设计》课程总结

    每周作业链接汇总(按顺序) 预备作业1 预备作业2 预备作业3 第一周作业 第二周作业 第三周作业 第四周作业 第五周作业 第六周作业 第七周作业 第八周作业 第九周作业 第十周作业 自认为写得最好一 ...

  6. 在pixi中使用你的自定义着色器

    通过几天的学习,对openGL.shader有了一个大致的了解. 回到学习的初衷吧,在基于pixi.js重构D3项目的时候,因为精灵层级的问题,我得按照一定的先后顺序将不同类别的精灵添加到场景中去. ...

  7. Kotlin编写Processing程序(使用函数式编程思维和面向接口方式)

    写一例Kotlin编写的Processing程序,充分调用函数式编程思维和面向接口的编程思维,供自己和读者参考学习. 初衷 想要实现一行行的文字排版功能,每一行作为一个单位,可制定显示的位置.大小.文 ...

  8. Challenging Common Assumptions in the Unsupervised Learning of Disentangled Representations

    目录 概 主要内容 Locatello F., Bauer S., Lucic M., R"{a}tsch G., Gelly S. Sch"{o}lkopf and Bachem ...

  9. javascript学习初衷

    很久没有过来写东西了,由于要做小网页,介于不懂javascript,一味的去爬其他站点的代码下来,却不能自由组合,控制,达到自己想要的效果, 于是只能沉下心,javascript从头学起,还记得张老师 ...

随机推荐

  1. Codeforces 551E GukiZ and GukiZiana(分块思想)

    题目链接 GukiZ and GukiZiana 题目大意:一个数列,支持两个操作.一种是对区间$[l, r]$中的数全部加上$k$,另一种是查询数列中值为$x$的下标的最大值减最小值. $n < ...

  2. [原创][FPGA]Quartus中调用Modelsim波形仿真步骤说明

    0. 简介 在使用QuartusII软件的过程中,经常地需要跑仿真,那么说到仿真就不得不说Modelsim这个仿真软件了,我们这里介绍下该软件在QuartusII中的使用方法. 1. 建立Quartu ...

  3. Java中泛型的Class<Object>与Class<?>的区别(转)

    Object是一个具体的类名,而?是一个占位符号,表示任何类型,只要是SomeClass类或者子类就可以. List<Object>可以放任何类对象. List<? extends ...

  4. Web地图服务、WMS 请求方式、网络地图服务(WMS)的三大操作

    转自奔跑的熊猫原文 Web地图服务.WMS 请求方式.网络地图服务(WMS)的三大操作 1.GeoServer(地理信息系统服务器) GeoServer是OpenGIS Web 服务器规范的 J2EE ...

  5. [MFC]选择目录对话框和选择文件对话框 [转]

      在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法: 选择目录对话框 {    char szPath[MAX_PATH];     //存放选择的 ...

  6. PriorityQueue ,ArrayList , 数组排序

    static class E implements Comparable<E>{ int x ; int y ; int state ; int money ; public E(int ...

  7. Opencv 图片边缘检测和最小外接矩形

    #include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/i ...

  8. 修改 本地 IP 及 正则表达式 test exec match 的区别

    修改 IP 1.打开 "打开网络和共享中心" 2.打开 "更改适配器设置" 3.打开 "本地连接" 属性 4.修改 "协议版本 4 ...

  9. ftp的实现

    ftp.h #define BUFSIZE 512#define CMDSIZE 64#define ARGSIZE 64#define PASSIVE_ON 0x1 struct ftpcmd{ c ...

  10. <转>关于 error LNK2019:无法解析的外部符号 ,该符号在函数**中被引用的思考

    错误提示信息摘抄如下: ---------------------------------------------------------------------------------------- ...