• uiautomator2环境搭建及使用


    python-uiautomator2是一个自动化测试开源工具,仅支持Android平台的原生应用测试。

    支持平台及语言

    python-uiautomator2封装了谷歌自带的uiautomator2测试框架,提供便利的python接口。他允许测试人员直接在PC上编写Python的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率。

    工作原理

    如图所示,python-uiautomator2主要分为两个部分,python客户端,移动设备

    • python端: 运行脚本,并向移动设备发送HTTP请求
    • 移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。

    整个过程

    1. 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动uiautomator2服务(默认7912端口)进行监听
    2. 在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)
    3. 移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行制定的操作

    安装工具

    • Python2或者Python3均可。
    • 移动设备

    环境搭建

    安装adb

    如命令行可以执行adb devices,则跳过此步骤
    从谷歌官网下载Android Platform Tools https://developer.android.com/studio/releases/platform-tools.html,解压,并加包含adb.exe的目录加入到系统的PATH中。

    安装python-uiautomator2

    pip install --pre -U uiautomator2

    设备安装atx-agent

    首先设备连接到PC,并能够adb devices发现该设备。

    # github下载atx-agent文件,并推送到手机。在手机上安装包名为`com.github.uiautomator`的apk
    $ python -m uiautomator2 init
    success

    最后提示success,代表atx-agent初始化成功。

    应用及操作

    调用uiautomator2的过程

    1. 配置手机设备参数,设置具体操作的是哪一台手机
    2. 抓取手机上应用的控件,制定对应的控件来进行操作
    3. 对抓取到的控件进行操作,比如点击、填写参数等。

    配置手机设备参数

    python-uiautomator2连接手机的方式有两种,一种是通过WIFI,另外一种是通过USB。两种方法各有优缺点。
    WIFI最便利的地方要数可以不用连接数据线,USB则可以用在PC和手机网络不在一个网段用不了的情况。

    1. 使用WIFI连接

      手机获取到手机的IP,并确保电脑可以PING通手机。手机的IP可以在设置-WIFI设置里面获取到。
      比如手机的IP是172.16.222.55

      ,连接设备的代码为

      import uiautomator2 as u2
      d = u2.connect('172.16.222.55:5555')
    2. 使用USB连接

      手机的序列号可以通过adb devices获取到,假设序列号是123456f,连接代码为

      import uiautomator2 as u2
      d = u2.connect_usb('123456f')

    抓取手机上应用的控件

    虽然很想用Android SDK内置工具uiautomatorviewer.bat,但是运行uiautomator2的时候,uiautomatorviewer.bat运行不起来,两者之间冲突太严重。
    于是参考着uiautomatorviewer的界面,我又写了一个weditor,调用python-uiautomator2的两个接口screenshotdump_hierarchy这样就不会有冲突问题了

    注:weditor依然处于开发期,功能可能会跟文中描述的有所不同

    安装方法: pip install --pre weditor

    使用方法: 
    首先运行python -m weditor,之后浏览器会自动打开一个网页 http://localhost:17310/ (注:这个网址仅提供一个前端,而python -mweditor这个命令则本地开放了HTTP的接口,前端去跟本地的服务去通信)

    下图为网页的截图

    重点说下这个部分

    先忽略iOSNeco这两个,直接选择Android。输入框中可以写设备的IP或者设备的Serial(序列号),跟上面提到的配置手机设备参数用法一致。之后点击Connect,如果一切正常就会出现一个绿色的叶子。

    页面刷新时,点击蓝色的Reload按钮重新刷新。

    定位方式

    1. ResourceId定位: d(resourceId="com.smartisanos.clock:id/text_stopwatch").click()
    2. Text定位 d(text="秒表").click()
    3. Description定位 d(description="..").click()
    4. ClassName定位 d(className="android.widget.TextView").click()

    xpath定位并不支持,一开始打算做支持的,但是发现不用也能搞定。就是代码写的长一点而已。

    操作控件

    # click
    d(text="Settings").click()

    # long click
    d(text="Settings").long_click()

    # 等待元素的出现
    d(text="Settings").wait(timeout=10.0)

    中文字符的输入
    如果可以定位到元素,直接通过set_text就可以输入中文

    d(text="Settings").set_text("你好")

    如果定位不到元素需要使用send_keys方法,以及切换输入法

    d.set_fastinput_ime(True)
    d.send_keys("你好 Hello")
    d.set_fastinput_ime(False) # 输入法用完关掉

    截图:d.screenshot("home.jpg")
    获取图层信息:xml = d.dump_hierarchy()

    还有太多太多的操作,我就不写了。更多更详细的API接口文档,直接去Github上看文档吧

    https://github.com/openatx/uiautomator2

    UIautomator2的安装

    1、安卓python 库

    # 安装 uiautomator2(PC端)
    pip3 install -U uiautomator2
    # 连接USB,执行下面命令后,会在手机上安装一个ATX的app
    python -m uiautomator2 init
    

    注意:安装失败的先看看是不是网络问题,可以参考github:https://github.com/openatx/uiautomator2

    2、安装后验证

    直接新建Python文件,内容为:

    import uiautomator2 as u2
    d = u2.connect() # 连接设备
    print(d.info)

    输出电脑连接的安卓手机

    {'udid': '4796676d-30:94:35:6f:28:75-V1914A', 'version': '9', 'serial': '4796676d', 'brand': 'vivo', 'model': 'V1914A', 'hwaddr': '30:94:35:6f:28:75', 'port': 7912, 'sdk': 28, 'agentVersion': '0.9.1', 'display': {'width': 1080, 'height': 2340}, 'battery': {'acPowered': False, 'usbPowered': False, 'wirelessPowered': False, 'status': 3, 'health': 2, 'present': True, 'level': 86, 'scale': 100, 'voltage': 4154, 'temperature': 270, 'technology': 'Li-poly'}, 'memory': {'total': 5695384, 'around': '5 GB'}, 'cpu': {'cores': 8, 'hardware': 'Qualcomm Technologies, Inc SDM845'}, 'arch': '', 'owner': None, 'presenceChangedAt': '0001-01-01T00:00:00Z', 'usingBeganAt': '0001-01-01T00:00:00Z', 'product': None, 'provider': None}

    3、安装辅助编辑器weditor

    # 安装
    pip install --pre --upgrade weditor
    # 启动
    命令启动
    python3 -m weditor
    #也可以安装时生成一个桌面快捷方式
    
    

    4、定位方式

    1. ResourceId定位: d(resourceId="com.smartisanos.clock:id/text_stopwatch").click()
    2. Text定位 d(text="秒表").click()
    3. Description定位 d(description="..").click()
    4. ClassName定位 d(className="android.widget.TextView").click()

    xpath定位并不支持,一开始打算做支持的,但是发现不用也能搞定。就是代码写的长一点而已。

    5、操作控件

    # click
    d(text="Settings").click()

    # long click
    d(text="Settings").long_click()

    # 等待元素的出现
    d(text="Settings").wait(timeout=10.0)

    中文字符的输入
    如果可以定位到元素,直接通过set_text就可以输入中文

    d(text="Settings").set_text("你好")

    如果定位不到元素需要使用send_keys方法,以及切换输入法

    d.set_fastinput_ime(True)
    d.send_keys("你好 Hello")
    d.set_fastinput_ime(False) # 输入法用完关掉

    截图:d.screenshot("home.jpg")
    获取图层信息:xml = d.dump_hierarchy()

     

  • 相关阅读:
    【NIPS 2018】完整论文下载链接
    【今日CV 视觉论文速览】30 Nov 2018
    【超好玩的在线AI项目】浏览器里玩AI------持续更新
    hdu 4035 Maze 概率DP
    hdu 4089 Activation 概率DP
    hdu 4405 Aeroplane chess 概率DP
    zoj 3329 One Person Game 概率DP
    poj 2096 Collecting Bugs 概率DP
    poj 3744 Scout YYF I
    2013 Multi-University Training Contest 5 Partition
  • 原文地址:https://www.cnblogs.com/hancece/p/13740065.html
Copyright © 2020-2023  润新知