分享1個模擬各種複雜的滑動或手勢操作的方法,趕緊學起來~
我們常使用的minitouch
和maxtouch
,其共同的底層操作都來自於basetouch
。舉個例子,之前我們在“用airtest做滑動解鎖怎麼搞?其實很簡單!”這篇推文中,也有詳細介紹過basetouch
模組裡面的一些介面:
- 實現連續劃過一系列座標的
swipe_along
介面 - 實現雙指捏合操作的
pinch
介面 - 實現雙指同時滑動的
two_finger_swipe
介面
除了這些介面以外,今天我們重點要了解的是這個模組裡面的4個類:
DownEvent(coordinates, contact=0, pressure=50)
UpEvent(contact=0)
MoveEvent(coordinates, contact=0, pressure=50)
SleepEvent(seconds)
呼叫這4個類,理論上可以拼接組合出來所有的手勢操作。我們舉個簡單的例子:比如touch
介面,就是先呼叫DownEvent
,實現點下某個座標點,然後再呼叫SleepEvent
,停頓0.01s, 最後呼叫UpEvent
,實現抬起操作,拼接這三個“event”,就組成了1個完整的touch
操作。
1
案例1:長按刪除某個應用
我們先來分解下長按刪除應用的整個操作,首先是長按某個應用不鬆手,然後再把應用滑動到垃圾桶的位置,最後點選彈窗的確認按鈕即可完成刪除應用的操作。如果使用封裝好的介面來實現,先使用long_click
,再使用swipe
,是完成不了這個任務的。因為long_click
basetouch
裡面的4個 "event" 來拼接實現:
from airtest.core.android.touch_methods.base_touch import * dev = device() # 案例一 # 長按刪除應用 longtouch_event = [ DownEvent([908, 892]),# 待刪除應用的座標 SleepEvent(2), MoveEvent([165,285]),# 刪除應用的垃圾桶座標UpEvent(0)] dev.touch_proxy.perform(longtouch_event) # 取消解除安裝 poco("android:id/button2").click()
2
案例2:雙指點選螢幕的不同座標
模擬2個手指分別點選螢幕上的不同座標,然後再鬆開2個手指。
# 案例二 # 雙指點選螢幕 multitouch_event = [ DownEvent([335, 1383], 0), DownEvent([629, 1345], 1), # 第二根手指 SleepEvent(1), UpEvent(0), UpEvent(1)] dev.touch_proxy.perform(multitouch_event) sleep(1.0)
3
案例3:模擬三指滑動
三根手指同時在裝置螢幕上滑動一定距離。
# 案例三 # 三指滑動 swipe_event2 = [DownEvent((100, 300), 0), DownEvent((100, 500), 1), DownEvent((100, 700), 2), SleepEvent(0.1)] for i in range(5): swipe_event2.append(MoveEvent((100 + 100*i, 300), 0))# 第一根手指 swipe_event2.append(MoveEvent((100 + 100*i, 500), 1))# 第二根手指 swipe_event2.append(MoveEvent((100 + 100*i, 700), 2))# 第三根手指 swipe_event2.append(SleepEvent(0.2)) swipe_event2.append(UpEvent(0)) swipe_event2.append(UpEvent(1)) swipe_event2.append(UpEvent(2)) dev.touch_proxy.perform(swipe_event2)
使用小結
- 使用
DownEvent
、UpEvent
、SleepEvent
和MoveEvent
,可以分別模擬按下、抬起、等待和移動這些基本操作; - 組合使用上述的“event”,可以模擬各種複雜的手勢操作;
DownEvent((100, 300), 0)
,座標後面的0代表第1根手指,依次類推,DownEvent((100, 500), 1)
座標後面的1代表第2根手指;- 組合使用“event”的常見方式:把1個手勢所需要的各個動作按順序儲存到1個列表(例如
swipe_event
)裡面,最後使用device().touch_proxy.perform(swipe_event)
去執行這個動作列表,完成手勢操作的模擬
內容來自官方推文:
https://mp.weixin.qq.com/s?__biz=MzUxMDc4NTkwMA==&mid=2247485191&idx=1&sn=035a8358df234047f6cf5b330cfd9df9&chksm=f97ce704ce0b6e120bcaa235b23d92d1d5282b33d84d4c3ec63b84d9319baeff64683aa321d0&mpshare=1&scene=23&srcid=1104k8fNVWXYhzaypA9Dh2Um&sharer_sharetime=1604478345004&sharer_shareid=d7c76ec50dd2ddd1acf1ab3095badbf0#rd