Appium 如何在第三方的 WebView 控件中进行操作

mike · 2015年05月15日 · 最后由 平凡白影 回复于 2016年03月15日 · 2419 次阅读

大家好,最近遇到一个问题,请教一下。

背景
我们做自动化测试的过程中,最通用的办法就是先将 appium 切换到 webview 模式,然后按查找 web 元素的方法对 WebView 里面的元素进行操作即可。但嵌入到 App 中的第三方 WebView,在查上下文信息的时候,找不到对应的 WebView。打印 contexts 信息时,也只能看到 NATIVE_APP。

看到这篇文章中http://blog.sina.com.cn/s/blog_68f262210102v92p.html,最后是通过坐标去操作的。但这样的写法肯定不通用,也不便于日后维护。

求路过的大侠支个招 , 感谢

共收到 4 条回复 时间 点赞

有两种方式可以查看当前界面下 webview 中的元素信息,第一种在 PC 端 chrome 浏览器中输入 chrome://inspect 后回车 (当然前提是先把手机连上电脑),然后你就可以看到手机上正在运行的 webview app,点击相应的 Inspect 就应该能看到这个界面上的元素信息(PS:这个操作需要 *** 否则你会得到一个空白的页面,本人就是因为这个原因选择了第二种方法)
第二种方法就是在代码中切换到 webview 后使用 driver.getPageSource() 得到页面的元素并保存在一个文件里。这种方法没有第一种简单直观,所以如果 webview 很多的话还是建议使用第一种方法。

第三方 webview 是指类似微信里面内嵌基于 QQ 浏览器内核的 webview 这种?
对于这种 webview ,你可以试试用 selendroid 。

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 方法)

mike #3 · 2015年07月14日 Author

#2 楼 @chenhengjie123 对的,就是类似于微信里内嵌了 QQ 浏览器内核的 webview

#3 楼 @xiang2743 你的问题解决了吗,我也遇到同样的问题了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册