Appium python+appium 自动化测试 - 单点和多点触控操作

Tin · 2021年02月01日 · 1195 次阅读

一、TouchAction

TouchAction 类主要用于模拟手势操作,如点击、短按、长按、移动操作。

1.点击:press()

短按屏幕上的某个元素或某个坐标点,可以使用 TouchAction 中提供的 press() 方法

press(self, el=None, x=None, y=None)
注释
长按操作,可以传定位的元素对象也可以传坐标
el 是定位元素的对象
x,y是传坐标
duration是按住的持续时间默认1000单位是毫秒

注意:若短按的是元素,则仅需传参数给 el;

若短按的是坐标点,则需传参数给 x 和 y;

时间为非必填项,可填可不填。

例子:

# 导入模块TouchAction
from appium.webdriver.common.touch_action import TouchAction

el = self.driver.find_element_by_id("com.sina.weibo:id/titleSave")
TouchAction(driver).press(el,None,None,t).perform()

2.长按:long_press_keycode():

长按手机上的某个按键,例如电源键、音量键、Home 键,调用 long_press_keycode() 方法

# 导入模块TouchAction
from appium.webdriver.common.touch_action import TouchAction

# 长按Home键
# long_press_keycode(value)    value:键盘对应的值
long_press_keycode(3)

3.长按:long_press()

长按屏幕上某个元素或者某个点,需要使用 TouchAction 中提供的 long_press() 方法

下面为 TouchAction 类中的 long_press() 方法讲解:

def long_press(self, el=None, x=None, y=None, duration=1000):
注释
长按操作,可以传定位的元素对象也可以传坐标
el 是定位元素的对象
x,y是传坐标
duration是按住的持续时间默认1000单位是毫秒

注意: 若短按的是元素,则仅需传参数给 el;

若短按的是坐标点,则需传参数给 x 和 y;

时间为非必填项,可填可不填。

例子:

# 导入模块TouchAction
from appium.webdriver.common.touch_action import TouchAction

el = self.driver.find_element_by_id("com.sina.weibo:id/titleSave")
TouchAction(driver).long_press(el,None,None,t).perform()

4.move_to()

模拟从一个点移动到指定元素或指定点

move_to(self,el=None,x=None,y=None)
注释
若移动到的目标为元素则仅需传参数给el即可
若移动到的目标为坐标点则需传参数给x和y

5.动作的结束和执行

release()
#通过将指针离开屏幕(释放指针)来结束动作
perform()
#通过向服务器发送命令来执行动作

二、MultiAction

MultiTouch 类主要用于多点触控操作,主要有两种操作,分别为 add() 和 perform()

1.add()

添加 TouchAction 对象到 MultiAction 对象

from appium.webdriver.common.multi_action import MultiAction
from appium.webdriver.common.touch_action import TouchAction

# 初始化TouchAction对象
action1 = TouchAction(self.driver)
action2 = TouchAction(self.driver)
# 添加TouchAction对象到MultiAction中
MultiAction.add(action1, action2)

2.perform()

执行储存在对象中的所有动作

MultiAction.add(action1, action2).perform()

例子:

先获取屏幕大小:

def get_screen_size(self):
        # 获取屏幕大小
    window_size = self.driver.get_window_size()
    x = window_size['width']
    y = window_size['height']
    return x, y

放大操作:

# 放大
def zoom(self):
    x, y = self.get_screen_size()
    # 初始化MultiAction对象
    add_action = MultiAction(self.driver)
    # 初始化TouchAction对象
    action1 = TouchAction(self.driver)
    action2 = TouchAction(self.driver)
    # 执行短按操作,并移动坐标点,最后通过release释放坐标点来结束动作
    action1.press(x=x * 0.4, y=y * 0.4).wait(1000).move_to(x=x * 0.2, y=y * 0.2).wait(1000).release()
    action2.press(x=x * 0.6, y=y * 0.6).wait(1000).move_to(x=x * 0.8, y=y * 0.8).wait(1000).release()
    # 添加TouchAction对象到MultiAction中
    add_action.add(action1, action2)
    # perform()通过向服务器发送命令来执行动作
    print("start zoom!")
    add_action.perform()

缩小操作:

# 缩小
def shrink(self):
    x, y = self.get_screen_size()
    # 初始化MultiAction对象
    add_action = MultiAction(self.driver)
    # 初始化TouchAction对象
    action1 = TouchAction(self.driver)
    action2 = TouchAction(self.driver)
    # 执行短按操作,并移动坐标点,最后通过release释放坐标点来结束动作
    action1.press(x=x * 0.2, y=y * 0.2).wait(1000).move_to(x=x * 0.4, y=y * 0.4).wait(1000).release()
    action2.press(x=x * 0.8, y=y * 0.8).wait(1000).move_to(x=x * 0.6, y=y * 0.6).wait(1000).release()
    # 添加TouchAction对象到MultiAction中
    add_action.add(action1, action2)
    # perform()通过向服务器发送命令来执行动作
    print("start shrink!")
    add_action.perform()

以上内容有错误的地方,大家多多指正,谢谢!

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册