2

我的測試步驟進行測試,註銷流程是,太多browser.wait在protractorjs調用

1)點擊退出按鈕

2)等待網址變更爲login.html的

3 )等待登錄頁面文本字段被加載。

碼的樣子,

//wait for logout menu/button  
browser.wait(function(){ 
    return element(by.buttonText('Log out')).isPresent() 
}) 
element(by.buttonText('Log out')).click() 
//wait for url to change to login.html 
browser.wait(function(){ 
    return browser.getCurrentUrl().then(function(url){ 
    return url.indexOf("login") != -1 
    }) 
}) 
//wait for login page text boxes 
browser.wait(function(){ 
    return element(by.css('[type=text]')).isPresent() 
}) 

這使我的代碼冗長,因爲,我包裝一browser.wait調用中的每個動作。 有沒有辦法可以避免browser.wait。我試圖加入,

browser.manage().timeouts().implicitlyWait(5000) 

但是,然後,我得到No element found using locator: by.buttonText("Log out")錯誤。

回答

3

量角器內置ExpectedConditions檢查,你不必自己寫一個自定義函數。以下是如何等待元素可見 -

var EC = protractor.ExpectedConditions; 
browser.wait(EC.presenceOf(element(by.buttonText('Log out'))), 10000); //Checks only if element is present in DOM 
browser.wait(EC.visibilityOf(element(by.buttonText('Log out'))), 10000); //Checks if element is present in DOM and visible to user on page 

您還可以創建一個自定義函數,如另一個答案中所示。希望這可以幫助。

2

如果你不止一次地做同樣的事情,它往往會幫助爲它做一個輔助函數。添加到您的幫助文件是這樣的:

this.waiterFunc = function(element){ 
     browser.wait(function() { 
      return element.isPresent(); 
     }) 
    }; 

像那麼在你的主類,你可以做的事情: helper.waiterFunc(元素(by.buttonText(「註銷」))​​);

我不確定如何避免browser.wait作爲在等待元素在特定時間可訪問的過程中的一個整體步驟。如果你不等待,那麼你將開始變得討厭的「元素不可點擊的時間x」錯誤