以下基於
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)
---------------------------------------------------------------------------------
關注微信公衆號即可在手機上查閱,並可接收更多測試分享~