如何让 Appium 会话长时间保持活动状态

Posted

技术标签:

【中文标题】如何让 Appium 会话长时间保持活动状态【英文标题】:How to keep alive Appium session for long time 【发布时间】:2019-06-15 21:48:45 【问题描述】:

我需要在测试过程中等待 5 分钟,但 Appium 会话默认为 newCommandTimeout of 60s.,并且在下一个命令中我的会话超时。

androidDriver appiumDriver = new AndroidDriver(new URL(getMcmUrl()), capabilities);
Thread.sleep(5*60*1000); // 5 minutes sleep time
appiumDriver.executeScript("...")

【问题讨论】:

我宁愿不将newCommandTimeout 功能更改为五分钟,只是能够在动态时间内保持其活动状态,同时执行一些后台逻辑。 【参考方案1】:

新命令超时:

在假定客户端退出并结束会话之前,Appium 将等待来自客户端的新命令多长时间(以秒为单位)

如果超时为 60 秒,您需要每分钟至少执行一次任何命令,以保持会话处于活动状态。

例如,这就是睡眠 5 分钟的样子

for (int i = 0; i < 5; i++) 
    driver.getOrientation(); // execute some command to keep the session alive
    Thread.sleep(59*1000); // wake up before session expired

阅读本文了解更多信息https://l18.me/how-to-keep-alive-appium-driver-da9227b2fa

【讨论】:

【参考方案2】:

在您的 DesiredCapabilities 中添加 newCommandTimeout 功能。

DesiredCapabilities caps=new DesiredCapabilities();
//other desired caps
//add the following line
caps.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300);
//then define your driver here
AppiumDriver<MobileElement> driver= new AndroidDriver(new URL(getMcmUrl()), caps);    

newCommandTimeout 表示 Appium 在假定客户端退出并结束会话之前将等待来自客户端的新命令的时间(以秒为单位)。

300 秒 = 5 分钟

【讨论】:

【参考方案3】:

您是否考虑过并放弃了覆盖 newCommandTimeout?这肯定会奏效,但也有缺点。

【讨论】:

这可以工作,但它有一些限制,仅在以下情况下使用此解决方案: 1. 你已经知道你需要的时间量。 2. 总是同一时间。 3.你不在乎在驱动程序过期之前你是否总是有很长的空闲超时。 (即使你不需要)。 是的,这是最后的手段或快速调试选项。您的解决方案要好得多。 或者您可以为该一项测试提供不同的功能。【参考方案4】:

尝试使用此命令,

"cap.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, "100");"

通过此命令,appium 服务器将在关闭之前等待 100 秒的命令。您可以根据自己的喜好增加超时时间。

【讨论】:

我不会对你的答案投反对票,因为我认为诚实的努力不应该受到惩罚,但参数是数值,而不是字符串。请参阅 Suban 的答案,该答案与我在代码中使用的内容一致。 您好,感谢您的回复。但是我已经将上述命令与参数一起用作字符串值,它对我有用。 很公平。也许功能处理器的内部工作可以处理作为字符串传递的数值。

以上是关于如何让 Appium 会话长时间保持活动状态的主要内容,如果未能解决你的问题,请参考以下文章

我可以让 SQLPlus 中的会话保持活动状态,然后重新连接到同一个会话吗? BASH相关

在 ssh 登录中停止烦人的会话保持活动消息

iOS开发:后台运行以及保持程序在后台长时间运行

Facebook 聊天 tcp 连接如何保持活动状态?

如何防止 Ajax 调用使会话保持活动状态?

让会话无限期地保持活跃状态