appium+python 解决安装权限弹窗

random
random
random
订阅者
10318
文章
0
粉丝
测试交流40324字数 853阅读2分50秒阅读模式

今天说说当今主流的自动化 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)

好,到此结束。喜欢的点个赞吗,谢谢大家。

appium+python 解决安装权限弹窗
全栈软件测试自动化 Selenium和Appium (Python版)(异步图书出品)
本书全面讲解了使用Python、Selenium和Appium进行自动化测试的方法与技术。本书主要内容包括自动化测试、关键识别技术和常见控件的使用、移动端自动化测试实例和核心原理、自动化测试实战项目原型设计、接口测试、Python Requests接口测试实战等。

 最后更新:2023-2-24
评论  40  访客  40
    • A308寝帅
      A308寝帅 9

      用 UI2 来做自动化脚本也可以啊 ,其实个人感觉 UI2 更简单,UI2 连接设备只需要 device 号,连接后用的多线程点击也可以的,UI2 的框架如何使用可以去官方学习下

      • 红客联盟
        红客联盟 9

        能够不用 appnium 框架,只进行 ui 点击操作手机端权限吗

        • 红客联盟
          红客联盟 9

          提示找不到这个软件包

          • A308寝帅
            A308寝帅 9

            对 您也可以使用 appium 的 安装函数去安装试试,我这边都可以哎,只是弹窗问题解决就行了

            • A308寝帅
              A308寝帅 9

              我说的是安装软件时的权限(安装时手机弹窗 “是否允许安装,不是从应用市场下载的。。。等等警告,需要人工确认”),不是安装后首次启动的权限,usb 怎么会无法安装呢?安卓手机不像 iOS 吧,是允许用户自己安装软件的,只不过是要出现 警告/确认弹窗的

              • 红客联盟
                红客联盟 9

                您的文章认真拜读了,您说的权限是安装软件启动后需要获取的权限,我的意思是很多厂商直接限制了安装包的启动,也就是通过 usb 根本无法启动安装软件,自然也就没有后续的权限弹框选择

                • A308寝帅
                  A308寝帅 9

                  我文章中讲了如何解决这个安装权限问题的,uiautomator 的话直接写个线程,循环检查就 ok,线程代码也在评论区给了,appium 有点不同,解决方案自己看文章吧,很详细了

                  • 红客联盟
                    红客联盟 9

                    那这个有点麻烦的就是有的厂商的手机,对 USB 启动安装限制很严,通过 usb 不能自动安装,比如 vivo

                    • A308寝帅
                      A308寝帅 9

                      如何启动安装包?不论你的安装包在手机还是电脑都可以用 adb 命令去安装,usb 安装权限问题,我这篇文章就是解决这个的, appium 不能配置自动给软件安装权限,权限是系统的, 同一个安装包在不同手机上包名是一样的

                      • 红客联盟
                        红客联盟 9

                        还有我要测多部手机,手机信息可以从数据库中读到,那可以配置 Appnium 自动安装软件给权限吗?同一个软件安装包在不同手机上名称会变吗

                      匿名

                      发表评论

                      匿名网友
                      确定

                      拖动滑块以完成验证