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

  • 相关阅读:
    C语言常用库函数
    UVA
    ctf pwn题目的部署
    关于MongoDB
    线程的阻塞 sleep() wait() yield()
    Java线程阻塞方法sleep()和wait()精炼详解
    Java并发编程:volatile关键字解析
    Netty之ChannelOption的各种参数之EpollChannelOption.SO_REUSEPORT
    netty全局分析1
    深入了解几种IO模型(阻塞非阻塞,同步异步)
  • 原文地址:https://www.cnblogs.com/sc912/p/11284660.html
Copyright © 2011-2022 走看看