2015-11-30 84 views
10

當前有部分端到端測試,輸入用戶名/密碼並單擊「登錄」。量角器e2e測試登錄重定向

它成功,但在「謝謝你已登錄」頁面結束,而不是重定向到「帳戶門戶」或「儀表板」,就像通過瀏覽器登錄一樣。 \

這個項目的新手,但我們使用OAuth。

主要問題:這聽起來像是需要http嘲弄嗎?

進一步瞭解詳細:

spec.js

describe('login page', function() { 
    browser.driver.get('http://url.path/login'); 
    it('should render login page', function() { 

     // Checking the current url 
     var currentUrl = browser.driver.getCurrentUrl(); 
     expect(currentUrl).toMatch('/login'); 
    }); 
    it('should sign in', function() { 

     // Find page elements 
     var userNameField = browser.driver.findElement(By.id('username')); 
     var userPassField = browser.driver.findElement(By.id('password')); 
     var userLoginBtn = browser.driver.findElement(By.id('loginbtn')); 

     // Fill input fields 
     userNameField.sendKeys('[email protected]'); 
     userPassField.sendKeys('1234'); 

     // Ensure fields contain what we've entered 
     expect(userNameField.getAttribute('value')).toEqual('[email protected]'); 
     expect(userPassField.getAttribute('value')).toEqual('1234'); 

     // Click to sign in - waiting for Angular as it is manually bootstrapped. 
     userLoginBtn.click().then(function() { 
     browser.waitForAngular(); 
     expect(browser.driver.getCurrentUrl()).toMatch('/success'); 
     }, 10000); 
    }); 
}); 

如果我趕緊點擊測試窗口上,我可以看到它成功地達到了「成功」的頁面 - 但它不會重定向到儀表板(通過瀏覽器手動登錄時重定向)。我如何繼續此測試以保持登錄狀態並像用戶那樣訪問儀表板?

//項目新增,角度和量角器。

編輯 - 總結這一點:

  • 我想量角器開始測試/登錄頁面上
  • 量角器應該找到並填寫用戶名和密碼字段,然後單擊登錄
  • 量角器成功登錄,看到一個/謝謝你頁面,然後立即重定向到用戶的/儀表板 pa ge
  • 也許我錯過了一個步驟,我們是否需要在量角器測試中手動重定向?

(當用戶手動通過瀏覽器登錄時,他們看不到/三江源頁 - 。這是一個快速重定向到/儀表板量角器沒有達到儀表板頁面

回答

4

您的文章沒有資料,但我會盡力做一個假設:

我懷疑頁面的JavaScript,使在超時後重定向你「你登錄感謝」

因此,當您點擊「登錄」後,瀏覽器加載「感謝您登錄」頁面,並且由於第二個參數.then()什麼都不做,browser.waitForAngular()失敗,因爲該頁面上沒有角度。

你應該嘗試使用類似browser.driver.wait()有合理的超時檢測URL變化(如下所述:https://github.com/angular/protractor/issues/610),並觸發browser.waitForAngular()瀏覽器之後到達/success頁。

+0

當我從你的鏈接頁面上的解決方案運行的代碼 - 量角器說:「失敗:未定義是不是一個函數」。看起來它在'compareCurrentUrl'函數中失敗。我可以在這裏找到一個我如何使用函數的示例https://jsfiddle.net/s3tbfkwy/ – bruh

1

您是否嘗試過使用明確的等待?

return browser.driver.wait(function() { 
     return browser.driver.getCurrentUrl().then(function(url) { 
      return /success/.test(url); 
     }); 
    }, 10000); 

您的代碼將是這樣的:

// Click to sign in - waiting for Angular as it is manually bootstrapped. 
    userLoginBtn.click(); 
    return browser.driver.wait(function() { 
     return browser.driver.getCurrentUrl().then(function(url) { 
      return /success/.test(url); 
     }); 
    }, 10000); 
+0

這很有幫助,除了返回行應改爲:return url === [DESIRED URL]; – Sam