使用 WebdriverIO 实例化驱动程序时检测 BROWSERSTACK_ALL_PARALLELS_IN_USE 错误
Posted
技术标签:
【中文标题】使用 WebdriverIO 实例化驱动程序时检测 BROWSERSTACK_ALL_PARALLELS_IN_USE 错误【英文标题】:Detect BROWSERSTACK_ALL_PARALLELS_IN_USE error when instantiating a driver with WebdriverIO 【发布时间】:2022-01-18 11:50:45 【问题描述】:我正在使用 WebdriverIO API 创建一个新的 Appium WebDriver 会话:
const options = ...;
const driver: Browser<"async">;
try
driver = await remote(options);
catch (error)
console.log("Error:", error);
在 BrowserStack 中,可以运行的并行测试的数量是有限制的。我达到了这个限制并且我对remote
的调用出现了错误,并且在捕获中,我在变量error
中得到了这个:
Failed to create session.
这并没有给我太多关于呼叫失败原因的信息。另一方面,驱动程序正在发出给出这样一个答案的日志:
XXXX-XX-XXTXX:XX:XX.XXXZ ERROR webdriver: [BROWSERSTACK_ALL_PARALLELS_IN_USE] All parallel tests are currently in use, including the queued tests. Please wait to finish or upgrade your plan to add more sessions.: [BROWSERSTACK_ALL_PARALLELS_IN_USE] All parallel tests are currently in use, including the queued tests. Please wait to finish or upgrade your plan to add more sessions.
at Object.getErrorFromResponseBody (/home/vsts/work/1/s/node_modules/webdriverio/node_modules/webdriver/build/utils.js:189:12)
at /home/vsts/work/1/s/node_modules/webdriverio/node_modules/webdriver/build/request.js:168:31
at Generator.next (<anonymous>)
at asyncGeneratorStep (/home/vsts/work/1/s/node_modules/webdriverio/node_modules/webdriver/build/request.js:9:103)
at _next (/home/vsts/work/1/s/node_modules/webdriverio/node_modules/webdriver/build/request.js:11:194)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
问题
当我致电remote
时,如何获得有关错误性质的更多信息?我想检测BROWSERSTACK_ALL_PARALLELS_IN_USE
的出现,以便我可以在代码中实现一些解决此问题的策略(例如在随机时间后重试)。
【问题讨论】:
【参考方案1】:错误BROWSERSTACK_ALL_PARALLELS_IN_USE
表示你所有正在运行的线程和排队的线程都已满,无法再触发测试。
一旦你用尽了正在运行的 + 排队的线程,任何发起的新会话都会被BROWSERSTACK_ALL_PARALLELS_IN_USE
丢弃。
在有可用线程之前,您将无法再触发任何测试。
你可以通过设置maxInstances
来查看https://webdriver.io/docs/organizingsuites/。这将允许您限制触发的测试数量。
【讨论】:
是的,我明白你的意思,感谢你的回答,但我担心你错过了这里的重点。我想在代码中获取有关此特定错误的详细信息,以便我可以采取一些措施。如果 WebdriverIO 被用作测试运行程序,那么您的观点也是有效的,这不是我正在做的事情,并且由于一系列原因无法做到:(【参考方案2】:实际上错误是一个正确的Error
对象,并且有message
和stack
可用。显示的日志封装在消息中,所以下面的就可以了:
try
driver = await remote(options);
catch (error)
if (error.message.indexOf("BROWSERSTACK_ALL_PARALLELS_IN_USE") >= 0)
// Retry
// Do something else
【讨论】:
以上是关于使用 WebdriverIO 实例化驱动程序时检测 BROWSERSTACK_ALL_PARALLELS_IN_USE 错误的主要内容,如果未能解决你的问题,请参考以下文章
将maxInstances用于webdriverio时如何处理登录用户
避免在登录表单中使用 WebDriverIO 重新输入用户/电子邮件和密码
如何使用 Appium 和 WebDriverIO 在 Windows 应用程序上滚动?
如何检测 jQuery 灯光滑块是不是已实例化,如果是,如何清除实例