UIautomator2提示需强制重启的解决方案

2023-12-17 00:52

本文主要是介绍UIautomator2提示需强制重启的解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UIautomator2提示需强制重启的解决方案

UIautomator2测试的时候,一旦和device端断连,就需要手动重启UIautomator2才能继续测试。本文提供在这种情况下的解决方案。

UIautomator是google原生的自动化测试工具,由于只支持java,所以后面推出了支持python语言的UIautomator2。

UIautomator2测试环境,需要在device端安装一个atx应用,用于和PC端通讯。

在某些情况,比如手机重启,或者usb插拔,UIautomator2的测试没法进行了,提示如下错误:

----------------------------------------------------------------------
Traceback (most recent call last):File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/uiautomator2/__init__.py", line 486, in _jsonrpc_retry_callreturn self._jsonrpc_call(*args, **kwargs)File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/uiautomator2/__init__.py", line 556, in _jsonrpc_callraise err
uiautomator2.exceptions.UiAutomationNotConnectedError: ({'code': -32001, 'message': 'java.lang.IllegalStateException', 'data': 'java.lang.IllegalStateException: UiAutomation not connected, UiAutomation@7e49b9d[id=-1, flags=0]\n\tat android.app.UiAutomation.throwIfNotConnectedLocked(UiAutomation.java:1239)\n\tat android.app.UiAutomation.waitForIdle(UiAutomation.java:800)\n\tat androidx.test.uiautomator.QueryController.waitForIdle(QueryController.java:532)\n\tat androidx.test.uiautomator.QueryController.waitForIdle(QueryController.java:523)\n\tat androidx.test.uiautomator.UiDevice.waitForIdle(UiDevice.java:621)\n\tat androidx.test.uiautomator.UiDevice.pressRecentApps(UiDevice.java:488)\n\tat com.github.uiautomator.stub.AutomatorServiceImpl.pressKey(AutomatorServiceImpl.java:558)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.googlecode.jsonrpc4j.JsonRpcBasicServer.invoke(JsonRpcBasicServer.java:467)\n\tat com.googlecode.jsonrpc4j.JsonRpcBasicServer.handleObject(JsonRpcBasicServer.java:352)\n\tat com.googlecode.jsonrpc4j.JsonRpcBasicServer.handleJsonNodeRequest(JsonRpcBasicServer.java:283)\n\tat com.googlecode.jsonrpc4j.JsonRpcBasicServer.handleRequest(JsonRpcBasicServer.java:251)\n\tat com.github.uiautomator.stub.AutomatorHttpServer.serve(AutomatorHttpServer.java:100)\n\tat fi.iki.elonen.NanoHTTPD.serve(NanoHTTPD.java:2244)\n\tat fi.iki.elonen.NanoHTTPD$HTTPSession.execute(NanoHTTPD.java:945)\n\tat fi.iki.elonen.NanoHTTPD$ClientHandler.run(NanoHTTPD.java:192)\n\tat java.lang.Thread.run(Thread.java:923)\n'}, 'pressKey')During handling of the above exception, another exception occurred:Traceback (most recent call last):File "/home/ldeng/code/PythonProjects/DLTest/OtaTest.py", line 27, in setUpdevice_utils.clear_all_tasks(self.device)File "/home/ldeng/code/PythonProjects/DLTest/utils/device_utils.py", line 78, in clear_all_tasksdevice.press("recent")File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/uiautomator2/__init__.py", line 1164, in pressreturn self.jsonrpc.pressKey(key)File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/uiautomator2/__init__.py", line 479, in __call__return self.server._jsonrpc_retry_call(self.method, params,File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/uiautomator2/__init__.py", line 488, in _jsonrpc_retry_callself.reset_uiautomator(str(e))  # uiautomator可能出问题了,强制重启一下File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/uiautomator2/__init__.py", line 640, in reset_uiautomatorok = self._force_reset_uiautomator_v2(File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/uiautomator2/__init__.py", line 667, in _force_reset_uiautomator_v2if self._is_apk_required():File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/uiautomator2/__init__.py", line 711, in _is_apk_requiredif self._package_version("com.github.uiautomator.test") is None:File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/uiautomator2/__init__.py", line 735, in _package_versionreturn packaging.version.parse(m.group('name') if m else "")File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/packaging/version.py", line 54, in parsereturn Version(version)File "/home/ldeng/code/PythonProjects/DLTest/venv/lib/python3.10/site-packages/packaging/version.py", line 200, in __init__raise InvalidVersion(f"Invalid version: '{version}'")
packaging.version.InvalidVersion: Invalid version: ''----------------------------------------------------------------------

手动解决方案:

点开ATX应用,点击“启动UIAUTOMATOR”,重新测试即可。

image-20231216113801529

自动化解决方案:

UIautomator2用于自动化测试,设备重启就需要手动操作,是不是有点不自动?

其实思路很简单,用adb来跑这段手动逻辑, python代码如下:

DL_ATX_APK="com.github.uiautomator"
DL_ATX_MAIN="com.github.uiautomator.MainActivity"
START_ATX_SERVER="./atx/start_atx.sh"def restartUiautomotor(self):time.sleep(5)# unlock screenutils.shell_cmd("adb shell input keyevent 224")time.sleep(2)utils.shell_cmd("adb shell input keyevent 82")time.sleep(2)# start atx service on deviceutils.shell_cmd(START_ATX_SERVER)time.sleep(5)# start atx app on deviceself.device.app_start(DL_ATX_APK, DL_ATX_MAIN)time.sleep(2)# click “启动UIAUTOMATOR” on deviceutils.shell_cmd("adb shell input tap 185 450")time.sleep(2)# back to homeself.device.press("back")print("restart Uiautomotor success!")pass

脚本start_atx.sh

adb push atx-agent /data/local/tmp
adb shell chmod 755 /data/local/tmp/atx-agent
# launch atx-agent in daemon mode
adb shell /data/local/tmp/atx-agent server -d
# stop already running atx-agent and start daemon
adb shell /data/local/tmp/atx-agent server -d --stop

完美解决问题~!

这篇关于UIautomator2提示需强制重启的解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/502521

相关文章

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提