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)

 

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

關注微信公衆號即可在手機上查閱,並可接收更多測試分享~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章