IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Appium启动应用时,报错提示adb执行超时的问题解决 -> 正文阅读

[开发测试]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即可解决了。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:39:53  更:2021-08-05 17:40:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 10:28:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码