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

相关文章

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Xshell远程连接失败以及解决方案

《Xshell远程连接失败以及解决方案》本文介绍了在Windows11家庭版和CentOS系统中解决Xshell无法连接远程服务器问题的步骤,在Windows11家庭版中,需要通过设置添加SSH功能并... 目录一.问题描述二.原因分析及解决办法2.1添加ssh功能2.2 在Windows中开启ssh服务2

Mybatis提示Tag name expected的问题及解决

《Mybatis提示Tagnameexpected的问题及解决》MyBatis是一个开源的Java持久层框架,用于将Java对象与数据库表进行映射,它提供了一种简单、灵活的方式来访问数据库,同时也... 目录概念说明MyBATis特点发现问题解决问题第一种方式第二种方式问题总结概念说明MyBatis(原名

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景: