分享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)







使用小結

 

    • 使用 DownEventUpEvent 、 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM