2016-08-17 35 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