Appium启动应用时,报错提示adb执行超时的问题解决

日志信息

2021-08-02 20:10:48.447  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][AndroidDriver] Screen already unlocked, doing nothing
2021-08-02 20:10:48.448  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][UiAutomator2] Starting 'com.seewo.screensharepro.server/com.seewo.easiair.server.activity.MainActivity and waiting for 'com.seewo.screensharepro.server/com.seewo.easiair.server.activity.MainActivity'
2021-08-02 20:10:48.449  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [ADB] Running '/Users/sai/android-sdk/android-sdk-macosx/platform-tools/adb -P 5037 -s 172.20.214.201\:1379 shell am start -W -n com.seewo.screensharepro.server/com.seewo.easiair.server.activity.MainActivity -S -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -f 0x10200000'
2021-08-02 20:11:08.467  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [UiAutomator2] Deleting UiAutomator2 session
2021-08-02 20:11:08.467  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [UiAutomator2] Deleting UiAutomator2 server session
2021-08-02 20:11:08.468  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [WD Proxy] Matched '/' to command name 'deleteSession'
2021-08-02 20:11:08.468  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [WD Proxy] Proxying [DELETE /] to [DELETE http://127.0.0.1:8200/wd/hub/session/06921094-d944-4d44-a5c7-c298b3479009] with no body
2021-08-02 20:11:08.512  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [WD Proxy] Got response with status 200: {"sessionId":"06921094-d944-4d44-a5c7-c298b3479009","value":null}
2021-08-02 20:11:08.512  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [ADB] Running '/Users/sai/android-sdk/android-sdk-macosx/platform-tools/adb -P 5037 -s 172.20.214.201\:1379 shell am force-stop com.seewo.screensharepro.server'
2021-08-02 20:11:08.605  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [Logcat] Stopping logcat capture
2021-08-02 20:11:08.609  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [ADB] Removing forwarded port socket connection: 8200 
2021-08-02 20:11:08.609  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [ADB] Running '/Users/sai/android-sdk/android-sdk-macosx/platform-tools/adb -P 5037 -s 172.20.214.201\:1379 forward --remove tcp\:8200'
2021-08-02 20:11:08.619  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][UiAutomator2] Restoring hidden api policy to the device default configuration
2021-08-02 20:11:08.620  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [ADB] Running '/Users/sai/android-sdk/android-sdk-macosx/platform-tools/adb -P 5037 -s 172.20.214.201\:1379 shell 'settings delete global hidden_api_policy_pre_p_apps;settings delete global hidden_api_policy_p_apps;settings delete global hidden_api_policy''
2021-08-02 20:11:08.772  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [BaseDriver] Event 'newSessionStarted' logged at 1627906268771 (20:11:08 GMT+0800 (China Standard Time))
2021-08-02 20:11:08.793  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [W3C] Encountered internal error running command: Error: Cannot start the 'com.seewo.screensharepro.server' application. Visit https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md for troubleshooting. Original error: Error executing adbExec. Original error: 'Command '/Users/sai/android-sdk/android-sdk-macosx/platform-tools/adb -P 5037 -s 172.20.214.201\:1379 shell am start -W -n com.seewo.screensharepro.server/com.seewo.easiair.server.activity.MainActivity -S -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -f 0x10200000' timed out after 20000ms'. Try to increase the 20000ms adb execution timeout represented by 'adbExecTimeout' capability
2021-08-02 20:11:08.793  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [W3C]     at ADB.startApp (/usr/local/lib/node_modules/appium/node_modules/appium-adb/lib/tools/apk-utils.js:177:11)
2021-08-02 20:11:08.802  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][debug] [W3C] Destroying socket connection
2021-08-02 20:11:08.802  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][HTTP] <-- POST /wd/hub/session 500 28272 ms - 1813
2021-08-02 20:11:08.803  INFO 64725 --- [c Stream Pumper] com.daxiang.utils.Terminal               : [Terminal][HTTP]

从上述的日志可以看出来,提示的信息是adbExecTimeout 执行超时了,并且提示是增加超时的时间,但是这个配置明显是不合适的,还是得真正分析出来超时的原因到底是什么。而且还有一个重要的信息就是,实际上应用是已经完成启动了,只是看日志的描述是 am start 没有返回值导致的。

分析

我们可以看到真正超时的原因是因为执行这条命令然后超时了。

adb -P 5037 -s 172.20.214.201\:1379 shell am start -W -n com.seewo.screensharepro.server/com.seewo.easiair.server.activity.MainActivity -S -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -f 0x10200000

那我们就先手动去执行下看看是否有啥表现的现象吧。

结果发现实际也发生了一样的情况。也就是am start 以后迟迟没有返回的结果

在这里插入图片描述

找相应的开发了解到,当对应的activity完成启动以后,会启动service后自己就完成了退出的操作了,service会会进行绘制window的窗口来展示画面,而不是通过我们一直了解的activity进行绘制画面。

以上的逻辑就会导致一个问题,就是am start 以后就会去等待对应的activity是否真正的完成启动的动作,但是实际上要完成启动的activity已经退出了,这就导致了实际上应用已经起来了,但是确没有等到对应的activity。

解决

那针对这个有解决的方法吗? 答案肯定是有的。

我们找到一篇官方的wiki 说明的很详细了

Appium 需要知道包和活动名称才能正确初始化被测应用程序。此信息应在驱动程序功能中提供,包括以下键:
appActivity: 主要应用活动的名称
appPackage: 应用程序包的标识符
appWaitActivity:要等待的应用程序活动的名称/哪个开始第一个
appWaitPackage: 要等待的应用程序包的 id/哪个开始第一个
appWaitDuration: 等待appWaitActivity焦点的最大持续时间,以毫秒为单位(默认为 20000)
appWaitForLaunch: 是否等待活动管理器将控制权返回给调用进程。默认情况下,驱动程序总是等到appWaitDuration过期。将此功能设置为false有效取消此等待并在am成功触发启动活动的命令后立即解除对服务器循环的阻塞。

命令“…”在 X 毫秒后超时
如果您已仔细检查活动名称是否正确,但启动仍然超时,则尝试增加appWaitDuration功能的值。通常,默认 20 秒对于大多数应用程序来说就足够了,但是,一些较大的应用程序可能需要更多时间来启动和显示第一个活动。请不要创建这样的应用程序。
也可能存在活动根本不将控制权返回给调用进程的情况,因此am start调用永远独立于 的值而阻塞appWaitDuration,从而导致超时。在这种情况下设置appWaitForLaunch到false可能有助于解决这个问题。尽管通过选择此选项,驱动程序无法确保活动已完全启动,因此由客户端代码来验证初始 UI 状态是否符合预期。

所以解决上述的问题 其实比较简单,直接在appium的capabilities中将 appWaitForLaunch 设置为false即可解决了。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值