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

check broken links on a page using nightwatch

正如标题所说,我的目标是检查给定页面上是否有损坏的 link。 link 是指 "a" 标签的 "href" 属性。理想情况下,我想定位一些特定的 "a" 标签(例如页面特定部分中包含的标签,例如导航标签中的标签...)。

背景:我正在尝试为网站构建一个 "complete" 测试应用程序。我目前正在研究功能测试部分。 在这种情况下,我想确保特定页面中的所有 link 都将您发送到某个地方(无 404)。 我以前所做的只是使用硬编码选择器找到 link,单击它,检查着陆页是否有标题...

.waitForElementVisible("//div[@class='selectorForlink1']")
.waitForElementVisible("//div[@class='selectorForlink2']")
.click("//div[@class='selectorForButtonToClickOn']")
.waitForElementVisible("//ul[@class='selectorForLink3']/li[2]")
.click("//ul[@class='selectorForButtonToClickOnNo2']/li[2]")

很明显,这是dirty/inefficient。我在另一个相关主题上找到了一个 post,它建议提取页面的 links,将它们存储(我猜是在数组中)在 HTTP 流中打开每个,验证响应内容.

为了测试响应,我会使用那段代码(也在另一个相关线程中找到):

const request = require('request');
request(myArrayOfLinkObject, (error, response, body) => {
    browser.assert.equal(response.statusCode, 200);
});

这里我唯一的问题是将所有 a 标签元素放入一个数组中(我对 xpath 选择器或 nightwach 语法完全不熟悉...)。我尝试失败的最后一件事是:

browser.elements('xpath', "//a[@class='Something']/@href", function (elements) 
{
    listofelements=elements;
})

好吧,我找到了对我有用的东西,也许它对其他人也有用......就在这里(随机 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);
              });
          });
        }
      })

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