以下基於
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)
---------------------------------------------------------------------------------
關注微信公眾號即可在手機上查閱,並可接收更多測試分享~