Python+uiautomator2实现手机锁屏解锁功能
作者:limingyong92 发布时间:2021-05-26 23:04:12
业务需求:需要测试手机滑动解锁失败时事件的次数及等待的时间,本来想利用Python+Appium实现,但是Appium运行时自动给我解锁了....
部分解释摘抄自:https://testerhome.com/topics/11357
python-uiautomator2是一个自动化测试开源工具,仅支持Android平台的原生应用测试
python-uiautomator2封装了谷歌自带的uiautomator2测试框架,提供便利的python接口。他允许测试人员直接在PC上编写Python的测试代码,操作手机应用,完成自动化,大大提高了自动化代码编写的效率
以下图片使用Windows画图软件
如图所示,python-uiautomator2主要分为两个部分,python客户端,移动设备
python端: 运行脚本,并向移动设备发送HTTP请求
移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。
整个过程
在移动设备上安装
atx-agent
(守护进程), 随后atx-agent
启动uiautomator2服务(默认7912端口)进行监听在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)
移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行制定的操作
安装工具
Python2或者Python3均可。(也可以尝试使用Android上Python客户端:QPython)
移动设备
环境搭建
安装adb
如命令行可以执行adb devices
,则跳过此步骤
从谷歌官网下载Android Platform Tools https://developer.android.com/studio/releases/platform-tools.html,解压,并加包含adb.exe
的目录加入到系统的PATH中。
安装python-uiautomator2
pip install --pre -U uiautomator2
设备安装atx-agent
首先设备连接到PC,并能够adb devices
发现该设备。
# 从github下载atx-agent文件,并推送到手机。在手机上安装包名为`com.github.uiautomator`的apk
$ python -m uiautomator2 init
success
最后提示success,代表atx-agent初始化成功。
应用及操作
调用uiautomator2的过程
配置手机设备参数,设置具体操作的是哪一台手机
抓取手机上应用的控件,制定对应的控件来进行操作
对抓取到的控件进行操作,比如点击、填写参数等。
配置手机设备参数
python-uiautomator2连接手机的方式有两种,一种是通过WIFI,另外一种是通过USB。两种方法各有优缺点。
WIFI最便利的地方要数可以不用连接数据线,USB则可以用在PC和手机网络不在一个网段用不了的情况。
1,使用WIFI连接
手机获取到手机的IP,并确保电脑可以PING通手机。手机的IP可以在设置-WIFI设置里面获取到。
比如手机的IP是192.168.0.100
,连接设备的代码为
import uiautomator2 as u2
d = u2.connect('192.168.0.100')
2.使用USB连接
手机的序列号可以通过adb devices
获取到,假设序列号是123456f
,连接代码为
import uiautomator2 as u2
d = u2.connect_usb('123456f')
抓取手机上应用的控件
我这里使用的weditor,
1.终端中输入 pip install weditor安装weditor
2.终端中输入python -m weditor启动weditor
下图为网页的截图
然后再选取元素定位就可以完成本次需求
代码如下:
#_*_ coding:utf-8_*_
import uiautomator2 as u2
import re
import time
STOP_COUNT=150
d = u2.connect()
#输入滑动解锁码
def do_password(count):
#通过weditor获取到的图案位置
d.swipe_points([(0.304, 0.431), (0.507, 0.435), (0.5, 0.636)], 0.1)
#检验是否输入正确
def do_check():
#检查输入密码是否达到现在
if d(resourceId="android:id/message").exists:
message = d(resourceId="android:id/message").get_text()
#取得输密码的次数
times = re.findall('\d+', message)[0]
#需要等待的时间
timeout = re.findall('\d+', message)[1]
print("暂时不能输入密码,这是第$s次输入,需要等待%s才可以再次输入" % (times, timeout))
return True, times, timeout
else:
print("可以输入")
return False, 0, 0
count = 0
while True:
ret, times, timeout = do_check()
if ret:
d.screenshot(times + "times_" + timeout + "s.jpg")
if int(times) >= STOP_COUNT:
break
time.sleep(int(timeout))
d(resourceId="android:id/button3").click()
count = count + 1
do_password(count)
效果图:
来源:https://blog.csdn.net/qq_35661796/article/details/84075824


猜你喜欢
- 背景在上篇文章,我们系统地学习了where 1=1 相关的知识点,大家可以回看《MySQL中where 1=1方法的使用
- 1、建立socket建立socket对象需要搞清通信类型和协议家族。通信类型指明了用什么协议来传输数据。协议的例子包括IPv4、IPv6、I
- 之前有写过一篇如何使用Pytorch实现two-head(多输出)模型在那篇文章里,基本把two-head网络以及构建讲清楚了(如果不清楚请
- 分支的新建与合并现在让我们来看一个简单的分支与合并的例子,实际工作中大体也会用到这样的工作流程:开发某个网站。为实现某个新的需求,创建一个分
- 本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下实现的效果如下: 主程序代码如下:import p
- 目录一、背景二、自动化的方案三、思路和知识点四、操作步骤4.1 初识 PyAutoGUI4.2 坐标系4.3 点击4.4 输入4.5 汉字输
- 使用base64对图片的二进制进行编码并用ajax进行显示有时候我们需要动态的将图片的二进制在页面上进行显示,如我们需要弄一个验证码的功能,
- 一年前网上还找不到关于 inline-block 属性的文章,为了方便大家更好的理解该属性,当时总结整理了篇《display:inline-
- 本文实例为大家分享了Python读写Excel表格的具体代码,供大家参考,具体内容如下python读取Excel表格:import xlrd
- 相关概念并发:指一个时间段内,有几个程序在同一个cpu上运行,但是任意时刻只有一个程序在cpu上运行。比如说在一秒内cpu切换了100个进程
- 一. torch.stack()函数解析1. 函数说明:1.1 官网:torch.stack(),函数定义及参数说明如下图所示:1.2 函数
- 服务器响应HTTP的类型ContentType大全,使用方法:<% Response.ContentType =&
- 什么是 Python? Python 之父 Guido van Rossum 说:Python是一种高级程序语言,其核心设计哲学是代码可读性
- 前两篇讲述了Django的理论,从这篇开始,我们真正进入Django实战部分,今天先从用户认证开始。当大家平时打开一个网站时,第一步一般做什
- 本文实例讲述了Python装饰器用法。分享给大家供大家参考,具体如下:用类作为装饰器示例一最初代码:class bol(object): d
- 这篇文章主要介绍了python文字和unicode/ascll相互转换函数及简单加密解密实现代码,下面我们来了解一下。import reim
- 从 PDF 表格中获取数据是一项痛苦的工作。不久前,一位开发者提供了一个名为 Camelot 的工具,使用三行代码就能从 PDF 文件中提取
- 1. 内置下载器中间件顺序{'scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMid
- 不多说,直接上代码from hdfs import Clientimport pandas as pdHDFSHOST = "ht
- 一、Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如