首先,我已經檢查過關於該點的各種帖子和博客,但我仍然無法弄清楚如何正確設置它。量角器 - 在做下一步之前等待異步承諾
我已經嘗試了許多不同的combinaison:
- 瀏覽器等
- protractor.controlFlow()執行
- protractor.controlFlow()等待(
...。仍然沒有成功..
我的問題
在我的beforeEach函數中,我想調用量角器承諾並等待它在執行其餘代碼之前解決。
我的代碼
我準備的人願意這個簡單的測試,以幫助我
describe('testAsync', function() {
beforeEach(function() {
console.log('beforeEach - step 1 ')
browser.get("https://angularjs.org/");
console.log('beforeEach - step 2 ')
testFunc()
console.log('beforeEach - after testFunc - step 3')
});
var testFunc = function(){
console.log("testFunc - step 1")
browser.wait(function() {
var deferred = protractor.promise.defer();
element(by.id('twitter-widget-1')).isPresent()
.then(function (isPresent) {
console.log("testFunc - step 2")
deferred.fulfill(isPresent);
});
return deferred.promise;
});
console.log("testFunc - step 3")
}
it('test after BeforeEach', function() {
console.log("Last trace")
});
});
電流輸出
[launcher] Running 1 instances of WebDriver
beforeEach - step 1
beforeEach - step 2
testFunc - step 1
testFunc - step 3
beforeEach - after testFunc - step 3
testFunc - step 2
Last trace
期望輸出
當你調用該函數個[launcher] Running 1 instances of WebDriver
beforeEach - step 1
beforeEach - step 2
testFunc - step 1
testFunc - step 2 // <------ This is within the promise resolve
testFunc - step 3
beforeEach - after testFunc - step 3
Last trace
「測試Func鍵 - 步2」之前在'it'「最後一絲」,這是你的問題說什麼要發生的事情發生(beforeEach發生在它之前)。如果您想在beforeEach依賴項中進行步驟*,您需要明確地(通過'then'或單獨的控制流注冊)表示,這就是JavaScript/WebDriver/Protractor的工作方式。 –
我試圖定義一個沒有成功的控制流程...你能告訴我一個解決方案嗎? – aorfevre
對於任何人來到這裏,'browser.wait'返回一個承諾。沒有必要在內部建立一個承諾並將其退回。 – nilesh