为了解决工作中的一个问题,开始学习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. TStringList 善用 value['names'] 即使value 是带=号的值都没有关系呵呵 ,我靠 强,以后就用这个了,key=value首选

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4YAAAHiCAIAAAA760U/AAAgAElEQVR4nOy9Z5QUV57oWe/j7tk9u2 ...

  2. TF-IDF 学习

    参考资料, 阮一峰的博客  http://www.ruanyifeng.com/blog/2013/03/tf-idf.html 非常感谢他, 能用如此通俗易懂的文字来阐述概念 TF -- Term ...

  3. Play框架的用户验证。

    最近刚刚参与一个基于Play框架的管理平台的升级工作,其中涉及到了用户的验证工作.第一次接触play框架,直接看已有代码,有点晕.因此,自己实现了一个简单的用户验证功能. 首先,新建一个User类,包 ...

  4. python学习笔记之heapq内置模块

    heapq内置模块位于./Anaconda3/Lib/heapq.py,提供基于堆的优先排序算法 堆的逻辑结构就是完全二叉树,并且二叉树中父节点的值小于等于该节点的所有子节点的值.这种实现可以使用 h ...

  5. 解决.NET Core MVC 视图中的中文被html编码的问题

    在  .net core mvc 视图输出 变量的时候 默认使用的是 UnicodeRanges.BasicLatin  进行的编码 所以 输出中文后在查看源码的时候是进过编码了的 . 解决方案 在 ...

  6. [IOS笔记] - 动画animation

    //移动 - (IBAction)translation:(id)sender { CABasicAnimation *traslation = [CABasicAnimation animation ...

  7. 关于查看python的trace的方法

    lptrace本质上是基于GDB的,进入到进程内存空间,然后执行了一段python指令把当时的trace给print出来 使用工具:https://github.com/khamidou/lptrac ...

  8. Markdown基础以及个人经验

    前言 DFRobot论坛今日支持Markdown发帖了: [md] your content here [/md] 非常棒,再也不怕辛辛苦苦排个版,一夜回到解放前.这里介绍一下Markdown写博客发 ...

  9. 谈一次Linux的木马攻击数据爆满造成的Mysql无法启动

    起初以为是mysql它们之间的扩展没有开启! 后来发现,木马的确使它初始化了,最开始没有用图形化界面 而后,修改并且开启所有pdo扩展 VIM基本操作(除了插入,其它的命令前提是按ESC): 插入: ...

  10. UVA 12338 - Anti-Rhyme Pairs(后缀数组+RMQ)

    UVA 12338 - Anti-Rhyme Pairs 题目链接 题意:给定一些字符串,每次询问求出两个字符串的最长公共前缀的长度 思路:把字符串排序,就能求出height和rank数组,然后利用R ...