2016-08-17 37 views
0

我在等待使用Cucumber,Chai和Protractor的承诺解决方案。有没有一种方法可以在发送回调之前使用Chai等待一些事情(如页面载入)?你如何等待使用量角器和柴的承诺?

我想是这样的:

browser.get(url).then(callback) 

我本以为这是柴:

browser.get(url).should.be.fulfilled.and.notify(callback); 

虽然当我这样做,我只是得到一个超时,但我看到的页面已加载。 我已经拥有它设置有:

var chai = require('chai'); 
var chaiAsPromised = require('chai-as-promised'); 
chai.use(chaiAsPromised); 
var expect = chai.expect; 
var should = chai.should; 

我不想检查什么,我只是想确保在页面加载。从我所看到的大多数人只是做:

browser.get(url); 
callback(); 

,并只在小黄瓜然后子句中使用的assertexpect,但我想等待页面在给定或当加载。

回答

1

我的理解与您的问题是你想异步Given, When, Then'sCucumberJS表现为同步执行,所以,一旦你的步骤browser.get(url)完成,然后执行下一步定义。如果这是你的问题是什么,然后我们能做到但─

你需要或者return一个承诺或在你的脚步定义使用done回调。否则,黄瓜不知道异步操作何时完成。

我宁愿return承诺,当我上。然后功能的结果执行某些操作并使用.done回调函数时,我不是,而且你不需要callbacks现在CucumberJS支持promises。所以你的步骤文件应该看起来像 -

var chai = require('chai'); 
var chaiAsPromised = require('chai-as-promised'); 
chai.use(chaiAsPromised); 
var expect = chai.expect; 

module.exports = function() { 


this.Given(/^I launch the protractor demo page$/, function() { 
    return browser.get('http://juliemr.github.io/protractor-demo/'); 
    }); 
}); 

this.When(/^I check the title of the page$/, function() { 
    return browser.getTitle().then(function(text){ 
     console.log('title is - ' + text); 
     expect(text).to.equal('Super Calculator'); 
    }); 

}); 
+0

当我尝试使用返回函数,如'return browser.get('http://google.com');'它仍然失败,并出现超时错误。之后我也用'.then'试过了''callback',它也超时了。 – user3554664

+0

好的我认为你的页面需要的时间超过5000毫秒的默认时间,这就是为什么你超时error.did你试图增加默认时间吗? –

+0

我试过了一分钟。我看到页面加载,尽管没有任何反应。 – user3554664