最近做的項目是微信公眾號,涉及到H5頁面。在Chrome上進行UI自動化測試,涉及到滾動選擇的界面,類似下面這種:
image.png
這種界面需要向上或者向下滑動,嘗試使用Selenium的ActionChains類中的drag_and_drop函數來實現元素拖動,發現不適用,drag_and_drop是針對瀏覽器頁面的函數,而圖片所示的為移動端的H5頁面。怎么解決?
image.png
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值呢?
image.png
很簡單,F12查看你要拖動的元素的height,以上圖為例,我們可以看到上圖的height為41.4px,px即像素。如果你想像上/下滑動元素,那么xoffset的偏移量就為0,yoffset就應該是41.4px的倍數。