zoukankan      html  css  js  c++  java
  • UI自动化测试:TouchAction & TouchActions区别

    一、前言

    在做App自动化测试时,经常需要进行手势操作,比如滑屏、放大、缩小等,这里就涉及到TouchAction & TouchActions两个模块。TouchAction和TouchActions主要用于App、webview的手势操作,用法与PC端的ActionChains类似。

    1、TouchAction、TouchActions区别

    TouchAction是appium的辅助类,主要是一些手势操作。TouchActions是Selenium的辅助类,在TouchAction的基础上做了些功能补充。TouchAction和TouchActions只能用于单个手指的操作,MultiAction可以模拟多指操作。

    二、TouchAction介绍

    1、官方文档

    http://appium.io/docs/cn/writing-running-appium/touch-actions/

    2、导入TouchAction模块

    from appium.webdriver.common.touch_action import TouchAction

    3、操作方法

    1)tap():点击操作

    对一个元素或控件执行点击操作

    方法:tap(element=None, x=None, y=None, count=1)

    示例:

    # 操作的元素对象
    ele_str = driver.find_element(By.XPATH, "//span[text()='立即体验']")
    # 通过定位到的元素点击
    TouchAction(driver).tap(ele_str).release().perform()
    # 通过元素坐标点击
    TouchAction(driver).tap(x=360, y=1320).release().perform()
    # 以定位的元素左上角为原点,分别向下、向右偏移10个像素点
    TouchAction(driver).tap(ele_str, 10, 10).release().perform()

    2) press():按压操作

    按压一个元素或坐标点(x,y),通过手指按压手机屏幕的某个位置。

    方法:press(el=None, x=None, y=None)

    示例:

    # 操作的元素对象
    ele_str = driver.find_element(By.XPATH, "//span[text()='立即体验']")
    # 按压定位到的元素
    TouchAction(driver).press(ele_str).release().perform()
    # 按压元素坐标点
    TouchAction(driver).press(x=360, y=1320).release().perform()
    # 以元素的左上角为原点,分别向下、向右偏移10个像素点,然后按压释放
    TouchAction(driver).press(ele_str, 10, 10).release().perform()

    3) long_press():长按操作

    长按一个元素或坐标点(x,y)。 相比press()方法,long_press()多了一个入参duration。duration指按压持续时间,以毫秒为单位,1000表示按一秒钟,必须是int类型。其用法与press()方法相同。

    方法:long_press(el=None, x=None, y=None, duration=1000)

    示例:

    # 操作的元素对象
    ele_str = driver.find_element(By.XPATH, "//span[text()='立即体验']")
    # 长按元素,持续5秒时间
    TouchAction(driver).long_press(ele_str, duration=5000).release().perform()
    # 长按坐标点,持续5秒时间
    TouchAction(driver).long_press(x=360, y=1320, duration=5000).release().perform()
    # 以元素的左上角为原点,分别向下、向右偏移10个像素点,长按5秒然后释放
    TouchAction(driver).long_press(ele_str, 10, 10, duration=5000).release().perform()

    4)move_to():移动

     

    将指针或光标从上一个点移动到指定的元素或坐标点。

    方法:move_to(el=None, x=None, y=None) 

    示例:

    # 操作的元素对象
    ele_str = driver.find_element(By.XPATH, "//span[text()='立即体验']")
    # 在坐标(360,1320)处按下,滑动到坐标(700,1320)处,然后释放手指
    TouchAction(driver).press(x=360, y=1320).move_to(x=700, y=1320).release().perform()
    # 在元素ele_str所在位置处按下,滑动至元素ele_end处,然后释放手指
    TouchAction(driver).press(ele_str).move_to(ele_end).release().perform()

    5)wait():等待

    执行手势动作时,等待一段时间。wait(int ms),单位是毫秒,1s = 1000ms

    示例:

    # 在坐标(360,1320)处按下后等待2秒,然后滑动至坐标(700,1320)处
    TouchAction(self.driver).press(x=360, y=1320).wait(2000).move_to(x=700, y=1320).release().perform()

    6)release():释放

    释放屏幕上的指针操作,与按下和长按联合使用。

    7) perform():执行

    发送需要执行的动作指令集至服务器。

    8)连续滑屏

    App自动化测试时有时需要滑动多个点,可以使用多个move_to()组合。

    示例:

    TouchAction(driver).press(x=10, y=10).wait(2000) 
               .move_to(x=20, y=20).wait(1000) 
               .move_to(x=30, y=30).wait(1000) 
               .release().perform()

    三、TouchActions介绍

    1、说明文档

    TouchActions官方文档:

    https://www.selenium.dev/selenium/docs/api/py/webdriver/selenium.webdriver.common.touch_actions.html

    TouchActions中文版文档:

    https://liushilive.github.io/github_selenium_docs_api_py/md/selenium/webdriver/common/touch_actions.html

    2、导入TouchActions模块

    from selenium.webdriver.common.touch_actions import TouchActions

    3、操作方法

    1) tap(on_element):单击

    点击给定的元素。

    参数on_element: 要点按的元素

    2) double_tap(on_element):双击

    双击特定元素。

    参数on_element: 要点按的元素。

    3) tap_and_hold(xcoord, ycoord)

    在给定坐标处按下并保持。

    参数:

    xcoord: X 轴坐标

    ycoord: Y 轴坐标

    4) move(xcoord, ycoord)

    按压住某点移动至指定位置。

    参数:

    xcoord: X 轴坐标

    ycoord: Y 轴坐标

    5) scroll(xoffset, yoffset) 

    触摸并滚动,向 xoffset 和 yoffset 移动。

    参数:

    xoffset: X 轴偏移量

    yoffset: Y 轴偏移量

    6) scroll_from_element(on_element, xoffset, yoffset)

    触摸并滚动从 on_element 开始,向 xoffset 和 yoffset 移动。

    参数:

    on_element: 滚动开始的元素

    xoffset: X 轴偏移量

    yoffset: Y 轴偏移量

    7) long_press(on_element)

    长按一个元素。

    参数:

    on_element: 长按的元素

    8) flick(xspeed, yspeed)

    从屏幕上的任意位置开始轻弹。

    参数:

    xspeed: X 轴速度,以每秒像素为单位。

    yspeed: Y 轴速度,以每秒像素为单位。

    9) flick_element(on_element, xoffset, yoffset, speed)

    从 on_element 开始轻弹,然后以指定的速度移动 xoffset 和 yoffset。

    参数:

    on_element: Flick 将从元素的中心开始。

    xoffset: X 轴偏移量

    yoffset: Y 轴偏移量

    speed: 每秒偏移的像素

    10)release(xcoord, ycoord)

    在指定位置释放先前发出的 tap 和 hold 命令。

    参数:

    xcoord: X 轴坐标

    ycoord: Y 轴坐标

    11)perform()

    发送需要执行的动作指令集至服务器。

    4、Tips

    TouchActions我还没找到使用场景,后面遇到了再补上使用示例。

    TouchAction和TouchActions方法中用到的坐标可以通过下面的方法获取:

    1)获取屏幕大小

    print("获取屏幕大小:", driver.get_window_size())

    执行结果:获取屏幕大小: {'width': 720, 'height': 1491}

    2)获取元素大小

    # 操作的元素对象
    ele_str = driver.find_element(By.XPATH, "//span[text()='立即体验']")
    print("location获取元素坐标:", ele_str.location)
    print("location获取元素坐标X值:", ele_str.location["x"])
    print("size获取元素大小:", ele_str.size)
    print("size获取元素的长度:",       ele_str.size['width'])
    print("rect获取元素坐标和大小:", ele_str.rect)

    执行结果:

    location获取元素坐标: {'x': 260, 'y': 1290}

    location获取元素坐标X值: 260

    size获取元素大小: {'height': 60, 'width': 200}

    size获取元素的长度: 200

    rect获取元素坐标和大小: {'height': 60, 'width': 200, 'x': 260, 'y': 1290}

    3)手机App坐标与Webview页面坐标

    在做UI自动化测试用到TouchAction和TouchActions时,有的需要获取元素的坐标,然后对坐标进行press、tap等操作。在进行手机App测试时,webview页面获取的坐标会有区别。

     

    如上图,title部分是APP原生的,下面部分是webview环境,在获取webview部分的“看看关注”按钮的坐标时,是以webview环境的左上角为原点计算的,这样获取的坐标与屏幕的像素坐标点不一致,在使用TouchAction对“看看关注”坐标进行操作时,会得不到预期结果。

    只有Android、ios原生的App环境获取的坐标可以使用TouchAction操作。

    4)偏移量

    TouchActions有的操作方法中是使用xoffset、yoffset偏移量来操作的,这个偏移量是以操作的元素中心为原点的。

  • 相关阅读:
    荣岩岩作业10
    荣岩岩作业9
    荣岩岩作业8
    荣岩岩作业7
    荣岩岩作业6
    荣岩岩作业5
    荣岩岩作业4
    list<T>与datatable互相转换
    IE缓存机制
    html界面添加判断
  • 原文地址:https://www.cnblogs.com/zdx20/p/15309995.html
Copyright © 2011-2022 走看看