• APP自动化之uiautomator2 +python3 UI自动化


    题记: 之前一直用APPium直到用安卓9.0  发现uiautomatorviewer不支持安卓 9.0,点击截屏按钮 一直报错,百度很久解决方法都不可以,偶然间看见有人推荐:uiautomator2 就尝试使用 发现比appium要简单一些; 下面文字主要来自虫师的博客

    一、Uiautomator2原理介绍

    1.uiautomator2是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,目前仅支持android平台的原生应用测试,https://github.com/openatx/uiautomator2。但有两个缺点:

        测试脚本只能使用Java语言。
        测试脚本必须每次被上传到设备上运行。

    2.工作原理

    分为两个部分:

    PC上的python端:运行脚本,并向系统设备发送http请求

    移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。

    二、安装uiautomator2

    pip install --pre uiautomator2

    pip install pillow

    三、初始化

    部署相关的守护进程。

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

    python -m uiautomator2 init
    

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

    配置手机设备参数:

    有两种方法,一种是通过WIFI,另一种是通过USB数据线将手机链接电脑。 (我是通过USB这个方法,按照后手机会多一个ATX小汽车图标的软件)

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

    定位元素:

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

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

    1、安装:

    pip install --pre --upgrade weditor
    

    2、使用:

    python -m weditor
    

     如果不能成功打开,可以尝试先执行

    python -m uiautomator2 init
    
    python -m weditor
    

      

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

    下面这个跟用uiautomatorviewer定位元素是一样的 而且多了xpath的定位语句,用起来更方便,

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

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

    编写测试脚本 这里参考怎么去定位元素,在定位元素和启动APP 相对比APPium  要简单很多

    这里针对魅族社区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()

    小结:其实关注该项目已经好几个月了,目前该项目已经趋于稳定,整个测试环境的搭建过程也要比Appium简单得多。

    我是练习分割线


    在尝试对APP进行登录的时候发现一个问题,在用APPium 是可以隐藏键盘进行输入, 用uiautomator2 发现不可以 ,一直卡主键盘没法办收起来提交失败;

    最后尝试用物理返回,成功解决,

    下面尝试用uiautomator2 打开微信小程序并进行授权 代码如下:

    #链接设备
    driver = u2.connect_usb("XXXX")
    #打开APP
    driver.app_start("com.tencent.mm")
    
    time.sleep(3)
    #下拉操作
    driver.swipe(0.513,0.399, 0.513,0.6)
    #通过文本定位打开小程序
    driver(text="XX").click()

     打开APP,并进行登录:

    #定位driver
    driver = u2.connect_usb("L081")
    #启动app driver.app_start("com.XXX.XXXX")
    #通过id定位输入框输入账号密码 driver(resourceId="com.XXX.XXXX:id/login_username_et").set_text("test") driver(resourceId="com.XXX.XXXX:id/login_password_et").send_keys("123456") #通过物理返回,收齐键盘 driver.press("back") time.sleep(2) #点击登录 driver(resourceId="com.XXX.XXXX:id/login_commit_btn").click()

     疑问:在校验还没涉及  如果有朋友涉及  请不吝赐教,谢谢

    下面是原文链接和一些用法介绍:

    原文:

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

    用法:

    https://blog.csdn.net/ricky_yangrui/article/details/81415365

    官方文档:

    https://github.com/openatx/uiautomator2

  • 相关阅读:
    chattr
    chage命令
    passwd命令
    usermod命令
    userdel命令
    useradd命令
    信息热词分析系统重构
    pandas数据清洗
    python 中mysql数据库的读写
    java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
  • 原文地址:https://www.cnblogs.com/shoebill/p/10776353.html
Copyright © 2020-2023  润新知