• Airtest API精讲之touch()


    上期回顾:Airtest源码分析--图像识别整体流程


    以下基于
    python3.8;airtestIDE1.2.11;airtest1.2.2;pocoui1.0.83

    首先明确一点,我们今天要讲的是Airtest框架的touch(),不是Poco框架的,一般我们说Airtest,其实应该指的是Airtest Project,具体这些概念的关系是什么,可以看之前文章:Airtest Project——UI自动化利器介绍

    touch()的文档之前在Airtest核心API汇总已经写过,这里再复制一遍。

    touch(v, times=1, **kwargs)
    在当前设备上进行点击

    参数:
    v        – 点击位置,可以是一个 Template 图片实例,或是一个绝对坐标 (x, y)
    times  – 点击次数
    kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档

    返回:
    实际点击位置坐标 (x, y)

    支持平台:
    Android, Windows, iOS

    在讲实际用法前,我们先来看下touch()的源码:

     1# 文件位置:your_python_path/site-packages/airtest/core/api.py
    2def touch(v, times=1, **kwargs):
    3    if isinstance(v, Template):
    4        pos = loop_find(v, timeout=ST.FIND_TIMEOUT)
    5    else:
    6        try_log_screen()
    7        pos = v
    8    for _ in range(times):
    9        G.DEVICE.touch(pos, **kwargs)
    10        time.sleep(0.05)
    11    delay_after_operation()
    12    return pos
    13
    14click = touch  # click is alias of touch

    touch支持点击坐标或图片,所以第一个参数v既可以是一个Template图片实例,也可以是一个绝对坐标(x, y)。

    • 传入图片的情况,如果你是使用的AirtestIDE,只需简单操作,IDE会自动帮你生成Template实例代码。(touch在AirtestIDE中的用法可以看AirtestIDE基本功能(一))这里再强调一下,如果嵌入Windows应用,框选后还要再双击截图,IDE才会生成touch语句。如果你不是通过AirtestIDE自动生成代码,而想自己写,或者在生成之后还想改下代码,可以看之前的Template文章Airtest-API精讲之Template

    • 如果是传入的绝对坐标,写成tuple(x,y)或list[x,y]都可以。

    第3行if isinstance(v, Template)就是判断这个v是不是Template,如果是图片,则通过loop_find()找到坐标并赋值给pos(loop_find的逻辑可以看之前文章Airtest源码分析--图像识别整体流程),如果是坐标则直接赋值给pos

    第8行for _ in range(times),循环time次。

    第9行G.DEVICE.touch(pos, **kwargs),执行当前设备的touch()方法,Android、Windows、iOS的touch内部逻辑是不一样。

    第12行,返回坐标,这个主要是针对传入图片的情况。

    第14行,把touch赋值给chick。主要是在不同软件不同平台上,点击有时叫touch,有时叫click,那在Airtest中还是叫touch,但你用click也行。

    实例演示

    点击某个图片

    1# 代码模式
    2touch(Template(r"tpl1632195655122.png", record_pos=(-0.238, -0.512), resolution=(1080, 2340)))

    点击某个绝对坐标

    1touch([150,876])
    2touch((150,876))

    长按3秒

    duration参数是点击的时长,默认是0.01。

    1# 代码模式
    2touch(Template(r"测试工程师小站.png", record_pos=(-0.238, -0.512), resolution=(1080, 2340)),duration=3)
    3
    4touch((150,876),duration=3)

    点击3次

    times参数是点击次数,默认为1。

    1# 代码模式
    2touch(Template(r"测试工程师小站.png", record_pos=(-0.238, -0.512), resolution=(1080, 2340)),times=3)
    3
    4touch((150,876),times=3)

    右键点击(Windows专有)

    Windows平台下的touch可以传入right_click这个参数,默认值为False,如果是要鼠标右键点击,给right_click赋值为True即可。

    1# 代码模式
    2touch(Template(r"windows.png", record_pos=(-0.238, -0.512), resolution=(1080, 2340)),right_click=True)
    3
    4touch((150,876),right_click=True)

    ---------------------------------------------------------------------------------

    关注微信公众号即可在手机上查阅,并可接收更多测试分享~

  • 相关阅读:
    [Oracle工程师手记]Linux环境中,反复调用SQLPLUS 执行SQL语句的例子
    [Oracle工程师手记] 记一次 transport lag 的解析
    [Oracle工程师手记] V$ARCHIVE_GAP中的 GAP 何时产生?
    [Oracle 工程师手记] nologging 操作的优先级
    [Oracle 工程师手记] ORA-16642: DB_UNIQUE_NAME mismatch 的解决过程
    [Oracle 工程师手记] 如何构造数据库的 log on trigger
    Groovy调用MD5加密
    Jenkins Pipeline调用 httpRequest插件提交Http请求
    Python调用Jenkins接口批准/拒绝Pipeline流程
    Access 的top和order by 的问题
  • 原文地址:https://www.cnblogs.com/songzhenhua/p/15388609.html
Copyright © 2020-2023  润新知