以下基于
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)
---------------------------------------------------------------------------------
关注微信公众号即可在手机上查阅,并可接收更多测试分享~