正如标题所述,我的目标是检查给定页面上是否有任何断开的链接。链接是指“ a”标签的“ href”属性。理想情况下,我想定位一些特定的“ a”标记(例如,页面特定部分中包含的标记,例如nav标记中的标记)。
背景:我正在尝试为网站构建一个“完整”的测试应用程序。我目前正在功能测试部分。 在这种情况下,我想确保特定页面中的所有链接都将您发送到某处(无404)。 我曾经做的只是使用硬编码选择器找到链接,单击链接,然后检查登录页面是否有标题...
.waitForElementVisible("//div[@class='selectorForlink1']")
.waitForElementVisible("//div[@class='selectorForlink2']")
.click("//div[@class='selectorForButtonToClickOn']")
.waitForElementVisible("//ul[@class='selectorForLink3']/li[2]")
.click("//ul[@class='selectorForButtonToClickOnNo2']/li[2]")
显然,这是肮脏的/低效的。我发现了另一个相关主题的帖子,建议您提取页面链接,将它们存储(以数组形式存储)在HTTP流中打开每个链接,并验证响应内容。
为了测试响应,我将使用这段代码(也可以在另一个相关线程上找到):
const request = require('request');
request(myArrayOfLinkObject, (error, response, body) => {
browser.assert.equal(response.statusCode, 200);
});
我唯一的问题是将所有tag元素放入数组中(我对xpath选择器或nightwach语法一点都不熟悉)。我没有成功尝试的最后一件事是:
browser.elements('xpath', "//a[@class='Something']/@href", function (elements)
{
listofelements=elements;
})
答案 0 :(得分:0)
好吧,我发现了一些对我有用的东西,也许对其他人也有用...(有一个随机的CSS选择器):
browser.elements('css selector', "nav a", function (linksOfThePage)
{
numberOfLinks=linksOfThePage.value.length;
for (var x = 0; x < numberOfLinks; x++){
browser.elementIdAttribute(linksOfThePage.value[x].ELEMENT, "href", function(links) {
console.log(links.value);
request(links.value, (error, response, body) => {
browser.assert.equal(response.statusCode, 200);
});
});
}
})
这可能不是最干净的方法,但是应该完成工作……至少对我来说是