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

  • 相关阅读:
    高速上云/网络穿透/视频上云网关EasyNTS组网服务在任务管理器中显示已停止是什么原因?
    通过视频上云网关EasyNTS进行端口穿透时显示【端口不存在】【端口已被占用】信息的原因解析
    RTSP拉流协议/RTMP推流协议/国标GB28181协议/海康SDK流媒体服务器Easy系列视频平台中token机制全解
    网络穿透/网络映射/远程运维/视频上云网关EasyNTS智能组网平台如何使用组织管理功能?
    网络穿透网络映射/远程运维/视频上云网关EasyNTS组网服务直接双击运行程序为什么会自动退出?
    视频上云网关EasyNTS智能云组网如何通过23端口穿透实现远程控制功能?
    视频上云网关平台EasyCVR登录页开发控制台报net::ERR_CONNECTION_TIMED_OUT错误
    视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——开启存储服务
    视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——通过流媒体服务开启语音对讲
    IP摄像头RTSP协议视频平台EasyNVR启动报“invalid license”错误怎么解决?
  • 原文地址:https://www.cnblogs.com/wangxudong01/p/14514158.html
Copyright © 2011-2022 走看看