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)

 

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

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

posted @ 2022-05-22 19:27  ☆星空物语☆  阅读(407)  评论(0编辑  收藏  举报