Appium-实现手势密码登陆
前言:
前几天有人问我,手势登陆如何做?于是我找了一个APP试了试,所以本文来总结使用Python+Appium来实现手势密码登陆APP。
环境:
MacOS:10.13.4
Appium-desktop:1.6.1
Xcode:9.3.1
APP:众安保险-iOS版
一、Appium API -- TouchAction
Appium的辅助类,主要针对手势操作,比如滑动、长按、拖动等。
1、按压控件
方法:press()
开始按压一个元素或坐标点(x,y)。通过手指按压手机屏幕的某个位置。
举例:
TouchAction(driver).press(x=0,y=308).release().perform()
release() 结束的行动取消屏幕上的指针。
Perform() 执行的操作发送到服务器的命令操作。
2、长按控件
方法:longPress()
开始按压一个元素或坐标点(x,y)。 相比press()方法,longPress()多了一个入参,既然长按,得有按的时间吧。duration以毫秒为单位。1000表示按一秒钟。其用法与press()方法相同。
举例:
TouchAction(driver).longPress(x=1 ,y=302,duration=1000).perform().release();
3、移动
方法:moveTo()
将指针(光标)从过去指向指定的元素或点。
举例:
TouchAction(driver).moveTo(x=0,y=308).perform().release();
4、暂停
方法:wait()
暂停脚本的执行,单位为毫秒。
举例:
TouchAction(driver).wait(1000);
二、通过触摸多点坐标进行解锁
根据上面API解释,我们可以得出按压和移动来实现手势解释,大概思路如下:
TouchAction.press(beginX,beginY).moveTo(xStep,yStep).moveTo(xStep,yStep).release().perform();
打开Appium-Inspector来查看手势对应的各个点的坐标。
选择[Swipe By Coordinates],可查看任意点的坐标。可选择手势触摸点的中心位置。如下图所示:作者分别选择左上角的4个点,即可模拟手势来执行登陆操作。
代码如下:
# -*- coding: utf-8 -*-
# @Time : 2018/5/22 下午10:33
# @Author : WangJuan
# @File : appium-ios.py
from time import sleep
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
cap = {
"platformName": "iOS",
"platformVersion": "11.4",
"bundleId": "com.zhongan.insurance",
"automationName": "XCUITest",
"udid": "3e8325a7c0d*******************a7e",
"deviceName": "****Iphone"
}
host = "http://0.0.0.0:4728/wd/hub"
driver = webdriver.Remote(host, cap)
sleep(3)
action = TouchAction(driver)
action.press(x=98, y=321).wait(100).move_to(x=208, y=321).wait(100).move_to(x=206, y=432).wait(100).move_to(x=98, y=432).perform().release()
三、兼容不同分辨率
直接用坐标点找会有一些问题,比如手机屏幕大小不同,找点的位置可能会有偏差,如何解决呢?
由下图可见,先获取第一个触摸点的坐标location及size。分别定义为start_height、start_width、start_x、start_y(其中start_x、start_y为触摸点左上角的坐标);
即可计算出第一个触摸点的中心点坐标分别为:
start_x + start_width/2, start_y + start_height/2
然后在计算出第二个触摸点的中心点大致坐标为:
start_x+start_width*2, y=start_y+start_height*2 
其他坐标均可按照此计算方式,详情见具体例子。
# -*- coding: utf-8 -*-
# @Time : 2018/5/22 下午10:33
# @Author : WangJuan
# @File : appium-ios.py
from time import sleep
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
cap = {
"platformName": "iOS",
"platformVersion": "11.4",
"bundleId": "com.zhongan.insurance",
"automationName": "XCUITest",
"udid": "3e8325a7c0***************62bd4a7e",
"deviceName": "My@Iphone"
}
host = "http://0.0.0.0:4728/wd/hub"
driver = webdriver.Remote(host, cap)
sleep(3)
action = TouchAction(driver)
# action.press(x=98, y=321).wait(100).move_to(x=208, y=321).wait(100).move_to(x=206, y=432).wait(100).move_to(x=98, y=432).perform().release()
start = driver.find_element_by_xpath('//XCUIElementTypeApplication[@name="众安保险"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther\
/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[1]')
start_height = start.size['height']
start_width = start.size['width']
start_x = start.location['x']
start_y = start.location['y']
begin_x = start_x + start_width/2
begin_y = start_y + start_height/2
action.press(x=start_x, y=start_y).wait(100).move_to(x=start_x+start_width*2, y=begin_y).wait(100).move_to\
(x=start_x+start_width*2, y=start_y+start_height*2).wait(100).move_to(x=begin_x,y=start_y+start_height*2).perform().release()
以上,对你有帮助的话,请点赞吧❤️~~
Appium-实现手势密码登陆的更多相关文章
- Appium 解决手势密码 java
if(driver.getPageSource().contains("绘制解锁图案")){//检测是否是有手势密码出现 List<AndroidElement> el ...
- appium 中手势密码的定位坐标
原文地址http://www.cnblogs.com/smallTestKK/p/5408143.html 1.press方法中的坐标为绝对坐标,moveTO方法中的坐标都是相对坐标,具体来说第一个m ...
- appium_python 实现手势密码
直接上代码吧: from appium.webdriver.common.touch_action import TouchAction from driver import AppiumTest # ...
- vue项目中实现手势密码
思路: 本来应该全部都用canvas来实现的,但时间紧迫 写的时候只想着圆圈用li写,线用canvas,写到一半才想通,还好这一通下来比较顺利 第一步:页面中的9个点用v-for循环出来li,ul设置 ...
- aud$定位错误用户密码登陆数据库的具体信息
环境:Oracle 11.2.0.3 客户端使用错误的用户密码登陆数据库 查询最近1天由于密码错误登陆失败的信息 查询当前审计中有哪些returncode值 1. 客户端使用错误的用户密码登陆数据库 ...
- SSH配置免密码登陆
1.使用SSH-keygen,然后一路回车使之生成id_rsa何id_rsa.pub文件,id_rsa.pub为公匙文件. 2.使用命令:cat ~/.ssh/id_rsa.pub >> ...
- linux系统免密码登陆
有两台机器,系统都是CentOS6.5,IP分别为192.168.2.150,192.168.2.151.现在150需要SSH免密码登陆151. 在150上面执行命令,当前登录用户是root: # s ...
- iOS 教你如何实现手势密码
本次讲的手势密码,是在九个按键上实现的,这里讲的是手势密码的基本实现和效果 同样先上效果图 其实就是对画图功能的一个实现,再加上手势操作结合起来 屏幕宽度高度,方便下面操作,不做解释 #define ...
- ssh 免密码登陆
远程ssh登陆服务器或者其他机器时或者scp时,需要输入密码,感觉很麻烦,于是研究如何免密码登陆. step1:Client端生成公钥和密钥 执行命令 ssh-keygen 进入目录~/.ssh里面, ...
随机推荐
- YourSQLDba遭遇.NET Framework Error 6522
一工厂的SQL Server数据库服务器上的YourSQLDba_LogBackups作业做事务日志备份时,突然出现异常,异常的错误信息指向.NET Framework,出现这个问题时,一般我估计是该 ...
- 配置正确情况下,hadoop 没有namenode的一个解决方法
将hdfs里name与data清空,和将tmp清空 然后在hadoop目录下运行 hadoop namenode -format 启动 sbin/start-all.sh
- 编译percona-server-locks-detail-5.7.22
yum install -y binutils compat-libstdc++ gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgc ...
- Python爬虫-01:爬虫的概念及分类
目录 # 1. 为什么要爬虫? 2. 什么是爬虫? 3. 爬虫如何抓取网页数据? # 4. Python爬虫的优势? 5. 学习路线 6. 爬虫的分类 6.1 通用爬虫: 6.2 聚焦爬虫: # 1. ...
- 【Linux基础】crontab定时命令详解
周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为“crontab”,是 ...
- UEditor学习笔记1
首先对于前段时间遇到的一些总结做下记录: 0 == '' => true transition,渐变属性,其值可以是某属性,也可以是all,如transition: all 0.3s:鼠标放到 ...
- C和指针 (pointers on C)——第七章:函数(上)
第七章 函数 这一章对于有一定C的基础的人有一定优秀代码风格的人来说,并非非常虐.关于stdarg宏可能有些陌生.它负责可变參数列表的定义. 总结: 新式风格和旧式风格就不要提了.八百年前的事情. 函 ...
- Grid布局指南
简介 CSS网格布局(又称“网格”),是一种二维网格布局系统.CSS在处理网页布局方面一直做的不是很好.一开始我们用的是table(表格)布局,然后用float(浮动),position(定位)和in ...
- 【angularJs】阻止默认事件
$scope.click = function($event){ $event.stopPropagation();//在函数体内加上这句代码就好} 作者:smile.轉角 QQ:493177502 ...
- CMake 常用方法
CMake 允许开发者编写平台无关的 CMakeLists.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Linux 的Makefi ...