zoukankan      html  css  js  c++  java
  • UIAutomator2的API文档(三)

    1.UI对象识别器Selector

    用法d(text='Clock', className='android.widget.TextView')

    支持以下参数,详细信息可参考UiSelector Java doc

    text, textContains, textMatches, textStartsWith
    className, classNameMatches
    description, descriptionContains, descriptionMatches, descriptionStartsWith
    checkable, checked, clickable, longClickable
    scrollable, enabled,focusable, focused, selected
    packageName, packageNameMatches
    resourceId, resourceIdMatches
    index, instance

    #点击: 设置→个性主题 :

    方法一:

    d(description='设置', className='android.widget.ImageView').click()

    d(text='个性主题', className='android.widget.TextView').click()

    方法二:

    d(resourceId="com.miui.home:id/icon_title", text="设置").click()

    d.xpath('//*[@text="个性主题"]').click()

    2.获取UI对象状态及信息

    d(text="3D_H5").exists

    d.exists(text="3D_H5")

    d(text="3D_H5").info

    #获取/设置/清空编辑框内容

    d(description="请输入QQ号码或手机或邮箱").get_text()

    d(description="请输入QQ号码或手机或邮箱").set_text("1234")

    d(description="请输入QQ号码或手机或邮箱").clear_text()

    #获取控件中心位置坐标

    x,y=d(text="设置").center()

    #x,y = d(text="设置").center(offset=(0, 0)) # left-top x, y

    #在UI选中对象上执行点击事件

    d(text="设置").click(timeout=30)#最多延迟等待30秒,没找到该元素会抛出.UiObjectNotFoundError

    d(text="设置").click(offset=(0.5, 0.5)) #百分比表示方法 默认点击中心坐标

    d(text="设置").click(offset=(0, 0)) #点击坐标 左-上

    d(text="设置").click(offset=(1, 1)) #点击坐标 右-下

    d(text="设置").click_gone(maxretry=3, interval=1)#重复点击此元素3次,每次间隔1秒,若该元素消失则中止偿试并返回bool值

    d(text="设置").long_click(timeout=3)#长按指定元素对象3秒

    3.针对特定对象的手势动作

    #在xx秒内拖动指定对象到指定坐标点(或指定对象位置)

    d(text="设置").drag_to(500, 500, duration=0.1)

     d(text="设置").drag_to(text="安全中心", duration=0.2)

    #从UI对象的中心位置开始移动到它的边缘

    支持4个方向:left,right,top,down

    使用方法:d(text="设置").swipe("up",steps=100)#1 steps大约5ms,10 steps大约0.5秒,是一个按下→移动→弹起的过程。试了一下:steps太短上/上滑动等于单击,左/右移动等于快速滑动

    #等待指定的对象出现,并返回bool值

    d(text="设置").wait(timeout=3)#3秒内”设置“对象出现返回true,否则返回false

    #等待指定的对象消失,并返回bool值

    d(text="设置").wait(timeout=3)#3秒内”设置“对象消失”返回true,否则返回false

    这个有两种情况1.如果当前界面无此对象,则直接返回false;2.如果当前界面有此对象,3内消失(最长等待3秒)返回true;否则返回false

    #界面飞轮操作(就是按住滑一下,类似 鼠标滚轮滑动一次的行/列数)

    #垂直滚动:

    d(scrollable=True).fling()#默认垂直滚动条.vert可省略 为了可读性可加上,向下滚动

    d(scrollable=True).fling.toEnd() 或 d(scrollable=True).fling.vert.toEnd()#垂直滑动:滑到最底部

    d(scrollable=True).fling.toBeginning() 或 d(scrollable=True).fling.vert.toBeginning()#垂直滑动:滑到顶部

    d(scrollable=True).fling.vert.forward()#垂直向上滑动

    d(scrollable=True).fling.vert.backward()#t垂直向下滑动

    #水平滚动(比如打开网页baidu,会在顶部的各个分类页签上切换):

    d(scrollable=True).fling.horiz.toBeginning()#向左滑动

    d(scrollable=True).fling.horiz.toEnd()#向右滑动

    d(scrollable=True).fling.horiz.forward()#向左滑动

    d(scrollable=True).fling.horiz.backward(max_swipes=1000)#向右滑动

    #scroll滚动条操作

    d(scrollable=True).scroll(steps=10)#默认垂直,向上滑动

    d(scrollable=True).scroll.horiz.forward(steps=100)#向右滑动,1 steps约20ms

    d(scrollable=True).scroll.vert.backward()#垂直:向下滑动

    d(scrollable=True).scroll.horiz.toBeginning(steps=100, max_swipes=1000)#水平,向左滑动

    d(scrollable=True).scroll.toEnd()#垂直:向下滑动到底部

    #滚动直到指定的对象页面出现为止

    d(scrollable=True).scroll.to(text="琅琊榜")#垂直的挺准

    d(scrollable=True).scroll.horiz.to(text="琅琊榜")#这个水平的没搞明白……感觉不准确

    4.监视器Watcher

    #测试机为华为P7-安卓7.0

    import uiautomator2 as u2
    serialno = 'KWG5T16603013752'
    apk = 'http://ip/test/eg.apk'
    d = u2.connect_usb(serialno)
    d.implicitly_wait(10.0)
    d.watcher("ok").when(text="仅允许本次安装").click()#创建监视器
    d.watcher("ins").when(text="安装").click()#创建监视器
    d.watchers.watched=True#启动监视器
    d.app_install(apk)#安装app
    print("all watchers:",d.watchers,d.watchers.triggered)#打印所有监视器
    d.watchers.reset()#重置监视器
    print("reset watchers:",d.watchers.triggered)
    d.watchers.remove("ins")#移除指定监视器
    print("reomve_ins.watcher",d.watchers)
    d.watchers.remove()#移除所有监视器
    print("remove_all.watcher",d.watchers)

    5.使用adb广播输入消息

    d(text="备忘录", className="android.widget.TextView").click()
    d(text="新建", className="android.widget.TextView").click()
    d.set_fastinput_ime(True) # 切换成FastInputIME输入法
    d.send_keys("你好hello") # adb广播输入
    d.clear_text() # 清除输入框所有内容
    d.set_fastinput_ime(False) # 切换成正常的输入法
    d.send_action("search") # 模拟输入法的搜索

    send_action 说明
    该函数可以使用的参数有 go search send next done previous

    6.Toast显示和Xpath识别对象

    参考文章:UI2-xpath扩展W3CSchoolXpathxpath路径表达式xpath快捷管理xpath高级用法

    # -*- coding: utf-8 -*-
    import uiautomator2 as u2
    serialno = '7f3dec60' # device adb serial
    d = u2.connect_usb(serialno)

    #比如操作微信底部按钮菜单,RelativeLayout[1]微信,[2]通讯录,[3]发现,[4]我
    sl=d.xpath('//*[@resource-id="com.tencent.mm:id/bq"]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[3]').get()#
    x,y=sl.center()
    d.long_click(x,y)
    '''
    sl=d.xpath('//*[@resource-id="com.tencent.mm:id/li"]')#操作搜索框
    print(sl.exists,sl.get_last_match(),sl.get_text())
    sl.set_text("hello world")#搜索框发送内容

    if d(text="文章", className="android.widget.TextView").exists():#Selector搜索文本
    print("Got it-1 article")
    if d(resourceId="com.tencent.mm:id/c2t", className="android.widget.TextView").exists():#搜索id
    print("Got it-2 article")

    if d.xpath('//*[@text="文章"]').exists:
    print("Got it-3 article")
    if d.xpath('//*[@resource-id="com.tencent.mm:id/c2t"]').exists:
    print("Got it-4 article")

    if d(resourceId="com.tencent.mm:id/c2t", text="文章").exists():
    print("Got it-5 article")
    if d(resourceId="com.tencent.mm:id/c2t", text="音乐").exists():
    print("Got it-6 music")
    '''

    #Toast消息显示

    #d.toast.show("Hello world")
    d.toast.show("Hello world", 1.0) # show for 1.0s, default 1.0s
    #下边的get方法报错了
    #d.toast.get_message(5.0, 10.0, "default message")
    #assert "Short message" in d.toast.get_message(5.0, default="")
    # clear cached toast
    #d.toast.reset()
    # Now d.toast.get_message(0) is None

  • 相关阅读:
    「日常训练」Single-use Stones (CFR476D2D)
    「日常训练」Greedy Arkady (CFR476D2C)
    「Haskell 学习」二 类型和函数(上)
    「学习记录」《数值分析》第二章计算实习题(Python语言)
    「日常训练」Alena And The Heater (CFR466D2D)
    Dubbo 消费者
    Dubbo 暴露服务
    Rpc
    git fail to push some refs....
    Spring Cloud (6)config 客户端配置 与GitHub通信
  • 原文地址:https://www.cnblogs.com/sc912/p/11284660.html
Copyright © 2011-2022 走看看