使用Nightwatch检查页面上的损坏链接

时间:2019-07-05 00:11:14

标签: xpath css-selectors nightwatch.js

正如标题所述,我的目标是检查给定页面上是否有任何断开的链接。链接是指“ 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;
})

1 个答案:

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

这可能不是最干净的方法,但是应该完成工作……至少对我来说是