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

    检查并维持设备端守护进程处于运行状态,应该是重启了atx守护进程:d.healthcheck()

    1.隐式等待

    import uiautomator2 as u2
    serialno = '7f3dec60'
    d = u2.connect_usb(serialno)
    d.implicitly_wait(3.0)

    #3秒内未找到“搜索”按钮,则抛出错误uiautomator2.exceptions.UiObjectNotFoundError: -32002 Client error: <> data: , method: None

    #此函数会影响以下事件clicklong_clickdrag_toget_textset_textclear_tex

    d(text="搜索").click()#找到此按钮则直接点击

    2.App启停基本操作

     2.1安装app(仅支持从URL安装apk):d.app_install('http://some-domain.com/some.apk')

       卸载app:d.app_uninstall(pk_name)

     2.2启动app:d.app_start(package_name)

     2.3停止app:d.app_stop(package_name) #等同于`am force-stop`强制停止app,可能会丢失数据

                             d.app_clear(package_name)#等同于`pm clear`

     2.4停止所有app:d.app_stop_all(excludes=[package_name])#停止所有app除了括号内的,括号内容可选

     2.5获取app信息:d.app_info(package_name)

       保存app icon:img=d.app_icon(pkname)

             img.save("icon.png")

    3.文件推送/拉取

     3.1推送文件到设备中:d.push("foo.txt", "/sdcard/")

     3.2推送文件并重命名:d.push("foo.txt", "/sdcard/bar.txt")

     3.3推送文件对象:with open("foo.txt", 'rb') as f:

             d.push(f, "/sdcard/")

     3.4推送并改变文件访问权限:d.push("foo.sh", "/data/local/tmp/", mode=0o755)  

     3.5从设备中拉取文件到本地:d.pull("/sdcard/tmp.txt", "tmp.txt")

     3.6从设备中拉取的文件不存在时 抛出错误:FileNotFoundError:d.pull("/sdcard/some-file-not-exists.txt", "tmp.txt")

    这里顺便说下快速获取apk相关包名信息的一些简易方法

    a.获取包名:d.app_stop_all(),会列出一个当前打开的所有app的包名列表;

     print(d.current_app()) 打印当前运行的app信息

    b.命令行打印安装的所有包:adb shell pm list packages -3

    c.打印安装包路径:adb shell pm path "包名"

    d.打印安装包信息:aapt d badging "apk包路径"

    4.自动点击权限对话框

    官方说:disable_popups函数,检测发现很不稳定,暂时不要使用--一会儿试试看

    d.disable_popups() #自动跳过弹出框

    d.disable_popups(False) # 禁用自动跳过

    如果此方法无法在你的设备上运行,可以按如下步骤操作获取控件

      4.1打开Open uiautomatorviewer.bat

      4.2获取弹出框hierarchy

    5.执行shell命令

    output, exit_code = d.shell("pwd", timeout=60) # timeout 60s (Default)
    # output: "/ ", exit_code: 0
    # Similar to command: adb shell pwd

    # Since `shell` function return type is `namedtuple("ShellResponse", ("output", "exit_code"))`
    # so we can do some tricks
    output = d.shell("pwd").output
    exit_code = d.shell("pwd").exit_code
    The first argument can be list. for example

    output, exit_code = d.shell(["ls", "-l"])
    # output: "/....", exit_code: 0

    6.通过会话操作app

    启动微信:sess=d.session("com.tencent.mm")

    停止微信:sess.close()

    使用python操作app,打开微信→点击腾讯新闻→关闭app

    with d.session("com.tencent.mm") as sess:
      sess(text="腾讯新闻").click()

    添加app到正在运行状态:sess=d.session("包名",attach=True)

    检查app运行状态:sess.running()  #返回True或False

    7.获得设备基本信息

    设备概要信息:d.info  

    设备详细信息:d.device_info

    设备窗口尺寸:d.window_size()   

    当前运行app信息:d.current_app()  

    设备序列号:d.serial

    设备Wlanip:d.wlan_ip  

    等待Activity:d.wait_activity("com.tencent.mm.ui.LauncherUI",timeout=5)#若不设置默认超时10秒,返回True or False

  • 相关阅读:
    Java子类和父类之间方法和属性关系
    静态链接库与动态链接库
    两人相遇问题时间段
    try catch finally
    shell判断条件参数过多
    python C++ Java 文件数据库等流操作,当打开后必须关闭
    CSS3 target 伪类不得不说那些事儿(纯CSS实现tab切换)
    清浮动方法
    this函数的理解
    css3 tranform  transition animation
  • 原文地址:https://www.cnblogs.com/sc912/p/11279228.html
Copyright © 2011-2022 走看看