appium+python自动化测试 解决安装权限弹窗

今天说说当今主流的自动化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时,点击掉询问弹窗。
    可行,但入手门槛高。

后面我想到一种方法,如下:
因为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['app']=hGoName
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)
#os.system("adb install -r " + hGoName)

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

你可能感兴趣的:(Python,UI自动化测试脚本)