zoukankan      html  css  js  c++  java
  • ATX agent+UIautomation2 自动化测试介绍

    纯搬运贴,内容几乎来源于作者的几篇介绍文章,这里做了整合

    目前ATX+UIautomator2 处于自动化界的浪口风尖,现在有幸终于有时间对ATX进行了粗浅的了解

    为什么要用ATX

    ATX+UIautomator2的优势:

    1.速度吊打appnium,群里面的人这样说的

      • 运行速度快,比Appium运行速度快了好多。(用户表示不知道ATX为什么快,PS(作者): 我其实也不知道appium为什么这么慢)
      • 部署和使用比较简单 (当初就是朝着这个方向开发的)
        最开始笔者在部署appium的时候,花了一整天的时间,最终还是部署好了。但后来还是放弃了,因为想到要部署这么多台机器,还不如自己开发一个测试框架来的方便(当时的需求也比较简单)

    2.即使是id,text相同的控件也能随意指定哪一个进行点击操

    d(resourceId="com.tencent.wecarnews:id/radio_list_item_frequency")[0].get_text()/click()
    
    d(resourceId="com.tencent.wecarnews:id/radio_list_item_frequency", instance=1).get_text()

    3.能获取到控件的安卓原生属性

    d(text="Settings").info

    {
    u’contentDescription’: u’’,
    u’checked’: False,
    u’scrollable’: False,
    u’text’: u’Settings’,
    u’packageName’: u’com.android.launcher’,
    u’selected’: False,
    u’enabled’: True,
    u’bounds’: {u’top’: 385,u’right’: 360,u’bottom’: 585, u’left’: 200},
    u’className’: u’android.widget.TextView’,
    u’focused’: False,
    u’focusable’: True,
    u’clickable’: True,
    u’chileCount’: 0,
    u’longClickable’: True,
    u’visibleBounds’: {u’top’: 385,u’right’: 360, u’bottom’: 585,u’left’: 200},
    u’checkable’: False
    }

    4.能拿到toast信息

    a = d.toast.get_message(5.0, 10.0, "default message")
    print(a)

    5.处理弹窗,还是显性等待

    d.watcher("INSTALL").when(text="安装").click()
    d.watcher("NEXT").when(text="下一步").click()
    d.watchers.watched = True

    优势还有很多,目前总结到这里

    UIautomator安装

    pip install -U --pre uiautomator2

    初始化

    python -m uiautomator2 init

    一切准备就绪后,就可以进行预约的自动化之旅了!

    这里贴一段官方的demo

    # coding: utf-8
    import unittest
    import uiautomator2 as u2
    import time
    import uiautomator2.ext.htmlreport as htmlreport
    
    class TestCloudMusic(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            cls.u = u2.connect_usb()
            cls.u.healthcheck()  # 解锁屏幕并启动uiautomator服务
            hrp = htmlreport.HTMLReport(cls.u, 'report')
            hrp.patch_click()
    
            # cls.u.disable_popups(True)  # 允许自动处理弹出框
            cls.u.make_toast("测试开始", 3)
    
        @classmethod
        def tearDownClass(cls):
            cls.u.make_toast("测试结束", 3)
            cls.u.app_stop_all()
            cls.u.service(
                "uiautomator").stop()  # 停止uiautomator守护程序,允许其他测试框架如 appium 运行
    
        def setUp(self):
            self.d = self.u.session("com.netease.cloudmusic")  # restart app
            time.sleep(5)  # 等待首页广告结束
    
        def tearDown(self):
            pass
    
        def testPrivateFM(self):  # 私人FM
            self.d(text="私人FM").click()
    
        def testRecommendEveryday(self):  # 每日推荐
            self.d(text="每日推荐").click()
    
    
    if __name__ == '__main__':
        unittest.main()

    一些简单的使用方法介绍:

    定位方式

    ResourceId定位: d(resourceId="com.smartisanos.clock:id/text_stopwatch").click()

    Text定位 d(text="秒表").click()

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

    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) # 输入法用完关掉

    如果感兴趣,更多详细的api和最新的信息请见项目 https://github.com/openatx/uiautomator2

    如果喜欢,请给作者一个start☆,这是对作者付出的一种肯定,反正我是给了

  • 相关阅读:
    ES6中的类
    promise小案例
    Promise.resolve()与Promise
    Promise.resolve( data)与Promise.reject( data )
    Promise.race()
    Promise.all()
    咦?浏览器又崩了?再试试这个呢!
    页面太卡了?试试这方法呢!
    js进阶之重复的定时器
    关于vue+element-ui项目的分页,返回默认显示第一页的问题解决
  • 原文地址:https://www.cnblogs.com/semishigure/p/11376690.html
Copyright © 2011-2022 走看看