python + uiautomator2编译平板语言工具并切换打包exe可执行文件(上)

简介: python + uiautomator2编译平板语言工具并切换打包exe可执行文件(上)

python + uiautomator2编译平板语言工具并切换打包exe可执行文件


初版:

  1. 在命令行输入 adb shell am monitor
  2. 点击打开要获取包名的应用
  3. 命令行则会显示当前启动的应用的包名

image.pngimage.png

设备端需要安装atx-agent

1.进入到对应的sitpackage(uiautomator2所在的地方),在命令行输入 python -m uiautomator2 init,则会自动给设备安装好对应的apk等配置

image.png

image.png

Microsoft Windows [版本 10.0.18363.1198]
(c) 2019 Microsoft Corporation。保留所有权利。
D:\K_Learning\pythonFiles\airtest_script\venv\Lib\site-packages>python -m uiautomator2 init
[I 201118 16:48:37 init:155] uiautomator2 version: 2.12.0
[I 201118 16:48:37 init:352] Install minicap, minitouch
[D 201118 16:48:37 init:62] Download https://tool.appetizer.io/openatx/stf-binaries/raw/0.2.2/node_modules/minitouch-prebuilt-beta/prebuilt/arm64-v8a/bin/minitouch
minitouch |⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿| 34.1 KB/34.1 KB
[?25h[D 201118 16:48:38 init:232] Push to /data/local/tmp/minitouch:0755
[D 201118 16:48:38 init:62] Download https://tool.appetizer.io/openatx/stf-binaries/raw/0.2.2/node_modules/minicap-prebuilt-beta/prebuilt/arm64-v8a/lib/android-29/minicap.so
minicap.so |⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿| 28.4 KB/28.4 KB
[?25h[D 201118 16:48:38 init:232] Push to /data/local/tmp/minicap.so:0755
[D 201118 16:48:38 init:62] Download https://tool.appetizer.io/openatx/stf-binaries/raw/0.2.2/node_modules/minicap-prebuilt-beta/prebuilt/arm64-v8a/bin/minicap
minicap |⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿| 526.5 KB/526.5 KB
[?25h[D 201118 16:48:39 init:232] Push to /data/local/tmp/minicap:0755
[D 201118 16:48:39 init:250] apk-debug package-info: None
[D 201118 16:48:39 init:251] apk-debug-test package-info: None
[I 201118 16:48:39 init:367] Install com.github.uiautomator, com.github.uiautomator.test 2.3.1
[D 201118 16:48:39 init:162] Shell: ('pm', 'uninstall', 'com.github.uiautomator')
[D 201118 16:48:39 init:162] Shell: ('pm', 'uninstall', 'com.github.uiautomator.test')
[D 201118 16:48:39 init:62] Download https://tool.appetizer.io/openatx/android-uiautomator-server/releases/download/2.3.1/app-uiautomator.apk
app-uiautomator.apk |⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿| 2.1 MB/2.1 MB
[?25h[D 201118 16:48:40 init:232] Push to /data/local/tmp/app-uiautomator.apk:0644
[D 201118 16:48:40 init:162] Shell: ('pm', 'install', '-r', '-t', '/data/local/tmp/app-uiautomator.apk')
[I 201118 16:48:47 init:332] - app-uiautomator.apk installed
[D 201118 16:48:47 init:62] Download https://tool.appetizer.io/openatx/android-uiautomator-server/releases/download/2.3.1/app-uiautomator-test.apk
app-uiautomator-test.apk |⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿| 1.2 MB/1.2 MB
[?25h[D 201118 16:48:48 init:232] Push to /data/local/tmp/app-uiautomator-test.apk:0644
[D 201118 16:48:48 init:162] Shell: ('pm', 'install', '-r', '-t', '/data/local/tmp/app-uiautomator-test.apk')
[I 201118 16:48:49 init:332] - app-uiautomator-test.apk installed
[I 201118 16:48:49 init:340] Install atx-agent 0.9.5
[D 201118 16:48:49 init:62] Download https://tool.appetizer.io/openatx/atx-agent/releases/download/0.9.5/atx-agent_0.9.5_linux_armv7.tar.gz
atx-agent_0.9.5_linux_armv7.tar.gz |⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿| 4.1 MB/4.1 MB
[?25h[D 201118 16:48:49 init:232] Push to /data/local/tmp/atx-agent:0755
[D 201118 16:48:50 init:162] Shell: ('/data/local/tmp/atx-agent', 'server', '--stop')
[D 201118 16:48:51 init:162] Shell: ('/data/local/tmp/atx-agent', 'server', '--nouia', '-d')
[D 201118 16:48:51 init:162] Shell: ('/data/local/tmp/atx-agent', 'server', '--nouia', '-d')
[I 201118 16:48:51 init:377] Check atx-agent version
[D 201118 16:48:51 init:390] Forward: local:tcp:53075 -> remote:tcp:7912
[D 201118 16:48:52 init:390] Forward: local:tcp:53075 -> remote:tcp:7912
[D 201118 16:48:52 init:390] Forward: local:tcp:53075 -> remote:tcp:7912
[D 201118 16:48:52 init:393] atx-agent version 0.9.5
Successfully init AdbDevice(serial=HA12G0GW)
  1. 下载所push到的都在设备的 /data/local/tmp(所有的东西都在设备的这个文件夹里面),可以通过adb shell 进入这个文件夹查看
  2. 把这些东西拉到电脑上
D:\G_Working\自动化小工具需求\语言切换判断\截图\设备所需安装apk和文件>adb pull /data/local/tmp
/data/local/tmp/: 7 files pulled, 0 skipped. 10.0 MB/s (14026373 bytes in 1.334s)

image.png

4.根据cmd命令显示可以看出,它的操作步骤是在下载文件,安装文件,给ATX授权等操作直接封装成bat命令

image.png

:: 预置文件
adb push ./tmp/dalvik-cache /data/local/tmp
adb push ./tmp/minicap  /data/local/tmp
adb push ./tmp/minicap.so  /data/local/tmp
adb push ./tmp/minitouch  /data/local/tmp
adb push ./tmp/uidump.xml  /data/local/tmp
adb push ./tmp/app-uiautomator.apk  /data/local/tmp
adb push ./tmp/app-uiautomator-test.apk  /data/local/tmp
adb push ./tmp/atx-agent  /data/local/tmp
adb install ./tmp/app-uiautomator.apk 
adb install ./tmp/app-uiautomator-test.apk
adb shell /data/local/tmp/atx-agent server --stop
adb shell chmod 775 /data/local/tmp/atx-agent   #给atx-agent授权
adb shell /data/local/tmp/atx-agent server --nouia -d #添加-d表示在后台启动tx-agent

该工具网盘链接:

链接:https://pan.baidu.com/s/1xLlHzTev1uSEL11avLKJog  

提取码:xznb  

复制这段内容后打开百度网盘手机App,操作更方便哦


import uiautomator2
import time
import uiautomator2 as u2
#连接手机
print("正在连接设备")
d = u2.connect(r"HA169RPZ")   #HA12FYBL\HA12G0GW\HA169RPZ填入设备的SN号即可
print("设备连接成功,先回到主页面")
d.press('home')
print("回到主页面成功,正在启动应用")
d.implicitly_wait(20)
#启动应用
d.app_start("com.android.settings")
print("应用启动成功")
#创建session连接对象,建议与设置应用的绑定连接
s = d.session('com.android.settings',attach=True)
time.sleep(3)
#获取设备的尺寸
print(d.window_size())
sizeTuple = d.window_size()
x = sizeTuple[0]
y = sizeTuple[1]
print("屏幕的宽为:"+str(x) +",屏幕的高为:"+str(y)) #获取屏幕的宽高
#1.进入设置之后,划动屏幕找到System
d.swipe(x/5 * 4,y/5 * 4,x/5*4,y/5*1,1,50)
d.swipe(x/5 * 4,y/5 * 4,x/5*4,y/5*1,1,50)
d.implicitly_wait(5)
#2.通过class和下标点击系统(开发者模式)
d(className = 'android.widget.LinearLayout',index = '18').click()
time.sleep(1)
#3.点击语言和输入法
d(className = 'android.widget.LinearLayout',index = '1').click()
time.sleep(2)
#4.点击语言
d(className = 'android.widget.RelativeLayout',index = '1').click()
time.sleep(2)
#5.点击添加语言(此时页面仅可存在一个语言,其他语言需提前删除)(需判断目前显示的语言是否和要搜索的一致)
d(resourceId = 'com.android.settings:id/add_language').click()
#6.点击搜索
d(resourceId = 'android:id/locale_search_menu').click()
#7.输入需要更换的语言(此时要注意一个语言下面还有分支的情况)
Changelanguage = 'Čeština'  #Suomi Akan
d(resourceId = 'android:id/search_src_text').send_keys(Changelanguage)
d.implicitly_wait(5)
#8.选择更换的语言
d(resourceId = 'android:id/locale').click()
time.sleep(2)
print("准备点击小点")
#9.选择右上角的三个小点,remove
d(className = 'android.widget.ImageButton',index='1').click()
print("点好了")
#10.点击移除(把选择之前的语言移除掉)
d(resourceId = 'android:id/content').click()
time.sleep(3)
#11.勾选之前的语言(也就是第一个),这样把第一个删除之后,现在的语言就是需要更换的语言
d(className = 'android.widget.RelativeLayout',index = '0').click() #点击第一个语言
d(className = 'android.widget.TextView',index = '0').click() #点击删除
#12.由于点击第一个删除会触发系统提示弹窗,则勾选ok就好
d(resourceId = 'android:id/button1',index = '1').click()
time.sleep(1)
d.press("back") #返回到语言和输入法界面
time.sleep(1)
d.press("back") #返回到系统界面(开始进入系统更新对比)
print("-------------------------开始进入系统更新对比------------------")
#13.进入系统更新界面
d(className = 'android.widget.LinearLayout',index = '8').click()
#14.获取提示信息
WaringText = d(resourceId = 'com.lenovo.ota:id/text_new_version_content').get_text(timeout=5)
print(WaringText)
#15.使用获取到的信息和表格里面的信息进行对比


语言切换识别对比warning信息进度:
目前以实现基本流程操作,读取并写入EXCEL部分还未开始
 ①Uiautomator2所需相关配置可通过bat一键安装到设备并正常启动
 ②可自动获取设备SN号并进行连接
 ③可切换单语言的切换(语言下还有语言的切换还未实现)
 ④可正常读取系统更新界面的Warning的text信息
 next step:
 实现通过读取表格的信息,进行单语言切换,把读取的信息写入到表格



相关文章
|
2天前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
23天前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
39 7
|
1月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
270 7
|
2月前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
220 4
|
2月前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
2月前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
98 2
|
3月前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
66 2
|
2月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
2月前
|
C语言 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第24天】在Python编程的世界中,追求代码的简洁性和可读性是永恒的主题。列表推导式(List Comprehensions)作为Python语言的一个特色功能,提供了一种优雅且高效的方法来创建和处理列表。本文将深入探讨列表推导式的使用场景、语法结构以及如何通过它简化日常编程任务。
|
5月前
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
79 1