zoukankan      html  css  js  c++  java
  • uiautomator2 使用Python测试 Android应用

    GitHub地址:https://github.com/openatx/uiautomator2

    介绍

    uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:

    1、测试脚本只能使用Java语言。

    2、测试脚本必须每次被上传到设备上运行。 我们希望测试能够用一个更脚本化的语言,例如Python编写,同时可以每次所见即所得地修改测试、运行测试。

    安装

    安装uiautomator2

    pip install --pre uiautomator2
    
    pip install pillow

    初始化

    部署相关的守护进程。

    电脑连接上一个手机或多个手机, 确保adb已经添加到环境变量中,执行下面的命令会自动安装本库所需要的设备端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch

    python -m uiautomator2 init

    安装完成,设备上会多一个uiautomator的应用。

    配置手机设备参数:

    有两种方法,一种是通过WIFI,另一种是通过USB数据线将手机链接电脑。

    WiFi连接更方便一点,需要保持PC和手机使用的一个WIFI,查看手机连接WIFI的IP地址。

    测试

    编写以下脚本进行验证:

    import uiautomator2 as u2
    
    d = u2.connect('192.168.31.234')
    print(d.info)

    运行结果:

    {'currentPackageName': 'com.meizu.flyme.launcher', 'displayHeight': 1920, 'displayRotation': 0, 'displaySizeDpX': 360, 'displaySizeDpY': 640, 'displayWidth': 1080, 'productName': 'meizu_PRO5', 'screenOn': True, 'sdkInt': 24, 'naturalOrientation': True}

    定位元素:

    我们可以借助Android SDK自的uiautomatorviewer查看元素,这就要求手机必须以USB的方式连接PC,我前面使用的是WIFI连接进行连接的。所以,openatx提供了另外一个工具weditor 来解决这个问题。

    GitHub地址:https://github.com/openatx/weditor

    1、安装:

    pip install --pre --upgrade weditor

    2、使用:

    python3 -m weditor

    默认会通过浏览器打开页面:http://atx.open.netease.com/

    在页面左上角选择Android,输入设备IP(192.168.31.234),点击Connect按钮。

    当我们操作完手机后,可以点击“Reload”按钮进行刷新,从而保持与设备上的界面保持同步。weditor 还可以帮我们生成代码。总之,你研究一下就会用了。

    编写测试脚本

    这里针对魅族社区App进行测试。

    import uiautomator2 as u2
    from time import sleep
    
    d = u2.connect('192.168.31.234')
    
    # 启动App
    d.app_start("com.meizu.mzbbs")
    
    # 搜索
    d(resourceId="com.meizu.mzbbs:id/j0").click()
    
    # 输入关键字
    d(resourceId="com.meizu.mzbbs:id/p9").set_text("flyme")
    
    # 搜索按钮
    d(resourceId="com.meizu.mzbbs:id/tp").click()
    
    sleep(2)
    
    # 停止app
    d.app_stop("com.meizu.mzbbs") 

    app_start()和app_stop()用于启动和停止应用。

    常用的定位方式:

    • ResourceId定位:
      d(resourceId="com.meizu.mzbbs:id/tp").click()

    • Text定位:
      d(text="精选").click()

    • Description定位:
      d(description="..").click()

    • ClassName定位:
      d(className="android.widget.TextView").click()

    https://www.cnblogs.com/fnng/p/8486863.html

  • 相关阅读:
    CSS 3中细线边框如何实现?
    【SPL标准库专题(1)】 SPL简介
    【PSR规范专题(5)】PSR-4 改进后的自动加载规范
    【PSR规范专题(4)】PSR-3 日志接口规范
    【PSR规范专题(3)】PSR-2 代码风格规范
    【PSR规范专题(2)】PSR-1 基本代码规范
    YII框架的依赖注入容器与服务定位器简述
    PHP 反射机制Reflection
    【Apache运维基础(5)】Apache的Rewrite攻略(2)
    【Apache运维基础(4)】Apache的Rewrite攻略(1)
  • 原文地址:https://www.cnblogs.com/waw/p/11087865.html
Copyright © 2011-2022 走看看