appium+python 解决安装权限弹窗

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

今天说说当今主流的自动化 UI 测试框架之一的 appium 使用总结,其中卡的我比较久的是被测 App 的安装时手机弹出的权限弹窗问题,主要说下解决方案。

之前也接触过网易的 airtest project,uiautomator2 等自动化测试框架, appium 相对要麻烦一些,需要很多手机设备信息,包括被测 App 的信息。
appium 主要的问题就在于它的设计就是建立在手机已经安装好了被测 App 的,它初始化连接设备需要打开指定 App,而手动去安装被测 App 时很 low 的方式,一般来说我们会想到用 脚本去点击 “同意弹窗”,但 appium 没初始化完成时是无法使用 click 方法的。文章源自玩技e族-https://www.playezu.com/492940.html

看过网上一些解决方案,说说我的实践效果:

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,再使用多线程去点击掉询问弹窗。代码如下:文章源自玩技e族-https://www.playezu.com/492940.html

# 配置 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)文章源自玩技e族-https://www.playezu.com/492940.html

好,到此结束。喜欢的点个赞吗,谢谢大家。文章源自玩技e族-https://www.playezu.com/492940.html

appium+python 解决安装权限弹窗插图
全栈软件测试自动化 Selenium和Appium (Python版)(异步图书出品)
本书全面讲解了使用Python、Selenium和Appium进行自动化测试的方法与技术。本书主要内容包括自动化测试、关键识别技术和常见控件的使用、移动端自动化测试实例和核心原理、自动化测试实战项目原型设计、接口测试、Python Requests接口测试实战等。
文章源自玩技e族-https://www.playezu.com/492940.html文章源自玩技e族-https://www.playezu.com/492940.html
 最后更新:2023-2-24
评论  40  访客  40
    • hope1
      hope1 9

      ios 需要授信应用,怎么解决

      • qchuang
        qchuang 9

        appium driver 的安装弹框元素查找比较慢,我实测发现经常还没查到弹框按钮,安装就等待超时了。

        • Dandi
          Dandi 9

          楼主,用你的方法尝试了下,确实很好,但是有一点,有的手机偶尔执行安装的时候,那个安装弹窗一直不出来,然后另一个线程就开始不停的查找安装权限弹窗了,怎么安装弹窗出不来安装不上是为什么呢

          • cmlanche
            cmlanche 9

            正解,看我专栏https://zhuanlan.zhihu.com/custom-appium

            • rebortyang
              rebortyang 9

              楼主你好,我用你的方法也是无法定位,最终的结果是安装超时报错。在 appium server 那里查看信息输出,发现定位回来的结果是空的。

              • jsonxia
                jsonxia 9

                哈哈,我就打算这么处理

                • 海姆达尔
                  海姆达尔 9

                  desired_caps2 = {“deviceName”:”860BCMN22FF2″,
                  “app”: app,
                  “noReset”: True,
                  “appWaitPackage”: “c.l.a”,
                  “appWaitActivity”:”com.example.TestPlugin.MyActivity”,
                  “appWaitDuration”: 60000,
                  “newCommandTimeout”: 200,
                  “platformVersion”: “7.0”,
                  “autoGrantPermissions”: True,
                  “platformName”: “Android”,
                  “automationName”: “UiAutomator2”
                  }

                  sleep(3)

                  if __name__ == “__main__”:
                  # 调用始终允许函数
                  print(‘begin main’)

                  # performance_service = PermissionServer(desired_caps[‘deviceName’], False)
                  # performance_service.start()

                  driver = webdriver.Remote(‘http://localhost:4723/wd/hub’, desired_caps)
                  time.sleep(1)
                  # performance_service.setPause(1)

                  遇见几个问题:已经 block 了

                  为什么后安装上的 app, 启动后不长时间就自己杀死进程呢??
                  发现安装上的 app 和原来的 app 签名文件不一样?
                  如何解决这个 2 个问题呢???

                  app 升级到 28 后,必须怎么解决的???

                  • loneyao
                    loneyao 9

                    请问是安装 apk 和安装确认一起进行是吗?

                    • shero
                      shero 9

                      这个怎么在 robotframework 实现呢?

                      • dengwei729
                        dengwei729 9

                        整个 service 去弄这些事情也是不错的

                      匿名

                      发表评论

                      匿名网友
                      :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
                      确定

                      拖动滑块以完成验证