特に 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 メソッドで新しいインスタンスが初期化されます。
どんな助けでも大歓迎です!
乾杯