我一直在寻找专门使用 BrowserStack 在 Node.js 中为可扩展测试创建合理结构的方法。
请在此处查看源代码:
https://gist.github.com/Palgie/10886008
我在尝试关闭会话或退出驱动程序时遇到问题,因此在运行并发测试时它会经常告诉我我的最大会话正在使用中(见下文)。
这感觉像是一种比赛条件,但它可能是非常明显的。
Now testing Chrome - 22.0
Now testing IE - 10.0
․․․․
Stopping test
Stopping test
․
4 passing (14s)
1 failing
1) "after all" hook:
Error: This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.
at checkHasNotQuit (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/webdriver.js:291:13)
at webdriver.WebDriver.schedule (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/webdriver.js:263:3)
at webdriver.WebDriver.quit (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/webdriver.js:331:21)
at Context.<anonymous> (/Users/gourleyp/Sites/bs-webdriver/driver.js:35:14)
at webdriver.promise.ControlFlow.runInNewFrame_ (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:1598:20)
at webdriver.promise.ControlFlow.runEventLoop_ (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:1463:8)
at wrapper [as _onTimeout] (timers.js:252:14)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
==== async task ====
at Context.<anonymous> (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/testing/index.js:126:14)
at Hook.Runnable.run (/usr/local/lib/node_modules/mocha/lib/runnable.js:196:15)
at next (/usr/local/lib/node_modules/mocha/lib/runner.js:259:10)
at /usr/local/lib/node_modules/mocha/lib/runner.js:271:7
at done (/usr/local/lib/node_modules/mocha/lib/runnable.js:185:5)
at /usr/local/lib/node_modules/mocha/lib/runnable.js:199:9
at /Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/testing/index.js:92:5
at /Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/goog/base.js:1178:15
at webdriver.promise.ControlFlow.runInNewFrame_ (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:1598:20)
at notify (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:428:12)
at notifyAll (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:397:7)
at resolve (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:375:7)
at fulfill (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:493:5)
at /Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:1465:10
at Object.webdriver.promise.asap (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:732:5)
at newFrame.then.e (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:1614:25)
at /Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/goog/base.js:1178:15
at webdriver.promise.ControlFlow.runInNewFrame_ (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:1598:20)
at notify (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:428:12)
at notifyAll (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:397:7)
at resolve (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:375:7)
at fulfill (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:493:5)
at webdriver.promise.ControlFlow.resolveFrame_ (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:1519:9)
at webdriver.promise.ControlFlow.getNextTask_ (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:1488:12)
at webdriver.promise.ControlFlow.runEventLoop_ (/Users/gourleyp/Sites/bs-webdriver/node_modules/browserstack-webdriver/lib/webdriver/promise.js:1446:59)
at wrapper [as _onTimeout] (timers.js:252:14)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
在我引用的源代码中,据我所知它应该执行会话,但感觉不像。
test.after(function() {
console.log('Stopping test');
driver.quit();
});
据我了解,在该浏览器中的所有 mocha 测试或 webdriver 测试运行之后,它将终止驱动程序,然后它将在 before 方法中初始化一个新实例。
任何帮助,将不胜感激!
干杯