app自動化測試過程中贮预,經常會遇到滑動屏幕操作,appium框架的話我們可以使用webdriver提供的swipe()方法來對屏幕頁面進行上滑排嫌、下滑畸裳、左滑、右滑操作淳地。
- swipe()方法源碼如下:
swipe()方法的參數說明:
start_x:起始橫坐標
start_y:起始縱坐標
end_x:結束時橫坐標
end_y:結束時縱坐標
duration:滑動持續(xù)時間躯畴,單位毫秒,默認None(一般設置500-1000毫秒比較合適)
- duration參數需要注意的是薇芝,在移動設備上滑動時間的快慢所形成的效果是不一樣的。以今日頭條APP首頁上滑為例丰嘉,同樣的滑動距離夯到,滑動較快則出現類似翻頁的效果,而滑動較慢則是同一則新聞從起始位置滑動到結束位置饮亏。
- 手機屏幕的坐標:以手機屏幕左上角為坐標中心(0, 0)耍贾,向右話滑動則縱坐標不變,橫坐標變大路幸;向下滑動則橫坐標不變荐开,縱坐標變大。在uiautomatorviewer中可以元素左上角坐標與右下角的坐標简肴,如下圖中"視頻"按鈕
- 因為不同測試機屏幕的尺寸很可能有差異晃听,所以一般不使用固定的的坐標來滑動屏幕,而是先獲取測試機屏幕尺寸砰识,再通過獲取的手機屏幕尺寸來確定滑動的起始能扒、結束坐標,這樣在我們更換了測試手機后不需要更改方法辫狼。使用webdriver提供的get_window_size()方法可以獲取屏幕尺寸(即屏幕右下角的坐標)初斑,方法如下:
# 屏幕寬
width = driver.get_window_size()['width']
# 屏幕高
height = driver.get_window_size()['heigth']
- 滑動屏幕操作代碼如下:
# 屏幕從下向上滑動
driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, 1000)
# 屏幕從上向下滑動
driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000)
# 屏幕從左向右滑動
driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000)
# 屏幕從右向左滑動
driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, 1000)
- 我們還可以將滑動屏幕的操作封裝成方法,方便后續(xù)調用:
# project/common/baseOpera.py
class BaseOpera(object):
'''
基礎操作
'''
def __init__(self, driver):
self.driver = driver
self.duration = 1000
@property
def width(self):
'''獲取屏幕寬度'''
return self.driver.get_window_size()['width']
@property
def height(self):
'''獲取屏幕高度'''
return self.driver.get_window_size()['height']
def swipe_to_left(self, base=0.1):
'''從右向左滑動'''
return self.driver.swipe(self.width*(1-base),
self.height*0.5,
self.width*base,
self.height*0.5,
self.duration
)
def swipe_to_right(self, base=0.1):
'''從左向右滑動'''
return self.driver.swipe(self.width*base,
self.height*0.5,
self.width*(1-base),
self.height*0.5,
self.duration
)
def swipe_to_top(self, base=0.9):
'''從下向上滑動'''
return self.driver.swipe(self.width*0.5,
self.height*base,
self.width*0.5,
self.height*(1-base),
self.duration
)
def swipe_to_bottom(self, base=0.9):
'''從上向下滑動'''
return self.driver.swipe(self.width*0.5,
self.height*(1-base),
self.width*0.5,
self.height*base,
self.duration
)
調用baseOpera.py模塊中的滑動方法膨处,向上滑動查看今日頭條首頁新聞见秤,簡單示意如下:
from appium import webdriver
from common.baseOpera import BaseOpera
def android_driver():
desired_caps = {
"platformName": "Android",
"platformVersion": "10",
"deviceName": "PCT_AL10",
"appPackage": "com.ss.android.article.news",
"appActivity": ".activity.MainActivity",
"automationName": "uiautomator2",
"unicodeKeyboard": True,
"resetKeyboard": True,
}
# 啟動app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
return driver
def watch_news():
# 向上滑動今日頭條首頁
driver = android_driver()
bo = BaseOpera(driver)
bo.swipe_to_top()
if __name__ == '__main__':
watch_new()