【问题标题】:wait for complete page load does not work as expected in Protractor等待完整页面加载在量角器中无法按预期工作
【发布时间】:2017-10-05 05:29:00
【问题描述】:

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

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,然后它也等待仪表板 url 无限。 我想在登录事件后检查当前 url,如果不是仪表板 url,那么它应该失败,并且不运行下一个测试套件用例,因为登录测试失败。

喜欢-

当点击登录按钮时。

  1. 等待页面加载完毕。

2.然后检查当前的url,如果不是dashboard url,那么测试应该失败,并且不会继续任何测试用例。

【问题讨论】:

    标签: protractor


    【解决方案1】:

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

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

        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;
          });
        }
    });
    

    希望这会有所帮助!

    【讨论】:

    • 足够接近,但超时后,如果该元素未显示或不存在,我不想继续进行进一步的测试套件。因为我的登录测试失败。怎么做?现在,当我的登录测试失败时,它还会继续执行我在 conf.js 的规范属性中定义的更多测试套件
    • 如果您想要的话,请在此处查看此答案以在初始失败后使套件失败:stackoverflow.com/a/34462368/5623572
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多