解决办法:
拿到上层元素和要点击的元素的bounds,计算右下角y坐标的差值;根据实际情况,若差值小于指定范围, 则滑动一小段。
用get_attribute方法拿到的bounds是字符串'[32,1275][688,1435]' (为左上角x,y和右下角x,y坐标)
def bounds_check_and_click(self, ref_locator, target_locator):
"""
check if target element is covered by reference element. If yes, scroll down once
:param ref_locator: locator of the reference element
:param target_locator: locator of the target element
"""
# 确保当前界面有参照元素
if self.is_displayed(ref_locator):
bounds_ref = self.driver.find_element(ref_locator).get_attribute('bounds')
bounds_target = self.driver.find_element(target_locator).get_attribute('bounds')
# 用split方法取出右下角y坐标
y_diff = abs(int(bounds_ref.split(',')[-1][:-1]) - int(bounds.split(',')[-1][:-1]))
if y_diff < 100:
self.__scroll_down()
self.click_on_element(target_locator)
else:
self.logger.debug(f'ref element {ref_locator} is not in current page')
scroll_down方法参考: