你如何等待使用量角器和柴的承诺?
问题描述:
我在等待使用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();
,并只在小黄瓜然后子句中使用的assert
或expect
,但我想等待页面在给定或当加载。
答
我的理解与您的问题是你想异步Given, When, Then's
在CucumberJS
表现为同步执行,所以,一旦你的步骤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');
});
});
当我尝试使用返回函数,如'return browser.get('http://google.com');'它仍然失败,并出现超时错误。之后我也用'.then'试过了''callback',它也超时了。 – user3554664
好的我认为你的页面需要的时间超过5000毫秒的默认时间,这就是为什么你超时error.did你试图增加默认时间吗? –
我试过了一分钟。我看到页面加载,尽管没有任何反应。 – user3554664