appium-手势密码实现-automationName 是Appium的情况
1. 红色区域的范围为:[66,575][1014,1523], 由于这块是一个整块,所以无法使用每个点的数据;因此只能使用LockPatternView对象拿到左上角的坐标值
2. 原理, 将九宫格分割为6块, 左上角顶部坐标为[66,575], 我们假设为【startX,startY】, 整个区域的高度为height, 宽度为width, 则Xstep = width / 6, Ystep = height / 6. 其中Xstep和Ystep分别表示被分割为6块后,每一块的宽度和高度。
根据上述的变量,我们可以推算出:
第一个点的坐标为【startX+Xstep, startY + Ystep】; 第二个点的坐标为【startX+3*Xstep, startY + Ystep】; 第三个点的坐标为【startX+5*Xstep,startY + Ystep】
第四个点的坐标为【startX+Xstep, startY + 3*Ystep】;依次类推则可获取到9宫格9个点的坐标;
3. 代码如下:这边完成的是一个从中间起点开始的L的手势密码
public void setLockPattern(String id) throws Exception {
if (driver.getPageSource().contains("设置手势密码")) {//检测是否是有手势密码出现
List<AndroidElement> element = driver.findElements(By.xpath(Constant.XPATH_VIEW + "[contains(@resource-id,'" + id + "')]"));
Thread.sleep(1000);//触摸前要等待1秒
AndroidElement gelemt = element.get(0);//获取到这个元素把它当做一个对象来做
int startX = gelemt.getLocation().getX();//获取元素的起始点x坐标
int startY = gelemt.getLocation().getY();//获取元素的起始点y坐标
int height = gelemt.getSize().getHeight();//获取元素的高
int width = gelemt.getSize().getWidth();//获取元素的宽
int xStep = width / 6;//把宽分成6份
int yStep = height / 6;//把高分成6份
int beginX = startX + 3*xStep;//计算触摸起始点x坐标
int beginY = startY + yStep;//计算触摸点y坐标
TouchAction ta = new TouchAction(driver); //初始化TouchAction //ta.press(beginX, beginY).waitAction(5000).moveTo(0, beginY + 2*yStep).waitAction(5000).moveTo(0, beginY + 4*yStep).waitAction(5000).moveTo((beginX + 2*xStep), beginY + 4*yStep).waitAction(5000).perform();
ta.press(beginX, beginY).moveTo(0, beginY + 2*yStep).moveTo(0, beginY + 4*yStep).moveTo(beginX + 2*xStep, beginY + 4*yStep).release().perform();
sleep(2000);
ta.press(beginX, beginY).moveTo(0, beginY + 2*yStep).moveTo(0, beginY + 4*yStep).moveTo(beginX + 2*xStep, beginY + 4*yStep).release().perform();
logger.info("手势密码设置完毕"); }
}
1) ta.press(beginX,beginY),为从[beginX,beginY]坐标开始; moveTo【x,y】为相对于[beginX,beginY]坐标移动[x,y]的距离, 即最终的坐标为【beginX+x, beginY+y】;
2)waitAction(int ms), 指的是停留多少毫秒;
3)release()方法,指的是释放当前的手势;
4)perform()方法,显示整个手势链条;
5)一般设置手势密码都是要两次才能完成设置操作;
以上情况限于automationName 是Appium的情况;
当automationName 是automator2时, 我的用例就失败了。 坐标整个是乱掉的。解决方法请看下面的博客。原因是底层的实现发生了变化。
appium-手势密码实现-automationName 是automator2
appium-手势密码实现-automationName 是Appium的情况的更多相关文章
- Appium手势密码滑动之Z字形走势(java篇)
1.直接使用负的偏移量appium会报错,在后面加上moveto(1,1)就行了 2.直接看图说话 废话少说看代码如: List<AndroidElement> element = dri ...
- appium-手势密码实现-automationName 是automator2
上一篇博客已经说了 appium-手势密码实现-automationName 是Appium的情况 下面就说一下automator2的情况: 手势密码的moveTo方法的参数进行了改变. 参数是相对于 ...
- Appium 解决手势密码 java
if(driver.getPageSource().contains("绘制解锁图案")){//检测是否是有手势密码出现 List<AndroidElement> el ...
- appium 中手势密码的定位坐标
原文地址http://www.cnblogs.com/smallTestKK/p/5408143.html 1.press方法中的坐标为绝对坐标,moveTO方法中的坐标都是相对坐标,具体来说第一个m ...
- Appium-实现手势密码登陆
前言: 前几天有人问我,手势登陆如何做?于是我找了一个APP试了试,所以本文来总结使用Python+Appium来实现手势密码登陆APP. 环境: MacOS:10.13.4 Appium-deskt ...
- appium_python 实现手势密码
直接上代码吧: from appium.webdriver.common.touch_action import TouchAction from driver import AppiumTest # ...
- appium入门(1)__ appium介绍
摘自:http://www.testclass.net/appium/appium-base-summary/ 1.特点 appium 是一个自动化测试开源工具,支持 iOS 平台和 Android ...
- appium入门级教程(1)—— appium介绍
appium介绍 官方网站与介绍 1.特点 appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用. “移动原生应用”是指那些用iOS或者 ...
- Appium笔记(一) 丶Appium的自我介绍
一.我是谁,我的特点是什么 Appium是一款开源测试自动化框架,可用于原生.混合和移动Web应用程序.它使用WebDriver协议驱动iOS,Android和Windows应用程序.重要的是,App ...
随机推荐
- dd-wrt ddns更新失败由于电信提供的ip不是公网ip
由于电信提供的ip地址原来是公网的ip,后来电信通过nat提供一个内网ip,导致ddns更新失败.电话给电信客服10000号,让他们修改回来之后就可以了. 如果ddns更新失败,尤其是原本是正常的,后 ...
- iOS逆向命令集
越狱命令行 破壳: 10.10.215.119 ssh root@10.10.215.119 ssh root@10.10.213.176 CCBMobileBank Fuqianlade-iPhon ...
- php中的脚本加速扩展opcache
今儿在azure里装php5.5.4,发现原先php5.4.php5.3中的zend guard laoder以及php5.2中的Zend Optimizer均不能再用,一直很喜欢用的eacceler ...
- python 面向对象(三)--继承和多态
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...
- 2017.10.20 jsp用户登陆界面连接数据库
用户登陆界面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...
- 检测pycaffe安装好没
进入python然后import caffe,如果没报错就表示安装好了
- 原生Servlet 上传文件
依赖jar <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons ...
- matlab 读取文件(mat)存储为json文件
fid= fopen('reqJosn.json', 'w+'); load('request-set-10.mat'); requests = requests.request; requestNu ...
- jQuery性能优化和技巧
jQuery性能优化 ①使用最新版本的jQuery类库 ②使用合适的选择器 ③缓存对象 ④循环时的DOM操作 ⑤数组方式使用jQuery对象 ⑥事件代理 ⑦将你的代码转化成jQuery插件 ⑧使用jo ...
- Spring的jdbcTemplate 与原始jdbc 整合c3p0的DBUtils 及Hibernate 对比 Spring配置文件生成约束的菜单方法
以User为操作对象 package com.swift.jdbc; public class User { private Long user_id; private String user_cod ...