我是使用Protractor的新手,并且大约在一个月前开始使用它。我使用的是Protractor 2.5.1和黄瓜不是茉莉花;我最近在测试中遇到了会话ID问题。
有时我的测试通过,有时他们会因为这个错误而失败:(This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.)
我在网上找到的唯一建议是this happens when you do not use callback()
,但这似乎并不正确,因为我在我的黄瓜测试中使用了回调并且没有阻止它。
Another solution suggested was to set a max width to the window size, that didn't cut it either
。
这是我试过的:
我使用像这样的回调
> this.When(/^I "([^"]*)" and do something with this"([^"]*)"$/, > function (action, result, callback) { > return app.takeAction(action).then(function (res) { > return res === result; //passed in up there > }).then(callback) //notice callback here as suggested //to avoid this invalid session id issue > .then(null, function () { //handle error here > console.log('An error occured'); > }); });
注意上面代码中的处理pipiline,如果回调因任何原因抛出错误,它将被最后一个错误处理程序捕获。
因为您必须登录我们的应用程序,所以我务必在每个功能文件之前将您注销,即测试。这应该会破坏之前的cookie / session,但所有这些尝试都无法解决这个问题。
哦,我的所有测试都成功运行,但最后,测试失败了 无效的会话ID错误。 错误:此驱动程序实例没有有效的会话ID(您是否调用了WebDriver.quit()?)并且可能不再使用。 在checkHasNotQuit(C:\
有没有人遇到这个问题,你有什么解决方法?任何帮助将不胜感激。
BTW这是我的配置文件:
> exports.config = { framework: 'cucumber', capabilities: {
> 'browserName': 'chrome',
> loggingPrefs: {
> driver: 'DEBUG',
> server: 'INFO',
> browser: 'ALL'
> } },
>
> resultJsonOutputFile: conf.paths.e2e + '/out/test-report.json',
> specs: [
> conf.paths.e2e + '/**/*.feature' ],
>
> selenium server baseUrl: 'http://localhost:3000/application/',
>
> onPrepare: function() {
> console.log('Getting:'+exports.config.baseUrl);
> browser.get(exports.config.baseUrl);
> browser.driver.manage().window().maximize();
> browser.manage().timeouts().setScriptTimeout(15000);
>
> var tmpDir = path.resolve(__dirname, './e2e/screenshots');
> console.log('Clearing tmp dir: ' + tmpDir);
> rimraf(tmpDir, function(error) {
> if (error) {
> console.error('Error clearing tmp dir: ', error)
> }
> }); },
>
> cucumberOpts: {
> require: conf.paths.e2e + '/steps/**/*Steps.js',
> tags: [ '~@wip', '~@manual' ],
> format: 'pretty' } };