appium自动化测试之混合应用处理

appium测试混合应用

1、native、web、hybrid简介

目前主流应用程序大体分为三类:web APP(网页应用)、hybrid APP(混合应用)、native APP(原生应用)。

native:

优点:直接依托于操作系统,交互性最强,性能最好;功能最为强大,特别是在与系统交互中,几乎所有功能都能实现。

缺点:开发成本高,无法跨平台,不同平台Android和iOS上都要各自独立开发;门槛较高,原生人员有一定的入门门槛,相比广大的前端人员而言较少;更新缓慢,特别是发布应用商店后,需要等到审核周期;维护成本高。

web:
优点:开发成本低,可以款平台,调用方便;维护成本低;更新无需通知用户,不需要手动升级;无需安装APP,不会占用手机内存。

缺点:无法获取系统级别的通知,提醒,动效等等,用户存留率低;设计受限制诸多;体验较差。

hybrid:

优点:在应用程序中嵌入了webview,通过webview访问网页;开发成本较低,可以跨平台,调试方便;维护成本低,功能可服用;功能更加完善,性能和体验要比起web APP好太多;更新较为自由。

缺点:相比原生,性能仍然有较大损耗;不适用于交互性较强的APP。

切换方法:

print(self.driver.contexts)

#查看所有的context

#返回结果 ['NATIVE_APP', 'WEBVIEW_com.huawei.browser']

#其中NATIVE_APP为原生的,WEBVIEW开头的表示H5的 #再使用如下方法切换到H5即可

self.driver.switch_to.context("WEBVIEW_com.huawei.browser")

#使用如下方法确认是否切换成功

print(self.driver.current_context)

2、如何分别一个APP页面究竟是native还是web的。

在手机/模拟器中点击关于手机中的版本号5下,出来开发者选项。

在开发者选项中勾选上显示布局边界再返回到APP界面。

如果APP是web页面,那界面不会有布局边界显示,如有则说明是native的界面。

在就通过定位工具:

我们之前所使用的API都是针对于原生的应用而言的,如果是web页面就不能采取这些API来定位元素,而且很多的应用都是hybrid混合应用了。

3、hybrid自动化脚本开发

识别webview视图

我们可以根据上面描述的方法,进行判断。

获取所有的contexts:driver.contexts

理解context:

context上下文,疑问这一个场景,一个场景就是用户和操作系统交互的过程,native界面和webview界面分属于不用的context,native默认是“NATIVE_APP”,webview则默认是“WEBVIEW_被测进程名称”。

通过切换context对象,可以让appium认识到自己当前处于哪一个状态里面。

4、切换到webview视图

示例:

  1. # 2、切换-Window窗口

  2. # context - 混合应用 native_app

  3. time.sleep(5)

  4. # 1、获取所有的context 确保你的APP能够让代码识别到webview

  5. cons = driver.contexts

  6. print(cons)

  7. # 2、根据context名字,切换到webview # WEBVIEW_com.lemon.lemonban

  8. # driver.switch_to.context(cons[-1])

  9. driver.switch_to.context('WEBVIEW_com.lemon.lemonban')

  10. # 打印web内容

  11. webinfo = driver.page_source

5、定位webview中的元素

已经切换到HTML,那后续就是web自动化操作 --- 原生webview,基本上都是Chromedriver。

(1)Chrome浏览器中输入:chrome://inspect

该方法操作inspect后需要翻墙才可以使用(不推荐)。

(2)使用uc - devtools

具体参考官方文档:https://dev.ucweb.com/docs/pwa/docs-zh/xy3whu

6、回到native_app

driver.switch_to.context(None)

结论:

1、要让APP当中的webview能够被识别,并且要操作的元素在webview当中。

2、利用appium的context切换,从NATIVE_APP切换到webview网页。

3、利用uc - devtools来定位网页元素并操作。

4、web网页,需要下载与Android系统webview版本匹配的Chromedriver

7、有两个缺陷可能导致你无法获取webview

首先,绝大多数应用是不会开启webview的debug模式。

第二,切换webview的情况会受到网络状态的影响,如果是内部代理的网络则会导致你无法操作chromedriver,切换至webview模式时会无法将命令传入导致超时,因此这种方式并未对其进行实现。

猜你喜欢

转载自blog.csdn.net/grl18840839630/article/details/109632489