使用量角器测试页面上所有链接的有效性

Test all links for validity on a page using Protractor

我想在 Protractor 中实现的是获取页面上的所有 link 并一个一个地转到它们以检查是否有路由到 404 页面的 link .

以下代码来自我的电子邮件页面对象,请注意我在 href 上调用 replace 因为我将测试的页面上的 link 是以下格式: https://app.perflectie.nl/something 我想在 https://staging.perflectie.nl 和我的本地主机上进行端到端测试。

// Used to check for 'broken' links - links that lead to a 404 page
Email.prototype.verifyLinkQuality = function() {
    browser.driver.findElements(by.css('a')).then(function (elements) {

        elements.forEach(function(el) {
            // Change the url to the base url this tests now runs on, e.g. localhost or staging
            el.getAttribute('href').then(function(href) {
                var url = href.replace(/https\:\/\/app\.perflectie\.nl\//g, localhost);

                browser.get(url);

                browser.driver.getCurrentUrl().then(function(url) {
                    expect(url).not.toContain('/Error/');
                    browser.navigate().back();
                });
            });
        });
    });
}

如果我 运行 这样做,我会收到以下错误消息:

Failed: Element not found in the cache - perhaps the page has changed since it was looked up
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
System info: host: 'DESKTOP-QLFLPK5', ip: '169.254.82.243', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_73'
Driver info: driver.version: unknown

我不知道为什么会失败,非常感谢您的帮助。

与其来来回回,这通常 导致过时的元素引用错误 DOM change/reload 的原因,我会收集所有链接使用 map() 进入一个数组,然后一个一个地处理它们。这也会对测试性能产生 积极影响:

$$('a').map(function(link) {
    return link.getAttribute("href").then(function (href) {
        return href.replace(/https\:\/\/app\.perflectie\.nl\//g, localhost);
    });
}).then(function(links) {
    links.forEach(function(link) {
        browser.get(link);
        expect(browser.getCurrentUrl()).not.toContain('/Error/');
    });
});

请注意,也没有必要明确解决 .getCurrentUrl(),因为 expect() 会在做出预期之前为我们隐式解决。