如何让 Protractor 的部分等待或同步?

How to make parts of Protractor wait or become synchronous?

我在量角器测试中有这样的代码,它转到主页确定我们需要登录然后调用此函数。请注意,我是 运行 在 NODE.js 环境中:

function Login() {
    browser.findElement(by.id('ID')).then(function (ele) {
        ele.sendKeys('SomeUserName');
        browser.findElement(by.id('password')).then(function (ele) {
            ele.sendKeys('SomePassword');
            browser.findElement(by.partialButtonText('Sign in')).then(function (ele) {
                ele.click();
                browser.getCurrentUrl().then(function (url) {
                    expect(url).toBe("http://NextURLAfterClick");
                    debugger;
                });
            });
        });
    });
}

但是我无法在验证 browser.getCurrentUrl() 之前触发点击,所以我得到的是登录页面的 url,I想在点击登录后得到url.

我怀疑这是我对它的异步性质如何工作的误解。

How to make parts of Protractor wait or become synchronous?

您可以等待 url 在 browser.wait() 的帮助下更改:

var urlChanged = function(url) {
  return function () {
    return browser.getCurrentUrl().then(function(actualUrl) {
      return url === actualUrl;
    });
  };
};

element(by.id('ID')).sendKeys('SomeUserName');
element(by.id('password')).sendKeys('SomePassword');
element(by.partialButtonText('Sign in')).click();

browser.wait(urlChanged("http://NextURLAfterClick")), 5000);

其中 urlChanged,在 selenium 术语中,是 "Custom Expected Condition"。