以下基于
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)
---------------------------------------------------------------------------------
关注微信公众号即可在手机上查阅,并可接收更多测试分享~