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

时间:2022-04-25 18:19:46

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

1.认识识webview

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

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

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

 

 

2.、接触contexts

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

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

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

WEBVIEW_com.xxxx :这个就是webview

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

  Appium元素定位难点:混合式的native webview 获取webview的context

3.换到webview

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

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

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

  Appium元素定位难点:混合式的native webview 换到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