使用 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 对象,并且有messagestack 可用。显示的日志封装在消息中,所以下面的就可以了:

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 灯光滑块是不是已实例化,如果是,如何清除实例

使用“ npm install wdio”安装webdriverIO时出错,

不能在模块、Typescript、WebdriverIO 外使用导入语句