如何在量角器测试中使用 browser.getCurrentUrl()?

How to use browser.getCurrentUrl() in a protractor test?

我今天一直在为这几行 Protractor 代码苦苦挣扎:

element(by.linkText("People")).click();
browser.waitForAngular();        
var url = browser.getCurrentUrl();
...

似乎 getCurrentUrl 放在 waitForAngular() 语句之后总是失败。

错误输出太模糊:

UnknownError: javascript error: document unloaded while waiting for result

那么,单击 hyperlink 并检查新 url 的正确方法是什么?


这是我的测试:

如果我 getCurrentUrl() 在点击 link 之前,

it('can visit people page', function () {
    var url = browser.getCurrentUrl();
    element(by.linkText("People")).click();
    expect(true).toBe(true);
});

测试会通过。

如果我getCurrentUrl()点击link后,

it('can visit people page', function () {
    var url = browser.getCurrentUrl();
    element(by.linkText("People")).click();
    expect(true).toBe(true);
    url = browser.getCurrentUrl();
});

上面的 UnknownError 输出在 Protractor 中抛出错误。出了什么问题?

而不是 waitForAngular() 调用,等待 URL 更改:

browser.wait(function() {
  return browser.getCurrentUrl().then(function(url) {
    return /index/.test(url);
  });
}, 10000, "URL hasn't changed"); 

@juliemr 最初在 UnknownError: javascript error: document unloaded while waiting for result 上建议。

这段代码可以正常工作

var handlePromise = browser.driver.getAllWindowHandles();
handlePromise.then(function (handles) {
    // parentHandle = handles[0];
    var popUpHandle = handles[1];

    // Change to new handle
    browser.driver.switchTo().window(popUpHandle).then(function() {
        return browser.getCurrentUrl().then(function(url) {
            console.log("URL= "+ url);
        });
    })
});