分析九宫格定位

整个九宫格是一个 view

 
self.driver.find_element_by_id("com.elc:id/gesturepwd_create_lockview")

屏幕大小 x 720, y 1280

九宫格定位 x 80, y 488, width 640 height 1048

计算出大小 x 80 y 488

width = 640-80 width 等于 560 
height = 1048-488 height 等于 560
九宫格是正方形

计算出第一个坐标 为了好计算,就把坐标的值全部用整数来计算

p11 = int(x + width / 6), int(y + height / 6)
    (173, 581)

计算所有的坐标值

定位方式存在一个字典中

a = {
    "解锁提示": "com.elc:id/gesturepwd_create_text",
    "九宫格": "com.elc:id/gesturepwd_create_lockview",
    "继续": "com.elc:id/right_btn",
}
lock_pattern = self.driver.find_element_by_id(a["九宫格"])
x = lock_pattern.location.get('x')
y = lock_pattern.location.get('y')
width = lock_pattern.size.get('width')
height = lock_pattern.size.get('height')
print(x, y, width, height)
offset = width / 6
p11 = int(x + width / 6), int(y + height / 6)
p12 = int(x + width / 2), int(y + height / 6)
p13 = int(x + width - offset), int(y + height / 6)
p21 = int(x + width / 6), int(y + height / 2)
p22 = int(x + width / 2), int(y + height / 2)
p23 = int(x + width - offset), int(y + height / 2)
p31 = int(x + width / 6), int(y + height - offset)
p32 = int(x + width / 2), int(y + height - offset)
p33 = int(x + width - offset), int(y + height - offset)
print(p11, p12, p13)
print(p21, p22, p23)
print(p31, p32, p33)

80 488 560 560 # 九宫格坐标值 与上面计算的一样
(173, 581) (360, 581) (546, 581)
(173, 768) (360, 768) (546, 768)
(173, 954) (360, 954) (546, 954)

计算滑动偏移量(做的效果图是 7)

p3 = p13[0] - p11[0] # 偏移的值是 373

滑动方法 TouchAction

TouchAction(self.driver).press(x=p11[0], y=p11[1]).move_to(x=p3, y=0).wait(1000).move_to(x=0, y=p3).wait(
        1000).release().perform()

说明 滑动方法

# 横向滑动
从 173 滑动到 546 坐标的偏移量是 546-173 = 373
第一个值不变 press(x=p11[0], y=p11[1]).move_to(x=373, y =0),因为y 的值是相同的,就不变
# 纵向滑动
move_to(x=0, y=373) 因为x的值不变,移动y 的值 
九宫格是正方的形,所以 从第1点到3点是 373, 从3点到9点也是 373

九宫格解锁完毕

这样的写法,不需要固定坐标值,根据不同的设备屏幕大小自动获取到--偏移值

我遇到的坑-- 之前一直以为 TouchAction 的 move_to 是从x y 坐标移动到另一个坐标,而不是偏移量,没有理解清楚,所以这里掉坑里了

最后附上完整的函数

def login_unlock(self):
       a = {
           "解锁提示": "com.elc:id/gesturepwd_create_text",
           "九宫格": "com.elc:id/gesturepwd_create_lockview",
           "继续": "com.elc:id/right_btn",
       }
       unlock_text = self.driver.find_element_by_id(a["解锁提示"])
       lock_pattern = self.driver.find_element_by_id(a["九宫格"])
       x = lock_pattern.location.get('x')
       y = lock_pattern.location.get('y')
       width = lock_pattern.size.get('width')
       height = lock_pattern.size.get('height')
       print(unlock_text.text)
       print(x, y, width, height)
       offset = width / 6
       p11 = int(x + width / 6), int(y + height / 6)
       p12 = int(x + width / 2), int(y + height / 6)
       p13 = int(x + width - offset), int(y + height / 6)
       p21 = int(x + width / 6), int(y + height / 2)
       p22 = int(x + width / 2), int(y + height / 2)
       p23 = int(x + width - offset), int(y + height / 2)
       p31 = int(x + width / 6), int(y + height - offset)
       p32 = int(x + width / 2), int(y + height - offset)
       p33 = int(x + width - offset), int(y + height - offset)

       p3 = p13[0] - p11[0]
       sleep(3)

       TouchAction(self.driver).press(x=p11[0], y=p11[1]).move_to(x=p3, y=0).wait(1000).move_to(x=0, y=p3).wait(
           1000).release().perform()

效果视频

Vimeo

https://v.youku.com/v_show/id_XMjk4NjY0MjQwMA==.html?spm=a2hzp.8244740.0.0

