美文网首页
『与善仁』Appium基础 — 35.APP模拟手势高级操作(一

『与善仁』Appium基础 — 35.APP模拟手势高级操作(一

作者: 繁华似锦Fighting | 来源:发表于2020-12-08 09:32 被阅读0次

    APP模拟手势的动作都被封装在TouchAction类中,TouchActionAppiumDriver的辅助类,主要针对手势操作,如滑动、按、拖动等,原理是将一系列的动作放在一个链条中发送到服务器,服务器接受到该链条后,解析各个动作,逐个执行。 所有手势都要通过执行函数才会运行。

    提示:

    我们之前学习的滑动操作,都是对TouchAction进行的封装。

    之前我们说可以自定义滑动操作,就是通过封装TouchAction类中的方法实现的。

    注意:

    • TouchAction辅助类所有的方法,都不能直接执行,需要调用perfrom()方法执行。

    • TouchAction类使用前需要导入包:

      from appium.webdriver.common.touch_action import TouchAction

    1、手指轻敲操作(tap)

    模拟手指轻敲一下屏幕操作。

    方法介绍:

    轻敲操作:tap(element=None, x=None, y=None)
    
    # 发送命令到服务器执行操作
    执行方法:perform() 
    
    # 调用方式
    TouchAction(driver).tap(element,x,y).perform()
    

    参数:

    1. element:被定位到的元素

    2. x:相对于元素左上⻆的坐标,通常会使用元素的X轴坐标

    3. y:通常会使用元素的Y轴坐标

    参数可以传入元素,也可以传入x、y坐标。

    也就是说可以在元素上进行轻敲动作,也可以在坐标上进行轻敲动作。

    业务场景:

    1. 进入设置

    2. 点击“蓝牙”选项

    代码实现:

    """
    1.学习目标
        掌握TouchAction类使用,
        轻敲方法tap
    2.操作步骤
        2.1 导入TouchAction类
        2.2 使用tap方法---手指轻敲
            tap(element=None,x=None,y=None)
                element  元素
                x  坐标
                y  坐标
    
            使用方式:
                TouchAction(driver).tap(element,x,y).perform()
    3.需求
        使用tap方法点击设置首页蓝牙
    """
    
    # 1.导入appium和TouchAction
    import time
    from appium import webdriver
    from appium.webdriver.common.touch_action import TouchAction
    
    # 2.创建Desired capabilities对象,添加启动参数
    desired_caps = {
        "platformName": "Android",  # 系统名称
        "platformVersion": "7.1.2",  # 系统版本
        "deviceName": "127.0.0.1:21503",  # 设备名称
        "appPackage": "com.android.settings",  # APP包名
        "appActivity": ".Settings"  # APP启动名
    }
    
    # 3.启动APP
    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
    time.sleep(2)
    
    # 4.操作APP
    # 使用TouchAction中的tap方法点击蓝牙
    # 4.1 敲击元素,传入元素
    # 先定位到元素
    blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("蓝牙")')
    # 轻敲蓝牙按钮
    TouchAction(driver).tap(blue_tooth).perform()
    
    # 注意:
    # 现在不是用click()方法进行点击元素的,
    # 而是用TouchAction类中的tap方法进行的点击元素操作。
    
    # 4.2 进入到蓝牙界面,传入开启\关闭按钮的坐标,实现开启\关闭蓝牙的操作
    # 可以通过uiautomatorviewer定位工具获得元素按钮的坐标
    # 开启\关闭元素的坐标为:[108,138][624,185]
    # 也就是该元素x轴坐标为108到624,y轴坐标138到185
    # 点击“关闭”按钮关闭蓝牙
    time.sleep(2)
    TouchAction(driver).tap(x=120, y=200).perform()
    
    # 点击“开启”按钮打开蓝牙
    time.sleep(2)
    TouchAction(driver).tap(x=120, y=200).perform()
    
    # 5.关闭APP
    time.sleep(5)
    driver.quit()
    

    拓展:

    如果调用tap()方法时,同时元素和坐标都传入参数,到底会怎样执行呢?

    结论:

    • tap()方法元素和坐标参数同时传入,使用元素参数进行操作。
    • 如果所传的元素参数定位不到该元素,就会报错。

    所以,传入元素参数就不用传入坐标参数了,二者选其一就行。

    示例:

    # 1.导入appium和TouchAction
    import time
    from appium import webdriver
    from appium.webdriver.common.touch_action import TouchAction
    
    # 2.创建Desired capabilities对象,添加启动参数
    desired_caps = {
        "platformName": "Android",  # 系统名称
        "platformVersion": "7.1.2",  # 系统版本
        "deviceName": "127.0.0.1:21503",  # 设备名称
        "appPackage": "com.android.settings",  # APP包名
        "appActivity": ".Settings"  # APP启动名
    }
    
    # 3.启动APP
    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
    time.sleep(2)
    
    # 4.操作APP
    # 元素和坐标都传入
    # 当元素和坐标在同一个元素上的时候,两个都传入会正常执行。
    # 当元素和坐标所指的位置不同时,执行元素参数。
    view = driver.find_element_by_android_uiautomator('new UiSelector().text("显示")')
    # 坐标指向蓝牙,坐标为x=120, y=200
    TouchAction(driver).tap(element=view, x=120, y=200).perform()
    
    # 5.关闭APP
    time.sleep(5)
    driver.quit()
    
    

    相关文章

      网友评论

          本文标题:『与善仁』Appium基础 — 35.APP模拟手势高级操作(一

          本文链接:https://www.haomeiwen.com/subject/nyzvwktx.html