java - Appium 服务器在等待时自动退出会话
问题描述
我在 Android 平台上使用 Appium 进行自动化。由于某些原因,我需要在测试期间等待一段时间。但是,如果 Appium 在大约 4 秒内没有收到命令,它会自动退出会话。谁能帮我告诉我如何让 Appium 不退出我的驱动程序。
我尝试将“newCommandTimeout”添加到功能中,但它不起作用。
capabilities.setCapability("newCommandTimeout", 120000);
Appium 版本:v1.9.1
以下是会话退出时的 appium 日志:
[W3C] Calling AppiumDriver.deleteSession() with args: ["d9a0e702-f477-439b-8502-aa9d3c93737f"]
[BaseDriver] Event 'quitSessionRequested' logged at 1548332599830 (20:23:19 GMT+0800 (Malay Peninsula Standard Time))
[Appium] Removing session d9a0e702-f477-439b-8502-aa9d3c93737f from our master session list
[AndroidDriver] Shutting down Android driver
2019 年 1 月 29 日更新:
正如大多数人所建议的那样,我尝试将 300 设置为 newCommandTimeout
capabilities.setCapability("newCommandTimeout", 300);
会话仍在退出。我使用 Thread.sleep(5000) 让脚本等待。这是在 Appium 中创建会话和关闭会话的日志。添加时间戳。看起来会话在等待 10 秒后自动关闭。
[2019-01-29 01:03:51][Appium] Creating new AndroidDriver (v4.1.1) session
[2019-01-29 01:03:51][Appium] Capabilities:
[2019-01-29 01:03:51][Appium] platform: ANDROID
[2019-01-29 01:03:51][Appium] platformName: android
[2019-01-29 01:03:51][Appium] appActivity: *****
[2019-01-29 01:03:51][Appium] appPackage: *****
[2019-01-29 01:03:51][Appium] deviceName: *****
[2019-01-29 01:03:51][Appium] language: en
[2019-01-29 01:03:51][Appium] locale: US
[2019-01-29 01:03:51][Appium] newCommandTimeout: 300
<SOME LOGS OMITTED>
[2019-01-29 01:04:10][HTTP] <-- POST /wd/hub/session 200 18650 ms - 913
[2019-01-29 01:04:10][HTTP]
[2019-01-29 01:04:10][HTTP] --> GET /wd/hub/session/f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7
[2019-01-29 01:04:10][HTTP] {}
[2019-01-29 01:04:10][HTTP] <-- GET /wd/hub/session/f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7 200 5 ms - 845
[2019-01-29 01:04:10][HTTP]
[2019-01-29 01:04:10][HTTP] --> GET /wd/hub/session/f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7
[2019-01-29 01:04:10][HTTP] <-- GET /wd/hub/session/f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7 200 3 ms - 845
[2019-01-29 01:04:10][HTTP]
[2019-01-29 01:04:20][HTTP] --> DELETE /wd/hub/session/f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7
[2019-01-29 01:04:20][HTTP] {}
[2019-01-29 01:04:20][W3C] Calling AppiumDriver.deleteSession() with args: ["f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7"]
[2019-01-29 01:04:20][BaseDriver] Event 'quitSessionRequested' logged at 1548738260177 (13:04:20 GMT+0800 (Malay Peninsula Standard Time))
[2019-01-29 01:04:20][Appium] Removing session f1dbcd92-fa13-4fc7-a9fd-e6a82b55f9e7 from our master session list
[2019-01-29 01:04:20][AndroidDriver] Shutting down Android driver
2019 年 1 月 29 日更新 II: 经过几次反复试验,我发现根本原因是睡眠后的 driver.currentActivity()。我得到了这个例外。因为我们的框架捕捉到了这一点,所以它向 Appium 发送了关闭信号。
org.openqa.selenium.WebDriverException: java.net.SocketException: Software caused connection abort: recv failed
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'localhost', ip: '', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_192'
Driver info: driver.version: AndroidDriver
at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:233)
仅当我在等待 10 秒后执行 driver.currentActivity() 时才会发生此异常。我的目标是让脚本等到它看到另一个活动。目前我的解决方法是这样的:
int counter = 0;
while(oDriver.currentActivity().contains("someActivity")) {
Thread.sleep(1000);
counter++;
if ( counter >= 10 ) break;
}
if (oDriver.currentActivity().contains("someActivity"))
System.out.println("Reached");
解决方案
这是这个问题的正确答案。
capabilities.setCapability("newCommandTimeout", 300);
谢谢@Rajesh Chaudhary。
我将针对 driver.currentActivity() 期间遇到的异常创建一个单独的问题。
推荐阅读
- azure - 路由到 Azure Front Door 后面的多个 Web 应用
- python - 更改字符串值
- node.js - 数据未加载到前端
- python-3.x - 对于给定的图,构造最短路径树 - Python
- c++ - QPlainTextEdit 拒绝更改其背景颜色 (Qt / C++)
- django - Django 的 m2m_changed 触发器未正确触发
- amazon-s3 - 使用低级 java API 的 Amazon S3 分段上传仅上传单个部分
- google-apps-script - 禁用电子表格副本 - Google 表格
- node.js - puppeteer fileChooser:如何使用 URL 而不是本地文件路径?
- python - 熊猫获得价值百分位