我们在做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)