Appium 九宫格 手势解锁的更多相关文章

  1. Appium九宫格滑动解锁

    1.适配各种机型,首先获取整个解锁元素的坐标 2.代码实现 WebElement lockPattern = driver.findElement(By.id("com.android.se ...

  2. appium 九宫格解锁招商银行手机客户端app

    之前研究了一段时间的appium for native app 相应的总结如下:                                            appium测试环境搭建 :ht ...

  3. iOS-高仿支付宝手势解锁(九宫格)

    概述 高仿支付宝手势解锁, 通过手势枚举去实现手势密码相对应操作. 详细 代码下载:http://www.demodashi.com/demo/10706.html 基上篇[TouchID 指纹解锁] ...

  4. [iOS UI进阶 - 5.0] 手势解锁Demo

    A.需求 1.九宫格手势解锁 2.使用了绘图和手势事件   code source: https://github.com/hellovoidworld/GestureUnlockDemo     B ...

  5. 【Android - 自定义View】之自定义九宫格手势解锁控件

    首先来介绍一下这个自定义View: (1)这个自定义View的名称叫做 LockView ,继承自View类: (2)这个自定义View实现了应用中常见的九宫格手势解锁功能,可以用于保证应用安全: ( ...

  6. Swift 简简单单实现手机九宫格手势密码解锁

    原文:Swift 简简单单实现手机九宫格手势密码解锁 大家可以看到我之前的文章[HTML5 Canvas简简单单实现手机九宫格手势密码解锁] 本文是使用苹果语言对其进行了移植 颜色配色是拾取的支付宝的 ...

  7. HTML5 Canvas简简单单实现手机九宫格手势密码解锁

    原文:HTML5 Canvas简简单单实现手机九宫格手势密码解锁 早上花了一个半小时写了一个基于HTML Canvas的手势解锁,主要是为了好玩,可能以后会用到. 思路:根据配置计算出九个点的位置,存 ...

  8. iOS--开发之手势解锁

    本文主要介绍通过手势识别实现手势解锁功能,这个方法被广泛用于手机解锁,密码验证,快捷支付等功能实现.事例效果如下所示. 首先,我们先分析功能的实现过程,首先我们需要先看大致的实现过程: 1.加载九宫格 ...

  9. APP九宫格滑动解锁的处理

    写手机自动化测试脚本关于APP九宫格滑动解锁方面采用了appium API 之 TouchAction 操作. 先是用uiautomatorviewer.bat查询APP元素坐标: 手工计算九宫格每个 ...

随机推荐

  1. spring aop 加在Controller层造成类初始化两遍

    写一个测试项目,在配置动态数据源的时候采用的AOP切面到Controller层中,根据参数判断是否切合数据源,结果发现,每次Controller层的类都会初始化两次! 后来测试发现,把切面放到Serv ...

  2. Python学习笔记-转义字符

    Python转义字符同C语言的转义字符

  3. 【转】实习小记-python 内置函数__eq__函数引发的探索

    [转]实习小记-python 内置函数__eq__函数引发的探索 乱写__eq__会发生啥?请看代码.. >>> class A: ... def __eq__(self, othe ...

  4. Mac 远程桌面 ubuntu16.04 unity

    待解决问题: 使用 vnc 远程桌面 ubunt16.04的自带桌面 unity 尝试方法 : 查看了各种方法, 基本都是曲线救国, 安装 gnome 或者 xfce4等其他桌面系统, 而我只想用好看 ...

  5. FAT文件系统规范v1.03学习笔记---4.文件和目录数据区之长目录项

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  6. E: The package code needs to be reinstalled, but I can't find an archive for it.

    ubuntu安装软件时报错: E: The package code needs to be reinstalled, but I can't find an archive for it. 解决方法 ...

  7. 如何在Mac 终端上Git 项目的一次常规操作

    首先,Git的工作流是怎样的? 你的本地仓库由 git 维护的三棵“树”组成. 第一个是你的 工作目录,它持有实际文件: 第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动: 最后是 H ...

  8. 程序包管理dpkg、apt-get、服务端openssh-server与客户端Xshell设置及lrzsz安装使用

    一.程序包管理器 dpkg.apt-get 1.dpkg 安装:sudo dpkg -i cmatrix_1.2a-5build3_amd64.deb 卸载:sudo dpkg -r cmatrix ...

  9. SpringBoot和SpringCloud面试题

    一. 什么是springboot 1.用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件) 2.创建独立的spring引用程序 main方法运行 ...

  10. .htaccess技巧: URL重写(Rewrite)与重定向

    URL重定向是.htaccess的重头戏,它可以将长地址转为短地址.将动态地址转为静态地址.重定向丢失的页面.防止盗链.实现自动语言转换等.笔者觉得难点是在正则表达式的运用和理解上.有关htacces ...