zoukankan      html  css  js  c++  java
  • 分享1个模拟各种复杂的滑动或手势操作的方法,赶紧学起来~

    我们常使用的 minitouch 和 maxtouch ,其共同的底层操作都来自于 basetouch 。举个例子,之前我们在“用airtest做滑动解锁怎么搞?其实很简单!”这篇推文中,也有详细介绍过 basetouch 模块里面的一些接口:

    • 实现连续划过一系列坐标的 swipe_along 接口
    • 实现 双指捏合 操作的 pinch 接口
    • 实现 双指同时滑动 的 two_finger_swipe 接口

    除了这些接口以外,今天我们重点要了解的是这个模块里面的4个类:

    • DownEvent(coordinates, contact=0, pressure=50)
    • UpEvent(contact=0)
    • MoveEvent(coordinates, contact=0, pressure=50)
    • SleepEvent(seconds)

    调用这4个类,理论上可以拼接组合出来所有的手势操作。我们举个简单的例子:比如 touch 接口,就是先调用 DownEvent ,实现点下某个坐标点,然后再调用 SleepEvent,停顿0.01s, 最后调用 UpEvent,实现抬起操作,拼接这三个“event”,就组成了1个完整的 touch 操作。


    1

    案例1:长按删除某个应用


    我们先来分解下长按删除应用的整个操作,首先是长按某个应用不松手,然后再把应用滑动到垃圾桶的位置,最后点击弹窗的确认按钮即可完成删除应用的操作。如果使用封装好的接口来实现,先使用 long_click ,再使用 swipe ,是完成不了这个任务的。因为 long_click 实现的是 点下-停顿-抬起 的动作,而我们在把应用拖到删除应用的垃圾桶之前,是不能有抬起操作的。所以对于长按删除应用的操作,我们可以使用 basetouch 里面的4个 "event" 来拼接实现:

    from airtest.core.android.touch_methods.base_touch import *
    dev = device()
    
    # 案例一
    # 长按删除应用
    longtouch_event = [
        DownEvent([908, 892]),# 待删除应用的坐标
        SleepEvent(2),
        MoveEvent([165,285]),# 删除应用的垃圾桶坐标
        UpEvent(0)]
    
    dev.touch_proxy.perform(longtouch_event)
    
    # 取消卸载
    poco("android:id/button2").click()

    2

    案例2:双指点击屏幕的不同坐标


    模拟2个手指分别点击屏幕上的不同坐标,然后再松开2个手指。

    # 案例二
    # 双指点击屏幕
    multitouch_event = [
        DownEvent([335, 1383], 0),
        DownEvent([629, 1345], 1),  # 第二根手指
        SleepEvent(1),
        UpEvent(0), UpEvent(1)]
    
    dev.touch_proxy.perform(multitouch_event)
    sleep(1.0)

    3

    案例3:模拟三指滑动


    三根手指同时在设备屏幕上滑动一定距离。

    # 案例三
    # 三指滑动
    swipe_event2 = [DownEvent((100, 300), 0), DownEvent((100, 500), 1), DownEvent((100, 700), 2), SleepEvent(0.1)]
    
    for i in range(5):
        swipe_event2.append(MoveEvent((100 + 100*i, 300), 0))# 第一根手指
        swipe_event2.append(MoveEvent((100 + 100*i, 500), 1))# 第二根手指
        swipe_event2.append(MoveEvent((100 + 100*i, 700), 2))# 第三根手指
        swipe_event2.append(SleepEvent(0.2))
    
    swipe_event2.append(UpEvent(0))
    swipe_event2.append(UpEvent(1))
    swipe_event2.append(UpEvent(2))
    
    dev.touch_proxy.perform(swipe_event2)







    使用小结

      • 使用 DownEventUpEvent 、 SleepEvent 和 MoveEvent,可以分别模拟 按下 抬起 等待 和 移动 这些基本操作;
      • 组合使用上述的“event”,可以模拟各种复杂的手势操作;
      • DownEvent((100, 300), 0) ,坐标后面的0代表第1根手指,依次类推, DownEvent((100, 500), 1) 坐标后面的1代表第2根手指;
      • 组合使用“event”的常见方式:把1个手势所需要的各个动作按顺序储存到1个列表(例如swipe_event)里面,最后使用 device().touch_proxy.perform(swipe_event)去执行这个动作列表,完成手势操作的模拟

    内容来自官方推文:

    https://mp.weixin.qq.com/s?__biz=MzUxMDc4NTkwMA==&mid=2247485191&idx=1&sn=035a8358df234047f6cf5b330cfd9df9&chksm=f97ce704ce0b6e120bcaa235b23d92d1d5282b33d84d4c3ec63b84d9319baeff64683aa321d0&mpshare=1&scene=23&srcid=1104k8fNVWXYhzaypA9Dh2Um&sharer_sharetime=1604478345004&sharer_shareid=d7c76ec50dd2ddd1acf1ab3095badbf0#rd

  • 相关阅读:
    oracle_深刻理解数据库的启动和关闭
    oracle_利用闪回功能恢复数据
    oracle_五千万数据插入测试
    java_eclipse_svn 与服务器同步时 ,忽略某类型文件和文件夹
    oracle_根据表名拼装语句
    crawler_网络爬虫之数据分析_httpwatcher
    113. Path Sum II (Tree; DFS)
    112. Path Sum (Tree; DFS)
    150. Evaluate Reverse Polish Notation (Stack)
    32. Longest Valid Parentheses (Stack; DP)
  • 原文地址:https://www.cnblogs.com/wutaotaosin/p/13927498.html
Copyright © 2011-2022 走看看