• Poco API精讲之滚动scroll()


    上期回顾:Poco API精讲之拖动drag_to()


    以下基于
    python3.8;airtestIDE1.2.13;airtest1.2.4;pocoui1.0.85

    注意:Poco框架和Airtest框架很多API是同名的,但使用方法完全不一样!!!一定不要搞混了,我初学时也经常搞混,这点一定要注意!
    具体Poco框架和Airtest框架是什么关系,可以看之前文章:Airtest Project——UI自动化利器介绍

    上期我们讲Poco的拖动drag_to()时,有讲到一个使用技巧,就是元素自拖,经常用在滚动条上,其实Poco有封装一个元素滚动的方法——scroll(),所以以后如果想滚动的话,用scroll()更方便。

    scroll(direction='vertical', percent=0.6, duration=2.0)
    滚动。在可以滚动的元素上进行滚动。

    参数:
    direction - 滚动方向,"vertical" or "horizontal",默认'vertical'
    percent - 滚动距离,该距离是相对于此元素的高或宽的比例,默认0.6
    duration - 滚动时长,默认2秒

    异常:
    PocoNoSuchNodeException:元素不存在

    源码解析:

    # 源码位置:your_python_path\site-packages\poco\proxy.py
        def scroll(self, direction='vertical', percent=0.6, duration=2.0):
            if direction not in ('vertical', 'horizontal'):
                raise ValueError('Argument `direction` should be one of "vertical" or "horizontal". Got {}'
                                 .format(repr(direction)))

            focus1 = self._focus or [0.5, 0.5]
            focus2 = list(focus1)
            half_distance = percent / 2
            if direction == 'vertical':
                focus1[1] += half_distance
                focus2[1] -= half_distance
            else:
                focus1[0] += half_distance
                focus2[0] -= half_distance

            return self.focus(focus1).drag_to(self.focus(focus2), duration=duration)

    第1个代码块是确保direction参数的合法性,只能是'vertical'或'horizontal'

    第2个代码块取元素锚点(一般是中心点),然后分别赋值给锚点1、锚点2;
    算出滚动距离的一半,分别加给锚点1、让锚点2减去距离的一半,这样就算出了要滚动的2个锚点;

    最精彩的在后边,通过前面算出的2个锚点,分别通过focus变为新的元素,再使用drag_to实现滚动,这不就是上期我们最后实现的例子吗。

    是不是很神奇,drag_to其实是swipe实现的,而scroll其实又是drag_to实现的。

    示例:

    from airtest.core.api import *
    from poco.drivers.unity3d import UnityPoco

    auto_setup(__file__)

    poco = UnityPoco()

    s = poco("测试工程师小站的万能滚动条")

    # 向下垂直滚动0.6的比例,持续2秒
    s.scroll()

    # 向上垂直滚动0.6的比例,持续2秒
    s.scroll(direction='vertical', percent=-0.6)

    # 向右横向滚动0.3的比例,持续1秒
    s.scroll('horizontal',0.3,1)

    ---------------------------------------------------------------------------------

    关注微信公众号即可在手机上查阅,并可接收更多测试分享~

  • 相关阅读:
    Vue-cli / webpack 加载静态js文件的方法
    shell curl 下载图片并另存为(重命名)
    sublime 技巧与快捷键篇
    es5 温故而知新 创建私有成员、私有变量、特权变量的方法
    es5 温故而知新 简单继承示例
    js 万恶之源 是否滚动到底部?
    ES6 基础知识
    jquery操作select(取值,设置选中)
    WebApi深入学习--特性路由
    Asp.net 代码设置兼容性视图
  • 原文地址:https://www.cnblogs.com/songzhenhua/p/16298713.html
Copyright © 2020-2023  润新知