Appium元素定位难点:混合式的native+webview

Posted kaola8023

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Appium元素定位难点:混合式的native+webview相关的知识,希望对你有一定的参考价值。

现在大部分app都是混合式的native+webview,对应native上的元素通过uiautomatorviewer很容易定位到,webview上的元素就无法识别了。

1.认识识webview

>用uiautomatorviewer定位工具查看app页面,发现页面上有些区域无法定位到,如下图左边红色区域,只能定位到这个大框框,红色框里面的元素是无法识别的。

>这时候可以查看元素属性,如右图它的class属性,上面写着WebView,那毫无疑问这种页面就是webview了。

技术图片

 

 

2.、接触contexts

>.context的中文翻译是上下文环境,学过selenium的同学,也可以理解为句柄(handle),其实是一回事,反正知道是两个不同的环境就行了。

>.先获取页面是contexts环境,如下图红色区域,获取的是一个list列表:

NATIVE_APP:这个就是native,也就是原生的

WEBVIEW_com.xxxx :这个就是webview

>.当看到打印出来有下图两个,就说明获取到webview的context了(当然也有的app有坑,可能明明有webview,却通过contexts获取不到,这种需要特殊处理了)

 
技术图片
获取webview的context

3.换到webview

>要想操作webview上的元素,第一步需要切换环境(跟selenium的切换iframe,切换handle思路是一样)

>切换方法:switch_to.context(参数是webview的context)

>由于第二步已经获取到contexts是一个list对象,取这个list的第二个参数就行,也就是contexts[1]

 
技术图片
换到webview页面

4.切回native

>webview上操作完后,想回到native上操作,这时候需要先切回来,切回native有两个方法:

方法1:driver.switch_to.context("NATIVE_APP")   # 这个NATIVE_APP是固定的参数

方法2:driver.switch_to.context(contexts[0])      # 从contexts里取第一个参数

 
技术图片
 

 

 

 

以上是关于Appium元素定位难点:混合式的native+webview的主要内容,如果未能解决你的问题,请参考以下文章

appium 切换native/ webview,findby,还有页面元素定位一直小于0的问题的解决

Appium元素定位难点:tap坐标定位不准确

Appium python自动化测试系列之混合app实战

无法在 webview 中使用 appium android 定位混合应用程序的 webelements

无法使用适用于 iOS 混合应用程序的 appium 检查作为背景图像存在的元素

这应该是网络上最详细最全面的Appium环境搭建及元素定位