Appium-实现手势密码登陆

简介: 前言:前几天有人问我,手势登陆如何做?于是我找了一个APP试了试,所以本文来总结使用Python+Appium来实现手势密码登陆APP。环境:MacOS:10.13.4Appium-desktop:1.6.1Xcode:9.3.1APP:众安保险-iOS版----一、Appium API -- TouchActionAppium的辅助类,主要针对手势操作,比如滑动、长按、拖动等。

前言:

前几天有人问我,手势登陆如何做?于是我找了一个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个点,即可模拟手势来执行登陆操作。Appium-Inspector.png
代码如下:

# -*- 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 Appium-Inspector-2.png
其他坐标均可按照此计算方式,详情见具体例子。

# -*- 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()

以上,对你有帮助的话,请点赞吧️~~

作者:搁浅
出处: http://www.cnblogs.com/xiaoxi-3-/
如果对您有帮助,请关注我的同名简书:https://www.jianshu.com/u/da1677475c27
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

目录
相关文章
|
机器学习/深度学习 计算机视觉 知识图谱
YoloV8最新改进手册——高阶篇
本专栏是讲解如何改进Yolov8的专栏。改进方法采用了最新的论文提到的方法。改进的方法包括:增加注意力机制、更换卷积、更换block、更换backbone、更换head、更换优化器等;每篇文章提供了一种到N种改进方法。 评测用的数据集是我自己标注的数据集,里面包含32种飞机。每种改进方法我都做了测评,并与官方的模型做对比。 代码和PDF版本的文章,我在验证无误后会上传到百度网盘中,方便大家下载使用。 这个专栏,求质不求量,争取尽心尽力打造精品专栏!!! 专栏链接: ''' https://blog.csdn.net/m0_47867638/category_12295903
2455 0
|
存储 Java 编译器
.groovy后缀是什么文件
.groovy后缀是什么文件
611 0
|
存储 自然语言处理 数据处理
信息抽取UIE(二)--小样本快速提升性能(含doccona标注
需求跨领域跨任务:领域之间知识迁移难度高,如通用领域知识很难迁移到垂类领域,垂类领域之间的知识很难相互迁移;存在实体、关系、事件等不同的信息抽取任务需求。 - 定制化程度高:针对实体、关系、事件等不同的信息抽取任务,需要开发不同的模型,开发成本和机器资源消耗都很大。 - 训练数据无或很少:部分领域数据稀缺,难以获取,且领域专业性使得数据标注门槛高。
信息抽取UIE(二)--小样本快速提升性能(含doccona标注
|
存储 JSON 监控
eBPF 深度探索: 高效 DNS 监控实现(下)
eBPF 深度探索: 高效 DNS 监控实现(下)
1179 0
|
3月前
|
JSON 安全 fastjson
使用阿里巴巴 Fastjson 替代 Spring Boot 默认的 Jackson
本文介绍在 Spring Boot 项目中如何替换默认的 Jackson,集成阿里巴巴 Fastjson 作为 JSON 处理框架。内容涵盖 Fastjson 与 Jackson 的核心对比、依赖配置、自定义消息转换器、null 值统一处理及循环引用控制,并提供安全建议与最佳实践,助你高效、安全地使用 Fastjson。
|
4月前
|
缓存 Linux 开发者
Windows 下手动下载安装配置 uv
UV 是专为 Windows 打造的轻量命令行包管理器,仅需 uv.exe 和 uvx.exe 两个文件,无需 WSL 或管理员权限。支持一键安装、卸载、多版本切换 Python 等工具,内置依赖解析与缓存管理,搭配国内镜像更高效。绿色无残留,开发者友好,真正实现 Linux 般丝滑体验。
3586 2
|
Java 中间件 测试技术
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
java依赖冲突解决问题之jar包版本冲突无法通过升降级解决时如何解决
|
云安全 存储 运维
阿里云安全体检功能评测报告
阿里云安全体检功能评测报告
303 7
|
监控 Java Spring
Spring Boot中的热部署配置
Spring Boot中的热部署配置
|
小程序 定位技术 API
微信小程序实现地图功能(腾讯地图)
微信小程序实现地图功能(腾讯地图)

热门文章

最新文章