最近做的项目是微信公众号,涉及到H5页面。在Chrome上进行UI自动化测试,涉及到滚动选择的界面,类似下面这种:
这种界面需要向上或者向下滑动,尝试使用Selenium的ActionChains类中的drag_and_drop函数来实现元素拖动,发现不适用,drag_and_drop是针对浏览器页面的函数,而图片所示的为移动端的H5页面。怎么解决?
touch_actions,从类名我们可以知道,这个类面向的是移动设备的触摸操作。
打开文件我们会发现里面有一个scroll_from_element函数:
'''
def scroll_from_element(self, on_element, xoffset, yoffset):
"""
Touch and scroll starting at on_element, moving by xoffset and yoffset.
:Args:
- on_element: The element where scroll starts.
- xoffset: X offset to scroll to.
- yoffset: Y offset to scroll to.
"""
self._actions.append(lambda: self._driver.execute(
Command.TOUCH_SCROLL, {
'element': on_element.id,
'xoffset': int(xoffset),
'yoffset': int(yoffset)}))
return self
'''
通过英文注释我们可以知道这个函数的作用是将一个特定元素沿x轴移动xoffset,沿y轴移动yoffset.
注意这里的offset并不是坐标,我曾将它误认为是坐标,导致走了不少弯路。在代码中一般用coord来表示坐标,而用offset表示偏移量。
既然谈到偏移量,那我们怎么获取offset值呢?
很简单,F12查看你要拖动的元素的height,以上图为例,我们可以看到上图的height为41.4px,px即像素。如果你想像上/下滑动元素,那么xoffset的偏移量就为0,yoffset就应该是41.4px的倍数。