zoukankan      html  css  js  c++  java
  • APP模拟手势高级操作

        TouchAction是AppiumDriver的辅助类,主要针对手势操作,比如滑动、长按、拖动等,
        原理是将一系列的动作放在一个链条中发送到服务器,服务器接受到该链条后,解析各个动作,逐个执行

      前置代码

        from appium import webdriver
        # server 启动参数
        desired_caps = {}
        # 设备信息
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '5.1'
        desired_caps['deviceName'] = '192.168.56.101:5555'
        # app的信息
        desired_caps['appPackage'] = 'com.android.settings'
        desired_caps['appActivity'] = '.Settings'
    
        # 声明我们的driver对象
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    • ⚠️ 所有手势都要通过执行函数才会运行.

    • 手指轻敲操作

        模拟手指轻敲一下屏幕操作
        方法:tap(element=None, x=None, y=None)
        方法:perform() # 发送命令到服务器执行操作
        参数:
            1.element:被定位到的元素
            2.x:相对于元素左上角的坐标,通常会使用元素的X轴坐标
            3.y:通常会使用元素的Y轴坐标
        业务场景:
            1.进入设置
            2.点击WLAN选项
        代码实现:
            # 通过元素定位方式敲击屏幕
            el = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
            TouchAction(driver).tap(el).perform()
      
            # 通过坐标方式敲击屏幕,WLAN坐标:x=155,y=250
            # TouchAction(driver).tap(x=155,y=250).perform()
    • 手指按操作

        模拟手指按下屏幕,按就要对应着离开.
        方法:press(el=None, x=None, y=None)
        方法:release() # 结束动作,手指离开屏幕
        参数:
            1.element:被定位到的元素
            2.x:通常会使用元素的X轴坐标
            3.y:通常会使用元素的Y轴坐标
        业务场景:
            1.进入设置
            2.点击WLAN选项
        代码实现:
            # 通过元素定位方式按下屏幕
            el = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
            TouchAction(driver).press(el).release().perform()
      
            # 通过坐标方式按下屏幕,WLAN坐标:x=155,y=250
            # TouchAction(driver).press(x=155,y=250).release().perform()
    • 等待操作

        方法:wait(ms=0)
        参数:
            ms:暂停的毫秒数
        业务场景:
            1.进入设置
            2.点击WLAN选项
            3.长按WiredSSID选项5秒
        代码实现:
            # 点击WLAN
            driver.find_element_by_xpath("//*[contains(@text,'WLAN')]").click()
            # 定位到WiredSSID
            el =driver.find_element_by_id("android:id/title")
            # 通过元素定位方式长按元素
            TouchAction(driver).press(el).wait(5000).perform()
      
            # 通过坐标方式模拟长按元素
            # 添加等待(有长按)/不添加等待(无长按效果)
            # TouchAction(driver).press(x=770,y=667).wait(5000).release().perform()
    • 手指长按操作

        模拟手机按下屏幕一段时间,按就要对应着离开.
        方法:long_press(el=None, x=None, y=None, duration=1000)
        参数:
            1.element:被定位到的元素
            2.x:通常会使用元素的X轴坐标
            3.y:通常会使用元素的Y轴坐标
            4.duration:持续时间,默认为1000ms
        业务场景:
            1.进入设置
            2.点击WLAN选项
            3.长按WiredSSID选项5秒
        代码实现:
            # 点击WLAN
            driver.find_element_by_xpath("//*[contains(@text,'WLAN')]").click()
            # 定位到WiredSSID
            el =driver.find_element_by_id("android:id/title")
            # 通过元素定位方式长按元素
            TouchAction(driver).long_press(el,duration=5000).release().perform()
      
            # 通过坐标方式长按元素,WiredSSID坐标:x=770,y=667
            # 添加等待(有长按)/不添加等待(无长按效果)
            # TouchAction(driver).long_press(x=770,y=667).perform()
    • 手指移动操作
        模拟手机的滑动操作
        方法:move_to(el=None, x=None, y=None)
        参数:
            1.el:定位的元素
            2.x:相对于前一个元素的X轴偏移量
            3.y:相对于前一个元素的Y轴偏移量
        业务场景1:
            1.进入设置
            2.向上滑动屏幕
          代码实现:
              # 定位到存储
              el = driver.find_element_by_xpath("//*[contains(@text,'存储')]")
              # 定位到更多
              el1 = driver.find_element_by_xpath("//*[contains(@text,'更多')]")
              # 元素方式滑动
              TouchAction(driver).press(el).move_to(el1).release().perform()
              # 坐标的方式滑动
              # TouchAction(driver).press(x=240,y=600).wait(100).move_to(x=240,y=100).release().perform()
              # 注意press连接一个move_to实际调用的是swip方法,可在log中查询,不要给相对坐标。
          业务场景2:
              1.进入设置
              2.向上滑动屏幕到可见"安全"选项
              3.进入到安全
              4.点击屏幕锁定方式
              5.点击图案
              6.绘制图案
          代码实现:
              # 定位到WLAN
              el1 = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
              # 定位到存储
              el2 = driver.find_element_by_xpath("//*[contains(@text,'存储')]")
              # 存储上滑到WLAN
              driver.drag_and_drop(el2,el1)
              # 定位到用户
              el3 = driver.find_element_by_xpath("//*[contains(@text,'用户')]")
              # 注意 这次使用drag_and_drop方法,传入的"存储定位"仍使用其原始在屏幕上的位置,所以是由存储滑动到用户才可以上滑,否则需要重新"定位存储"
              # 存储上滑倒用户位置
              driver.drag_and_drop(el2,el3)
              # 点击安全按钮
              driver.find_element_by_xpath("//*[contains(@text,'安全')]").click()
              # 点击屏幕锁定方式按钮
              driver.find_element_by_xpath("//*[contains(@text,'屏幕锁定')]").click()
              # 点击图案按钮
              driver.find_element_by_xpath("//*[contains(@text,'图案')]").click()
              # 绘制图案四个坐标 1:(244,967) 2:(723,967) 3:(723,1442) 4:(244,1916)
              TouchAction(driver).press(x=244,y=967).wait(100).move_to(x=479,y=0).wait(100)
                  .move_to(x=0,y=475).wait(100).move_to(x=-479,y=474).release().perform()

  • 相关阅读:
    The Mac Application Environment 不及格的程序员
    Xcode Plugin: Change Code In Running App Without Restart 不及格的程序员
    The property delegate of CALayer cause Crash. 不及格的程序员
    nil localizedTitle in SKProduct 不及格的程序员
    InApp Purchase 不及格的程序员
    Safari Web Content Guide 不及格的程序员
    在Mac OS X Lion 安装 XCode 3.2 不及格的程序员
    illustrate ARC with graphs 不及格的程序员
    Viewing iPhoneOptimized PNGs 不及格的程序员
    What is the dSYM? 不及格的程序员
  • 原文地址:https://www.cnblogs.com/wangxudong01/p/14514158.html
Copyright © 2011-2022 走看看