1. 程式人生 > 實用技巧 >分享1個模擬各種複雜的滑動或手勢操作的方法,趕緊學起來~

分享1個模擬各種複雜的滑動或手勢操作的方法,趕緊學起來~

我們常使用的minitouchmaxtouch,其共同的底層操作都來自於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)







使用小結

    • 使用DownEventUpEventSleepEventMoveEvent,可以分別模擬按下抬起等待移動這些基本操作;
    • 組合使用上述的“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