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

Javascript 如何在量角器测试中使用browser.getCurrentUrl()?,javascript,angularjs,selenium,selenium-webdriver,protractor,Javascript,Angularjs,Selenium,Selenium Webdriver,Protractor,我今天一直在努力解决这些量角器代码行: element(by.linkText("People")).click(); browser.waitForAngular(); var url = browser.getCurrentUrl(); ... 当放置在waitForAngular()语句之后时,getCurrentUrl似乎总是失败 错误输出太模糊: 未知错误:javascript错误:等待结果时卸载文档 那么,单击超链接并检查新url的正确方法是什么 以下是我的测试:

我今天一直在努力解决这些量角器代码行:

element(by.linkText("People")).click();
browser.waitForAngular();        
var url = browser.getCurrentUrl();
...
当放置在
waitForAngular()
语句之后时,
getCurrentUrl
似乎总是失败

错误输出太模糊:

未知错误:javascript错误:等待结果时卸载文档

那么,单击超链接并检查新url的正确方法是什么


以下是我的测试:

如果在单击链接之前I
getCurrentUrl()

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

如果在单击链接后I
getCurrentUrl()

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

在量角器中抛出一个错误,上面的输出为
UnknownError
。出了什么问题?

请等待URL更改,而不是
waitForAngular()
call:


最初由@juliemr at.建议。

这段代码工作正常

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

我在测试中没有看到任何地方实际引用了url变量。我使用类似于
expect(browser.getCurrentUrl()).toContain(“联系我们”)JK,我看到它被注释掉了。不,我还没有引用url。只需调用
browser.getCurrentUrl
即可中断测试!您是否尝试过使用
browser.sleep(2000)
延迟,然后在单击链接后尝试
expect
块?为什么我们必须通过
sleep
延迟?
browser.waitForAngular()
会延迟吗?默认情况下应该延迟,但我在量角器方面遇到了很多问题,有时手动触发事件效果更好\Jim Evans在几篇与Selenium相关的文章(如)中指出,“您可能不认为getWindowHandles()返回的句柄有顺序。这是一个常见的错误,但句柄显式地没有顺序。”我实际上使用了这样发布的代码,并且浪费了很多时间来弄清楚这一点。
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);
        });
    })
});