使用量角器测试页面上所有链接的有效性
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()
会在做出预期之前为我们隐式解决。
我想在 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()
会在做出预期之前为我们隐式解决。