我們在做app測試的時候,都會寫一些長按,雙擊,滑動,拖動等一系列簡單的操作來驗證按鈕或者跳轉頁是否正常的用例,那么我們在做自動化測試的時候這些操作應該怎么去做呢?
TouchAction
TouchAction是APPium中封裝的一個方法,主要是都手勢控制的一些操作:長按,滑動,等其他操作。
源碼:
class TouchAction(object): def __init__(self, driver=None): self._driver = driver self._actions = [] def tap(self, element=None, x=None, y=None, count=1): 對元素執行點擊操作 參數: -元素-要點擊的元素 - x -(可選)x坐標點擊,相對於左上角的元素。 - y -(可選)y坐標。如果使用y,也必須設置x,反之亦然 """ opts = self._get_opts(element, x, y) opts['count'] = count self._add_action('tap', opts) return self def press(self, el=None, x=None, y=None, pressure=None): """以在特定元素或點上的下拉操作開始鏈 參數: - el -(可選)要按的元素 - x -(可選)x配合按。如果使用y,也必須設置x - y -(可選)y可按。如果使用x,也必須設置y -壓力-(可選)[iOS只]按作為強制觸摸。 """ self._add_action('press', self._get_opts(el, x, y, pressure=pressure)) return self def long_press(self, el=None, x=None, y=None, duration=1000): """長按 """ self._add_action('longPress', self._get_opts(el, x, y, duration)) return self def wait(self, ms=0): """按住元素后的等待時間 """ if ms is None: ms = 0 opts = {'ms': ms} self._add_action('wait', opts) return self def move_to(self, el=None, x=None, y=None): """從這個坐標移動到另一個 """ self._add_action('moveTo', self._get_opts(el, x, y)) return self def release(self): """釋放手指 """ self._add_action('release', {}) return self def perform(self): """執行動作 """ params = {'actions': self._actions} self._driver.execute(Command.TOUCH_ACTION, params) # get rid of actions so the object can be reused self._actions = [] return self
這里我們先拿一個小栗子說明使用方法
class Actions(object): def __init__(self): self._actions = [] def a(self, x): self._actions.append(x) return self def b(self, y): self._actions.append(y) return self def c(self, z): self._actions.append(z) return self def perform(self): print(self._actions) if __name__ == '__main__': Actions().a("hello").c("world").b("aaa").perform() ------結果------- ['hello', 'world', 'aaa']
其實TouchAction就是通過這個方法來執行的,我們進行一系列的操作來后,通過perform方法來執行運行
tap
這個tap其實和前面模擬點擊中寫的tap是差不多,TouchAction中的tap中可以加入直接加入元素,也可以通過坐標進行定位
# coding:utf-8 from appium import webdriver # 導入TochAction模塊 from appium.webdriver.common.touch_action import TouchAction import time desired_caps = { 'platformName': 'Android', # 測試版本 'deviceName': 'emulator-5554', # 設備名 'platformVersion': '5.1.1', # 系統版本 "appPackage": "com.taobao.taobao", # app包名 "appActivity": "com.taobao.tao.welcome.Welcome", # 啟動launch Activity "noReset": True, # 不清空數據 "unicodeKeyboard": True, # 使用Unicode編碼方式發送字符串 "resetKeyboard": True, # 鍵盤隱藏起來 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) time.sleep(10) # 登錄按鈕 element = driver.find_element_by_class_name('android.widget.Button') # 實例化 toch = TouchAction(driver) # 執行點擊 toch.tap(element=element).perform()
TouchAction其他動作:
觸摸 (tap)
短按 (press)
長按 (long_press)
等待 (wait)
移動到 (moveTo)
釋放 (release)
執行 (perform)