Appium Appium 自动化测试不稳定,总是运行一段时间后

醋精测试媛 · 2021年06月18日 · 最后由 醋精测试媛 回复于 2021年07月09日 · 6214 次阅读

报错

selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not proxy command to the remote server. Original error: timeout of 240000ms exceeded


appium log:

[WD Proxy] Error: timeout of 240000ms exceeded
[WD Proxy]     at createError (C:\Users\user\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\axios\lib\core\createError.js:16:15)
[WD Proxy]     at ClientRequest.handleRequestTimeout (C:\Users\user\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\axios\lib\adapters\http.js:256:16)
[WD Proxy]     at Object.onceWrapper (events.js:291:20)
[WD Proxy]     at ClientRequest.emit (events.js:208:15)
[WD Proxy]     at Socket.emitRequestTimeout (_http_client.js:680:40)
[WD Proxy]     at Object.onceWrapper (events.js:291:20)
[WD Proxy]     at Socket.emit (events.js:203:13)
[WD Proxy]     at Socket._onTimeout (net.js:434:8)
[WD Proxy]     at listOnTimeout (internal/timers.js:531:17)
[WD Proxy]     at processTimers (internal/timers.js:475:7)
[MJSONWP (211db10d)] Encountered internal error running command: UnknownError: An unknown server-side error occurred while processing the command. Original error: Could not proxy command to the remote server. Original error: timeout of 240000ms exceeded
[MJSONWP (211db10d)]     at JWProxy.command (C:\Users\user\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-base-driver\lib\jsonwp-proxy\proxy.js:280:13)
[MJSONWP (211db10d)]     at processTicksAndRejections (internal/process/task_queues.js:85:5)
[HTTP] <-- POST /wd/hub/session/211db10d-0ea4-4ec8-a73f-3e4d45faefcd/element 500

代码很普通:

WebDriverWait(driver, _TIMING_OUT).until(lambda x: x.find_elements(*self.locator))
element = driver.find_element(*self.locator)
return element.get_attribute("text")

出现的地方不是固定的,有时候是 a 元素,有时候是 b 元素,请问大家遇到过吗?

共收到 11 条回复 时间 点赞

应该设备的 appium 服务关闭了,这种问题经常会有遇到的,连接一次 appium 服务后,长时间操作没有重新连接设备端的 appium,或者是连接后长时间没有 appium 服务~
建议你 try 一下这种异常,如果是这种异常就直接去重新创建会话,然后把用例重新执行下~

你得找出更多信息,比如运行时 _TIMING_OUT 是你想要的 _TIMING_OUT 吗?打印一下出错的时候看看。
WebDriverWait 这里用 lambda 、星号变复杂是为了做什么呢?把复杂的代码拆简单,记录更多的中间状态。

黑水 回复

timeout 是 10,然后 self.locator 是一个元组,所以用了 *,这些值是没问题的。

wtnhz 回复

我试试。

从目前给到的日志,只能看出是某个底层的请求可能由于卡住超时了,超过 240 秒都没返回。但因为不知道你使用的自动化驱动方式,所以不知道是 ios wda 卡住,还是 android uiautomator2 卡住,还是别的其他底层驱动卡住。

可以跑的时候也收集下对应操作系统的日志(如 android logcat ,ios 的系统日志),看下发生超时的同一时刻,操作系统有没有报什么异常?

如果是 python 开发的话,建议用 python 的 uiautomator2,个人使用感觉不错

陈恒捷 回复

谢谢,我已经改了一下,如果之后再有这个错误,会有 andriod 的 logcat 输出,后面会贴出来。

请问是怎么修改的,我这边也经常碰到

Soner 回复

不好意思哦,我没有找到合适的解决方法,其实有 logcat,但是看了一下就是一直没找到某个元素然后超时了(而且截图里面明明存在那个元素)。
我是直接为了防止后续用例失败,每一个 py 文件重开一个 session,然后就是重跑机制了。

😂 重跑机制的话,是把当前失败的 appium 服务停止,在重新起一个新的服务吗?我这边是长时间运行后,重启服务也不管用,必须要卸载掉三个安装的 apk 和重启设备才行

Soner 回复

如果出了这个错误,就不用停止 appium 服务,直接重新新建一个 session 就行了。

如果你是必须要重启设备才行的话,可能是 desired_caps 配置上哪里有问题

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册