Appium 请问 appium 点击控件两种方法的区别,一个是 tap 另一个时 click

Ji Wei · October 16, 2017 · Last by null replied at November 01, 2017 · 2052 hits

问题背景:最近使用 appium 测试 app,发现有一种情况不知道怎么破解。两个控件 id 重叠在一个区域了,如下图所示

使用 xpath 进行定位点击的时候并不是点击到了 “更多” 而是点击到了上面那个广告。本人使用了 click 的方法。另一个方法 tap 是点击屏幕的估计更不适用。
请问一下各位有何办法破解?

共收到 13 条回复 时间 点赞

自己顶

要不使用 swipe 将屏幕往上拉一点,然后再 click 点击?

向上拖动页面,让这两个元素分离比较好,感觉 appium 不能使某个元素隐藏掉挺蛋疼的

往上拉点

donly 回复

随机滚动的,这个控制不了

能不能查找到两个元素的坐标,相对靠近,就滑动一下,将他分开,这样试试?

DC 回复

觉得这也是一种方法,就是比较绕了点。具体还是得试过才知

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 把控件移走即可。之后再点击你想要的控件

Ji Wei #11 · October 26, 2017 Author
joko 回复

抢红包 image 控件不可移动,不可删除,第三方的 SDK 的

同问,对于一个不可移的浮层,如何避免它遮盖你需要找的元素呢?

区别:element 的 click 事件默认是去 tap 这个 view 的中间位置坐标
对于你这个情况 如果覆盖 View 位置是定死的 在你拿到 element 的时候 获取位置和坐标 判断一下就行了
对于其他不能确定的情况,还是比较复杂,目前我只是基于 Xpath 来判断,还没搞出一个又快又完善的办法来

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up