等待完整的页面加载在Protractor中无法正常工作

时间:2017-10-04 12:20:22

标签: protractor

我正在编写一个登录非角度应用程序的测试。

describe('login Test for App', function () {

    beforeEach(function () {
        browser.ignoreSynchronization=true;
        browser.get(loginPageURL,2000);
    });


    it('It should Login a User', function () {
        element(by.id('username')).sendKeys(constants.userName);
        element(by.id('password')).sendKeys(constants.password);
        element(by.id('Login')).click().then(function () {
            // Waiting to open modal
            browser.wait(function () {
                return browser.getCurrentUrl().then(function (url) {
                    return url==dashboardUrl;
                });
            });
        });
    });
});

登录后,我想检查currentUrl。但登录按钮单击后,它等待仪表板URL出现。 但是当在loginbutton点击之后,它会转到不同的url,然后它也会等待仪表板的URL无限。 我想在登录事件后检查当前URL,如果它不是仪表板URL,那么它应该失败,并且不运行下一个测试套件的情况,因为登录测试失败。

象 -

当clickOn登录按钮时。

  1. 等待完整页面加载。
  2. 2.然后检查当前网址,如果它不是仪表板网址,那么测试应该失败,并且不会继续进行任何测试用例。

1 个答案:

答案 0 :(得分:1)

最佳做法是等待页面url加载以了解页面是否已加载,因为可能存在重定向或其他内容。

最佳做法是等待下一页上的特定元素(登录后)。这是您的代码重构为使用自定义 wait()函数,该函数将在继续检索当前网址之前等待元素出现:

    describe('login Test for App', function () {
    browser.ignoreSynchronization = true;

    it('should load the log-in page', function(done) {
        browser.driver.get(loginPageURL).then(function() {
            browser.driver.sleep(2000);
            wait('#username', 10000);
            done();
        });
    });

    it('It should Login a User', function (done) {
        element(by.id('username')).sendKeys(constants.userName);
        element(by.id('password')).sendKeys(constants.password);
        element(by.id('Login')).click().then(function () {
            // Waiting to open modal
            wait('#element_on_the_next_page', 10000);

            browser.getCurrentUrl().then(function (url) {
              // do anything with the url
              done();
            });
        });
    });

    function wait(selector, timeout) {
      browser.driver.wait(function() {
        return browser.driver.isElementPresent(by.css(selector)).then(function(present) {
          return present;
        });
      }, timeout);
      browser.driver.wait(function() {
        return browser.driver.findElement(by.css(selector)).isDisplayed().then(function(displayed) {
          return displayed;
        });
      }, timeout).then(function() {
        return;
      });
    }
});

希望这有帮助!