今天说说当今主流的自动化 UI 测试框架之一的 appium 使用总结,其中卡的我比较久的是被测 App 的安装时手机弹出的权限弹窗问题,主要说下解决方案。
之前也接触过网易的 airtest project,uiautomator2 等自动化测试框架, appium 相对要麻烦一些,需要很多手机设备信息,包括被测 App 的信息。
appium 主要的问题就在于它的设计就是建立在手机已经安装好了被测 App 的,它初始化连接设备需要打开指定 App,而手动去安装被测 App 时很 low 的方式,一般来说我们会想到用 脚本去点击 “同意弹窗”,但 appium 没初始化完成时是无法使用 click 方法的。
看过网上一些解决方案,说说我的实践效果:
1,采用 adb 点击弹窗 “同意” 坐标方式。
效果不佳,而且手机众多,很多手机的询问弹窗位置不一样,不建议使用。
2,通过 adb 先把被测 apk 文件 push 到手机指定文件夹,再用 db shell pm install 安装。
网上说能解决部分手机(不出现询问弹窗),但我使用的小米,华为等依然有弹窗。可能是手机原因不用吧。 多与做设备集群的自动化测试的来说,这种依然不行。
3,首次安装人工点击,测试完成后不卸载,后续 App 版本用自动化脚本测试时采取覆盖安装。
覆盖安装不会出现询问弹窗(我测的小米是这样),这种方式就只 low 一次,后续还好吧。,
4,采用其他框架如 uiautomator2 的脚本,在 appium 是初始化安装 App 时,点击掉询问弹窗。
可行,但入手门槛高。
5,下面介绍我使用的这种方案,如下:
因为 appium 需要先打开一个 App 才能完成初始化,所以我们可以在配置参数中不配置我们被测的 App,可以配置一些很小的 App 信息,且必须是每部手机上都会安装的。刚好,使用 appium 在设备与服务端通信,会在设备上安装一款叫 appium setting 的很小的 App。
因此,我们可以参数里配置它,完成初始化后,再用 adb 或者 appium 提供的安装函数去安装实际被测 App,再使用多线程去点击掉询问弹窗。代码如下:
# 配置 appium srtting 为被测 App
desired_caps = {}
desired_caps['platformName']='Android'
desired_caps['deviceName']='huawei-stf_al00-8BN0217930000453'
desired_caps['paltformVersion']='8.0.0'
desired_caps['appPackage']='io.appium.settings'
desired_caps['appActivity']='io.appium.settings.Settings'
desired_caps['autoGrantPermissions']= True
drive = webdriver.Remote('http://localhost:4723/wd/hub,desired_caps')
# 再安装真实被测 App,利用线程点击掉询问弹窗
thread1 = usb_install_thread() # 这是点击弹窗的线程
thread1.start()
drive.install_app(hGoName)
好,到此结束。喜欢的点个赞吗,谢谢大家。


未知地区 20F
用 UI2 来做自动化脚本也可以啊 ,其实个人感觉 UI2 更简单,UI2 连接设备只需要 device 号,连接后用的多线程点击也可以的,UI2 的框架如何使用可以去官方学习下
未知地区 19F
能够不用 appnium 框架,只进行 ui 点击操作手机端权限吗
未知地区 18F
提示找不到这个软件包
未知地区 17F
对 您也可以使用 appium 的 安装函数去安装试试,我这边都可以哎,只是弹窗问题解决就行了
未知地区 16F
我说的是安装软件时的权限(安装时手机弹窗 “是否允许安装,不是从应用市场下载的。。。等等警告,需要人工确认”),不是安装后首次启动的权限,usb 怎么会无法安装呢?安卓手机不像 iOS 吧,是允许用户自己安装软件的,只不过是要出现 警告/确认弹窗的
未知地区 15F
您的文章认真拜读了,您说的权限是安装软件启动后需要获取的权限,我的意思是很多厂商直接限制了安装包的启动,也就是通过 usb 根本无法启动安装软件,自然也就没有后续的权限弹框选择
未知地区 14F
我文章中讲了如何解决这个安装权限问题的,uiautomator 的话直接写个线程,循环检查就 ok,线程代码也在评论区给了,appium 有点不同,解决方案自己看文章吧,很详细了
未知地区 13F
那这个有点麻烦的就是有的厂商的手机,对 USB 启动安装限制很严,通过 usb 不能自动安装,比如 vivo
未知地区 12F
如何启动安装包?不论你的安装包在手机还是电脑都可以用 adb 命令去安装,usb 安装权限问题,我这篇文章就是解决这个的, appium 不能配置自动给软件安装权限,权限是系统的, 同一个安装包在不同手机上包名是一样的
未知地区 11F
还有我要测多部手机,手机信息可以从数据库中读到,那可以配置 Appnium 自动安装软件给权限吗?同一个软件安装包在不同手机上名称会变吗