如何使用Protractor获取当前URL?

38

我正在使用Protractor和Jasmine测试一个网站,我想知道当前的URL以便验证测试。

我已经尝试过:

function waitForUrlToChangeTo(urlRegex) {
    var currentUrl;

    return browser.getCurrentUrl().then(function storeCurrentUrl(url) {
            currentUrl = url;
        }
    ).then(function waitForUrlToChangeTo() {
            return browser.wait(function waitForUrlToChangeTo() {
                return browser.getCurrentUrl().then(function compareCurrentUrl(url) {
                    return urlRegex.test(url);
                });
            });
        }
    );
}

我正在这样使用这个函数

it('should log', function() {
    //element(by.model('user.username')).sendKeys('asd');
    //element(by.model('user.password')).sendKeys('asd');
    element(by.linkText('Acceder')).click();
    waitForUrlToChangeTo("http://localhost:9000/#/solicitudes");
});
3个回答

54
如果你只想检查当前的URL,那么请使用browser.getCurrentUrl()函数:
expect(browser.getCurrentUrl()).toEqual("expectedUrl");

但是,如果你需要等待直到URL匹配特定值,请参阅答案的下一部分。


这是一个工作示例代码,基于期望条件作者提供的示例:

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

用法:

element(by.linkText('Acceder')).click();
browser.wait(urlChanged("http://localhost:9000/#/solicitudes"), 5000); 

43
Alecxe,你的答案非常有帮助。
但是,你不能只编写以下代码吗:
 expect(browser.getCurrentUrl()).toEqual('whateverbrowseryouarexpectingtobein');

如果这个方法不行,那么你就知道你去的地方是错误的。


1
我认为目的是等待URL匹配特定值,而不仅仅是在给定时间点获取该值。 - Shotgun Ninja
如何使用Protractor获取当前URL?这是第一个Google搜索结果。我认为即使它不适用于OP,这个答案更有帮助。 - user3714134

10

Protractor 4.0.0开始,您现在可以使用期望条件来了解您的URL何时更改。

const EC = protractor.ExpectedConditions;
browser.wait(EC.urlContains('my-url'), 5000);

我找到的答案来自这里,我没有真正的功劳。但以防万一它有用。

Protractor-通用等待URL更改


2
这是正确的答案,也是检查URL更可靠的方法。 - Brendan Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接