簡體   English   中英

量角器排序基礎測試。 登錄后運行測試

[英]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.getCurrentUrlbrowser.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM