Appium windows+python3+appium+android6.0,使用 UIautomator 定位 H5 页面?还是使用 webview 定位 H5 页面?

蓝莓酱 · 2017年06月01日 · 最后由 蓝莓酱 回复于 2017年07月03日 · 2892 次阅读

现在这个 apk 里,有几个功能是使用 H5 来实现的。
然后我就遇到一个疑问:
1、使用谷歌浏览器的 remote device 无法获取到 apk 中 H5 页面的 URL,这个问题还未解决,也不知道是什么原因。于是我找到开发,直接要到了这个 apk 中的 H5 页面 URL。以便用来进行 web 这边的元素定位。(chrome://inspect/#devices 后 pc 端的浏览器还是看不到 apk 中打开的 H5 的 URL)
2、于是我再次尝试使用 UIautomator 定位看看,大多数定位后,会告诉我是 webview,也就是无法定位到 H5 的具体元素,如图 1。这个我理解。有意思的是,我在几次尝试后,发现我使用 UIautomator 居然可以定位到 APK 的 H5 页面中的某一个元素,只是这个元素有的能准确 click,有的点击后没反应。如图 2.
3、根据两张图,以及和开发确认,这个功能确实是 H5 实现,那我就纠结的是,到底使用 webview 呢,还是 UIautomator 元素定位呢?希望各位给点经验之谈。
感谢各位抽空给予我一些交流学习。

图一:

图二:

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 18 条回复 时间 点赞

似乎是 android6.0 以上可以用 uiautomatorview 定位到,我试过 5.1 的不行。
可以使用 current_context 方法查看当前是 native 还是 webview

—— 来自 TesterHome 官方 安卓客户端

desec 回复

好哒,谢谢你的回复。
我也是一边学习一边研究呢,一会儿试试。

desec 回复

我的安卓真机是 6.0 的系统,print(driver.contexts) print(driver.current_context) 显示的是
['NATIVE_APP']
NATIVE_APP
然后就不知所措了,,,,

desec 回复

你好,我还想问下,我跟开发确认了一下,他说这个 app 是原生的,但是里面的页面是 H5 形式加载的,然后我网上查,说是可能需要开发加一句什么代码,来开启 webview,不知道这块你懂么?能否跟我说说

可自行在脚本中切换

self.dr.switch_to.context('WEBVIEW')    #切换至webview
self.dr.switch_to.context('NATIVE_APP')   #切换成原生
五棵木 回复

好的 ,谢谢

从 Android 4.4+,Webkit 是支持远程调试的,如果 Appium 中读取不到 WebView,需要将 app 的 debug 模式打开,在 app 中配置如下代码(在 WebView 类中调用静态方法 setWebContentsDebuggingEnabled):
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {

WebView.setWebContentsDebuggingEnabled(true);
}

白菜 回复

收到啦!谢谢你的热心帮助,我这里已经让开发打开了 webview 调试模式

五棵木 回复

我两问下,self.dr.switch_to.context('WEBVIEW') 这里 webview 是要用 print(driver.contexts) 获取到的 ['NATIVE_APP', 'WEBVIEW_com.bjgoodwill.mobilemrb'] 中的 WEBVIEW_com.bjgoodwill.mobilemrb 么?我用了以后报错提示我:WEBVIEW_com.bjgoodwill.mobilemrb does not exist.

蓝莓酱 回复

直接用'WEBVIEW',不用改试下

五棵木 回复

你好,收先谢谢你的解答,但是我修改过了,还是同样的报错。
后来我采用了操作一个步骤,打印一次当前的 print(driver.current_context),但一直都显示是 native-app,可是使用 print(driver.contexts) 却打印出了【native,webview.com。。。】

蓝莓酱 回复

这我就不懂了。。。

@chentu 你好! 你这个问题解决了吗 ?

孟德 回复

没有,我有两个 H5,一个可以直接定位,另一个则不行始终不行,后来说可以先放下不写脚本

@chentu 哦 谢谢! 我现在也碰到这种问题,没搞明白!

孟德 回复

在查查论坛有没有其他的解决办法。

@chentu 我把那些用图形识别能做的 都用图形识别 做了 ,有些操作,图形识别不了! 比较头疼 ! 不过我这边好像可以获取到 H5 的元素了,只是元素定位不到!

孟德 回复

比我强,哈哈哈,如果以后有最终的解决办法,还希望告诉我,或者发个贴哈

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