版權聲明:允許轉載,但轉載必須保留原鏈接;請勿用作商業或者非法用途
此文章來源於項目官方公眾號:“AirtestProject”
前言
如同點擊操作一樣,滑動操作也是測試過程中非常常用的操作。下文將向大家講述Airtest
和poco
下的swipe
如何使用以及應用swipe
解決跳過APP介紹頁和連續滑動等實際應用的問題。
Airtest下的swipe接口
swipe
接口實現在當前設備畫面上進行一次滑動操作,它支持的平台有Android
、IOS
和Windows
。參數如下:
- v1 – 滑動的起點,可以是一個Template圖片實例,或是絕對坐標 (x, y)
- v2 – 滑動的終點,可以是一個Template圖片實例,或是絕對坐標 (x, y)
- vector – 滑動動作的矢量坐標,可以是絕對坐標 (x,y) 或是屏幕百分比,例如 (0.5, 0.5)
- **kwargs – 平台相關的參數
kwargs
swipe
有兩種傳入參數的方式:
- 從 v1 滑動到 v2,
swipe(v1, v2)
,例如:
swipe((672,1214),(336,1305))
- 從 v1 開始滑動,沿着vector方向,
swipe(v1, vector=(x, y))
,例如:
swipe(Template(r"tpl1574067097045.png", record_pos=(0.042, 0.145), resolution=(1080, 1920)), vector=[-0.2666, -0.0005])
當沒有足夠的參數來執行滑動時會引發Exception
,比如當我們只向swipe接口傳入1個參數時,運行報告就會如下圖所示:
Android和IOS平台
除了上述參數以外,swipe
在Android
和IOS
平台下,還有幾個比較特別的參數:
- duration – 在屏幕上滑動的時長,默認是0.5
- steps – 滑動過程中的步數,默認為5
- fingers – 滑動的手指數量,1或者2,默認為1
如果你想自定義滑動,比如把滑動時長改為1,滑動步數改為6,並且用兩只手指滑動,可以向下面這樣依次把參數傳進去:
swipe((672,1214),(336,1305),duration=1,steps=6,fingers=2)
Windows平台
與Android
和IOS
平台不同的是,Windows
平台下的swipe
接口只有duration
和steps
這倆個平台相關的參數;並且duration
默認為0.8。
poco下的swipe接口
在poco
框架下,swipe
是從一個UI開始,滑動到某個點或朝着某個方向滑動一段距離。 我們既可以選中UI來執行swipe
,也可以不選中UI執行swipe
:
# coding=utf-8 from poco.drivers.unity3d import UnityPoco poco = UnityPoco() # 選中UI執行swipe # 向上滑動列表視圖 poco('Scroll View').swipe([0, -0.1]) # 與上面這條代碼一樣, 並且還可以傳入down/left/right poco('Scroll View').swipe('up') # 向下滑動列表視圖 poco('Scroll View').swipe('down') # 不選中UI執行swipe x, y = poco('Scroll View').get_position() end = [x, y - 0.1] dir = [0, -0.1] # 從點A滑動到點B poco.swipe([x, y], end) # 從點A沿着一定的方向滑動一段距離 poco.swipe([x, y], direction=dir)
當選中UI執行swipe
時,swipe
默認的起點是選中UI的錨點(即UI的中心點),那么只要像上述代碼一樣,給swipe
傳入一個終點坐標或者滑動方向和距離即可。
當不選中UI執行swipe
時,就需要給swipe
傳入完整的起點和終點坐標,或者傳入起點以及移動方向和距離,就像上述代碼展示的一樣。另外poco
的swipe
還可以按比例滑動,這一點與Airtest
的滑動是不一樣的:
poco.swipe([0.9,0.5], [0.1,0.5])
滑動的特殊情況--拖動(darg_to)
在poco
中,還有與swipe
接口非常相似的一個UI操作--拖動(drag_to
)。它是從一個UI到另一個UI,本質上,拖動是滑動的特殊情況。
如圖,我們想要把星星拖動到貝殼里,這時候我們就會使用到drag_to
:
# coding=utf-8 from poco.drivers.unity3d import UnityPoco poco = UnityPoco() # 把“星星”拖動到“貝殼”上 poco('star').drag_to(poco('shell'))
應用swipe的特殊場景
應用swipe跳過APP的介紹頁
在考拉app打開后,有4個介紹頁需要滑動后才能進去。如果我們通過airtest/poco
的UI測試語句,需要運行半天。但如果執行四下固定坐標位置滑動,則可以很容易跳過這四個介紹頁。
要注意的是,這里坐標腳本的連續運行操作得太快,設備有可能會反應不過來,一般每行語句后面需要加一下sleep(1.0)
,等待一下設備響應。
如果這種情形非常多的話,可以封裝成通用的函數,用到的時候調用一下即可。 省代碼+快速~
# 獲取設備的高度和寬度 width, height = device().get_current_resolution() # 校准滑動的起點和終點 start_pt = (width * 0.9, height / 2) end_pt = (width * 0.1, height / 2) # 滑動5次: for i in range(5): swipe(start_pt, end_pt) sleep(1) # 等待設備的響應
當然,除了自己計算分辨率和坐標,然后使用Airtest
的swipe
來執行,我們還可以使用poco
下swipe
的按比例滑動來跳過這幾個介紹頁:
for i in range(5): poco.swipe([0.9,0.5], [0.1,0.5]) sleep(1) # 等待設備的響應
這樣看起來似乎幫我們省去了獲取設備高度寬度以及計算滑動坐標的步驟,但實際上運行速度會大大降低:
所以如果比較在意運行速度的話,還是選用Airtest
的swipe
會好一些。
應用swipe_along實現連續滑動
有些時候在安卓手機上面,我們需要實現連續滑動多個點的操作(例如屏幕滑動圖案解鎖功能),我們提供了一個 swipe_along
操作,示例代碼如下:
from airtest.core.api import * dev = device() # 獲取當前手機設備 # 手指按照順序依次滑過3個坐標 dev.minitouch.swipe_along([(100, 100), (200, 200), (300, 300)])
點擊選項--設置--勾選實時坐標顯示
,即可讓手機屏幕的絕對坐標顯示在畫面上,右鍵點擊鼠標還能將坐標復制到剪貼板中,這樣可以很方便地實現一些在坐標間滑動的需求,如圖:
請注意這個接口目前只有在使用了默認的 minitouch
模式時才能使用。