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-uiautomator2主要分为两个部分,python客户端,移动设备

  • python端: 运行脚本,并向移动设备发送HTTP请求

  • 移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。

整个过程

  1. 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动uiautomator2服务(默认7912端口)进行监听

  2. 在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)

  3. 移动设备通过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的过程

  1. 配置手机设备参数,设置具体操作的是哪一台手机

  2. 抓取手机上应用的控件,制定对应的控件来进行操作

  3. 对抓取到的控件进行操作,比如点击、填写参数等。

配置手机设备参数

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

下图为网页的截图

Python+uiautomator2实现手机锁屏解锁功能

然后再选取元素定位就可以完成本次需求

代码如下:


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

效果图:

Python+uiautomator2实现手机锁屏解锁功能

来源:https://blog.csdn.net/qq_35661796/article/details/84075824

标签:python,uiautomator2,锁屏,解锁,滑动解锁
0
投稿

猜你喜欢

  • 深入了解Python枚举类型的相关知识

    2022-08-02 06:15:40
  • Python学生成绩管理系统简洁版

    2023-08-23 01:33:08
  • python中return不返回值的问题解析

    2021-04-26 20:36:07
  • 方便和实用

    2009-02-02 10:16:00
  • Python实现图像随机添加椒盐噪声和高斯噪声

    2023-06-13 22:54:36
  • asp如何创建一个PDF文件?

    2009-11-14 20:53:00
  • Python cookbook(数据结构与算法)将名称映射到序列元素中的方法

    2021-06-06 01:26:54
  • asp好用的函数集分享

    2011-09-13 12:49:07
  • SQL Server中索引使用及维护

    2008-11-25 11:13:00
  • 是在客户端确认还是在服务器端确认?

    2010-07-14 21:05:00
  • 中国传统色彩名录

    2007-11-29 18:36:00
  • 解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题

    2023-11-08 21:32:55
  • django序列化serializers过程解析

    2022-09-26 22:22:36
  • Python操作mongodb的9个步骤

    2023-03-11 15:37:53
  • jQuery实现同一点击,两个不同链接,指向两个不同的iframe

    2010-06-21 10:52:00
  • 探讨链接打开方式

    2009-03-16 16:55:00
  • python获取mp3文件信息的方法

    2023-12-18 19:49:11
  • 利用python实现在微信群刷屏的方法

    2023-05-01 13:56:29
  • sql2000如何完美压缩.mdf文件

    2010-03-03 15:47:00
  • PHP基于非递归算法实现先序、中序及后序遍历二叉树操作示例

    2023-08-16 04:46:47
  • asp之家 网络编程 m.aspxhome.com