分享 1 個模擬各種複雜的滑動或手勢操作的方法,趕緊學起來~
此文章來源於專案官方公眾號:“AirtestProject”
版權宣告:允許轉載,但轉載必須保留原連結;請勿用作商業或者非法用途
前言
滑動操作千千萬,你是否會遇到過使用 swipe
和 drag_to
都實現不了的滑動情況?或者你有沒有為手勢操作不知道如何模擬而苦惱的時候呢?
比如模擬長按刪除操作,再比如模擬安卓的多指手勢操作等等,這些操作用 swipe
、 drag_to
等方法,都不能滿足大家的實際需求。
所以今天想跟大家一起來學習下airtest的 basetouch
模組。這個模組提供了很多 底層的 點選、滑動等操作,用這個模組的方法或者類,我們可以輕鬆模擬出各種 自定義 的點選、滑動甚至其它手勢操作。下文我們將詳細瞭解下這個模組以及如何在實際的應用場景中使用這個模組。
basetouch
模組介紹
我們常使用的 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
操作。
PS:以下案例都基於airtest1.1.6,請同學們將IDE更新到最新的1.2.6版本,或者使用本地環境的同學請將本地環境的airtest更新到最新的1.1.6版本。
案例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個手指。
# 案例二
# 雙指點選螢幕
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:模擬三指滑動
三根手指同時在裝置螢幕上滑動一定距離。
# 案例三
# 三指滑動
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)
去執行這個動作列表,完成手勢操作的模擬
Airtest官網:airtest.netease.com/
Airtest教程官網:airtest.doc.io.netease.com/
搭建企業私有云服務:airlab.163.com/b2b
相關文章
- 9012 年了,Array 陣列的方法趕緊用起來!陣列
- 9102年了,Array陣列的方法趕緊用起來!陣列
- 常用API大全分享!趕緊收藏起來!API
- 超級實用的Excel技巧,不會的趕緊get起來Excel
- 各類好用的API推薦,趕緊收藏API
- Android模擬器啟動不起來的原因Android
- PHP 檔案操作的各種姿勢PHP
- 免費api分享,趕緊收藏~API
- Selenium系列教程-07 使用Actions類模擬複雜操作
- 被騰訊問蒙的各種Redis複雜問題Redis
- 模擬oracle裡的各種型別的壞塊Oracle型別
- Android 的滑動分析以及各種實現Android
- 前端模擬使用者的複製操作前端
- 知物由學 | 用案例起底黑灰產的各種“騷”操作
- 最適合練手30個的機器學習開源專案,趕緊收藏!機器學習
- 知識更新太快,趕緊學
- 微軟手環2為微軟手環3讓路 蘋果趕緊學學吧!微軟蘋果
- 萌新必看|程式設計師在技術團隊一定要學會的7件事,趕緊學起來!程式設計師
- php 模擬POST提交的2種方法PHP
- 易被忽略的知識點之 ---- 各種時間複雜度和空間複雜度時間複雜度
- iOS模擬各種網路狀態iOS
- 年底了!你還在為年度總結掉頭髮嗎?那還不趕緊學起來~
- 分享銷售必備的獲客工具,銷售新人小白趕緊收藏起來!
- ADB模擬手機操作
- 計算電磁學及其在複雜電磁環境數值模擬中的應用和發展趨勢
- 聊聊Flutter中的常見滑動手勢衝突Flutter
- 明天面試?嚇得我趕緊手寫了一個Spring面試Spring
- 工作中常用的免費API,趕緊收藏起來~API
- Krafton新作能否帶起生活模擬類遊戲的未來?Raft遊戲
- Node.js模擬發起http請求從非同步轉同步的5種方法Node.jsHTTP非同步
- 關於春天主題的PPT模板,趕緊來get下吧!
- 『與善仁』Appium基礎 — 25、APP模擬手勢高階操作APP
- win10手機模擬器卡怎麼辦_win10手機模擬器卡頓嚴重修複方法Win10
- 寫一個 iOS 複雜表單的正確姿勢iOS
- JavaScript模擬表單(帶陣列的複雜資料結構)提交JavaScript陣列資料結構
- MySQL中處理各種重複的一些方法MySql
- 各種二埠濾波器網路模擬遇到的問題
- vue-router 手勢滑動觸發返回Vue