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

Posted 蜗牛Tin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python+appium自动化测试-单点和多点触控操作相关的知识,希望对你有一定的参考价值。

一、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()

以上是关于python+appium自动化测试-单点和多点触控操作的主要内容,如果未能解决你的问题,请参考以下文章

Python + Appium 自动化操作微信入门看这一篇就够了

android 触摸屏2点和10点的区别

多点触控 TouchAction

仿真器上的多点触控(Windows Phone 8.0)

多点触控 地图缩放

如何在多点触控序列中有效地处理 UITouch