问题背景:最近使用 appium 测试 app,发现有一种情况不知道怎么破解。两个控件 id 重叠在一个区域了,如下图所示
使用 xpath 进行定位点击的时候并不是点击到了 “更多” 而是点击到了上面那个广告。本人使用了 click 的方法。另一个方法 tap 是点击屏幕的估计更不适用。
请问一下各位有何办法破解?
自己顶
要不使用 swipe 将屏幕往上拉一点,然后再 click 点击?
向上拖动页面,让这两个元素分离比较好,感觉 appium 不能使某个元素隐藏掉挺蛋疼的
往上拉点
、
能不能查找到两个元素的坐标,相对靠近,就滑动一下,将他分开,这样试试?
id 不一样把?
def move_loc_to_loc(self, start_loc, end_loc):
"""
移动控件到另一控件位置
:param start_loc:
:param end_loc:
:return:
"""
def loc_point(loc):
element = self.__operating_element(*self.__is_element_or_elements(loc))
return self.get_center_point(self.__element_rect(element))
start_x, start_y = loc_point(start_loc)
end_x, end_y = loc_point(end_loc)
self.__swipe(start_x, start_y, end_x, end_y, 1)
如果浮层是一个可移动的控件,封装一个 move_loc_to_loc,传入控件,解析控件坐标,调用 swipe 把控件移走即可。之后再点击你想要的控件
同问,对于一个不可移的浮层,如何避免它遮盖你需要找的元素呢?
区别:element 的 click 事件默认是去 tap 这个 view 的中间位置坐标
对于你这个情况 如果覆盖 View 位置是定死的 在你拿到 element 的时候 获取位置和坐标 判断一下就行了
对于其他不能确定的情况,还是比较复杂,目前我只是基于 Xpath 来判断,还没搞出一个又快又完善的办法来