分析九宫格定位

整个九宫格是一个 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. Hadoop环境准备

    1. 集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起. HDFS集群负责海量数据的存储,集群中的角色主要有: NameNode.DataN ...

  2. 用OZ工具制作openstack镜像

    在部署openstack云平台环境的时候,需要上传镜像到glance. 首先下载iso镜像,这里下载了centos7.2镜像,放到/iso目录下 然后用OZ工具制作openstack的镜像 1.安装l ...

  3. 两个类似的ViewModel一个可以重写事件,另一个不能重写事件,是哪里出了错。

    答:继承错了,BaseViewModel里面是事件.

  4. SQL Server - 索引详细教程 (聚集索引,非聚集索引)

    转载自:https://www.cnblogs.com/hyd1213126/p/5828937.html 作者:爱不绝迹 (一)必读:深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录. ...

  5. Python全栈(第一部分)day1

    计算机基础 cpu:相当于人的大脑,用于计算. 内存:储存数据,4G,8G,16G,32G,成本高,断电即消失. 硬盘:1T,固态硬盘,机械硬盘,储存数据,应该长久保持数据,重要文件,小电影等等. 操 ...

  6. C实战:项目构建Make,Automake,CMake【转】

    转自:https://blog.csdn.net/dc_726/article/details/48978849 版权声明:本文为博主原创文章,未经博主允许不得转载.欢迎访问 http://blog. ...

  7. Windows PowerShell 入門(7)-関数編2

    この連載では.Microsoftが提供している新しいシェル.Windows Power Shellの使い方を解説します.前回に引き続きPowerShellにおける関数の取り扱いとして.変数と関数のスコ ...

  8. 使用sudo而无需输入密码的设置

    在linux上,root用户是老大,什么事都能做.但是,很多时候由于安全等各种原因,我们不希望把root用户开放给大家,但是又希望其他的用户可以有root的权限,所以就有了sudo用户.而执行sudo ...

  9. hibernate框架学习之数据模型-POJO

    Hibernate数据模型用于封装数据,开发时候需要遵从如下规范:1)提供公共无参的构造方法(可使用自动生成的)如果使用投影技术,一定要显式声明公共无参的构造方法2)提供一个标识属性,作为对象的主键, ...

  10. Android App增量升级

    移动互联网主打的就是用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,这样才能持续保持生命力和创造力.说的接地气点就是,你频繁的升级更新,有时只是修复了几个bug或者微调了下界面, ...