2016-12-12 86 views
2

使用最新的量角器版本在全角度2應用程序中運行測試。我有一個功能,導航到登錄頁面,執行登錄過程,然後調用browser.wait,直到出現登錄後出現的元素。然後我的實際測試失敗:'失敗:超時等待異步Angular任務在11秒後完成'。 但是,如果我不等待登錄過程完成,測試通過。所以顯然我缺少一些browser.wait函數。 browser.sleep(x)導致相同的行爲。爲什麼browser.wait會導致量角器無限期地等待異步任務

我的代碼lookes是這樣的:

beforeAll(async() => { 
    helpers.login().then(() => { 
    console.log('logged in'); 
    }); 
}); 

編輯1: 我改變了等待

this.login =() => { 
    browser.get(${this.baseUrl}/login); 
    let emailField = element(by.id('emailID-input')); 
    let passwordField = element(by.id('passwordID-input')); 
    let submitBtn = element(by.id('loginSubmitId')); 
    emailField.sendKeys(credentials.email); 
    passwordField.sendKeys(credentials.pass); 
    submitBtn.click(); 
//browser.driver.sleep(3000); 
    return browser.wait(() => { 
    return element(by.xpath('//*[@id="header"]')).isPresent() 
     .then((isPresent) => { 
     console.log('Header is Present;', isPresent); 
     return isPresent; 
     }); 
    }); 
}; 

在實際的測試規格我想登錄運行我的測試之前,條件還包括超時,但問題仍然存在。

let until = protractor.ExpectedConditions; 
let header = element(by.xpath('//*[@id="header"]')); 
return browser.wait(until.presenceOf(header), 5000); 

回答

2

您需要在browser.wait()方法中提及等待時間。一旦達到最大等待時間,量角器將根據您的等待條件拋出超時異常。並嘗試使用ExpectedConditions而不是直接isPresent()方法。

var EC = protractor.ExpectedConditions; 
var ele = element(by.xpath('//*[@id="header"]')); 
return browser.wait(EC.presenceOf(ele),5000); //It will wait for 5 secs 
+0

謝謝你的回答。我之前也看到了ExpectedConditions。我只是不確定要使用哪一個,並且在一箇舊帖子[link](https://github.com/angular/protractor/issues/1994)中,我使用了isPresent()來看@juliemr。 但是超時並沒有解決我的問題,因爲等待條件實際上已經滿了!我已登錄並正確重定向,但量角器似乎仍在等待某個異步任務,因此無法繼續。 – tjeisenschenk

0

在量角器有默認getPageTimeout:timeout_in_millis被設置爲10秒。您的頁面加載時間超過10秒,因此它會顯示超時錯誤消息。

你可以在你的conf.js文件中指定它。

+0

是和否,似乎有一些任務掛起,這是造成超時,但它與等待或睡眠有關。我已經嘗試增加超時,這沒有幫助... – tjeisenschenk