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

相关文章

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

关于Nginx跨域问题及解决方案(CORS)

《关于Nginx跨域问题及解决方案(CORS)》文章主要介绍了跨域资源共享(CORS)机制及其在现代Web开发中的重要性,通过Nginx,可以简单地解决跨域问题,适合新手学习和应用,文章详细讲解了CO... 目录一、概述二、什么是 CORS?三、常见的跨域场景四、Nginx 如何解决 CORS 问题?五、基

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型