[英]Protractor sequencing basic test. Run test after login
我試圖弄清楚如何使該基本測試始終如一地通過。
describe('home page', function () {
beforeEach(function () {
browser.driver.get('https://localhost:0000/xxxx/');
});
it('should have a title', function () {
var userName = browser.driver.findElement(by.id('userid_inputtext')).sendKeys('userNameXX');
var passWord = browser.driver.findElement(By.id("password_inputtext")).sendKeys("passWordXX");
var login = browser.driver.findElement(By.id('sign_in_button'));
login.click();
browser.driver.getCurrentUrl();
browser.driver.getTitle().then(function (title) {
expect(title).toEqual('Webpage Title');
});
});
});
登錄頁面不是Angular,但登錄后將加載Angular應用。 現在,我的測試已經通過了一些時間。 問題在於,有時它會選擇登錄頁面的標題,而有時會選擇主頁的標題(我希望它在登錄后始終測試主頁的標題)。
我已經使用諾言和瀏覽器玩了。稍等一下,但還沒有真正確定下來。 任何建議都很好!
我可能想到的幾件事-量角器API中的大多數方法都是異步的,並且會返回諾言。
在登錄頁面中,一旦登錄login.click()
,您的主頁就需要花費一些時間來加載,因此,首先調用以下異步方法,例如browser.getCurrentUrl
和browser.getTitle
。 正如您所指出的,這種情況不一致。
另外,您應該將變量分配給元素定位器,然后對它們執行操作! 您應該使用頁面對象來存儲定位器。 請參考官方量角器樣式指南
browser.getCurrentUrl
還返回一個您也必須解決它的承諾。
要解決此問題,您應該以正確的方式使用browser.wait
:
describe('home page', function () {
beforeEach(function () {
browser.driver.get('https://localhost:0000/xxxx/');
});
it('should have a title', function () {
var userName = browser.driver.findElement(by.id('userid_inputtext'));
userName.clear();
userName.sendKeys('userNameXX');
var passWord = browser.driver.findElement(By.id("password_inputtext"));
passWord.clear();
passWord.sendKeys("passWordXX");
var login = browser.driver.findElement(By.id('sign_in_button'));
browser.driver.wait(login.click(),5000,'homePage should be loaded within 5 secs'); // would throw an error if the page takes more than 5 secs to load
// you could also use `browser.driver.sleep(500)` but not advisable as sleeps slow the tests down!
browser.driver.getCurrentUrl().then(function (url) {
expect(url).toEqual('homePage url');
});
browser.driver.getTitle().then(function (title) {
expect(title).toEqual('Webpage Title');
});
});
});
另外,由於您的登錄頁面是非角度的,因此您可以以正確的方式編寫測試,即使用browser.ignoreSynchronization
並以更簡潔的方式使用量角器api方法。
describe('home page', function () {
beforeEach(function () {
browser.get('https://localhost:0000/xxxx/');
});
it('should have a title', function () {
browser.ignoreSynchronization = true; // set it to true for non-angular pages(loginPage)
var userName = element(by.id('userid_inputtext'));
userName.clear();
userName.sendKeys('userNameXX');
var passWord = element(By.id("password_inputtext"));
passWord.clear();
passWord.sendKeys("passWordXX");
var login = element(By.id('sign_in_button'));
browser.wait(login.click(),5000,'homePage should be loaded within 5 secs');
browser.ignoreSynchronization = false; // set it to false for angular pages(homePage)
browser.getCurrentUrl().then(function (url) {
expect(url).toEqual('homePage url');
});
browser.getTitle().then(function (title) {
expect(title).toEqual('Webpage Title');
});
});
});
請注意,不需要訪問browser.driver
對象,您可以直接使用量角器的方法!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.