微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

appium手势密码

问题:uiautomator获取到的手势是一整块区域,无法获取到每个点。

方法:可以使用LockPatternView对象拿到左上角的坐标值

 

 原理:

 将九宫格分割为6块, 左上角顶部坐标为[660,277], 我们假设为【startX,startY】

 获取整个区域的高度为 height , 宽度为width ,  则Xstep = width / 6 = 100,   Ystep = height / 6 100. 其中Xstep和Ystep分别表示被分割为6块后,每一块的宽度和高度。

     根据上述的变量,我们可以推算出:

    第一个点的坐标为【startX+Xstep, startY + Ystep】= 【760,377】;  第二个点的坐标为【startX+3*Xstep, startY + Ystep】=【960,377】; 第三个点的坐标为【startX+5*Xstep,startY + Ystep】= 【1160,377】

    第四个点的坐标为【startX+Xstep, startY + 3*Ystep】= 【760,,577】;第五个点的坐标为【startX+3*Xstep, startY + 3*Ystep】=【960,577】; 第六个点的坐标为【startX+5*Xstep,startY + 3*Ystep】= 【1160,577】

    第七个点的坐标为【startX+Xstep, startY + 5*Ystep】= 【760,777】;第八个点的坐标为【startX+3*Xstep, startY + 5*Ystep】=【960,777】; 第九个点的坐标为【startX+5*Xstep,startY + 5*Ystep】= 【1160,777】

 代码如下:

    def move_gesture_code(self):
        # 获取元素坐标
        ele = self.find_element(*login_element.gesture_code_id).location
        x = ele.get('x')
        y = ele.get('y')

        # 获取元素宽、高
        ele_size = self.find_element(*login_element.gesture_code_id).size
        width = ele_size['width']
        height = ele_size['height']

        xstep = int(width/6)
        ystep = int(height/6)
        print(xstep)
        print(ystep)
        beginx = int(x + xstep)
        beginy = int(y + ystep)
        print(beginx)
        self.touch_long_press(beginx, beginy, 3000).move_to(beginx+2*xstep, beginy).move_to(beginx+4*xstep, beginy)\
            .move_to(beginx+4*xstep, beginy+2*ystep).move_to(beginx+4*xstep, beginy+4*ystep).perform().release()
find_element()和touch_long_press()为自己封装的方法
   from appium.webdriver.common.touch_action import TouchAction  # 需要导入 TouchAction

def touch_long_press(self, x0, y0, t0): # 长按 return TouchAction(self.driver).long_press(x=x0, y=y0, duration=t0)

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