проверить неработающие ссылки на странице, используя Nightwatch - PullRequest
1 голос
/ 05 июля 2019

Как видно из заголовка, моя цель - проверить, есть ли какие-либо битые ссылки на данной странице.Под ссылками я подразумеваю атрибуты «href» тегов «a».В идеале я хотел бы нацелить некоторые определенные теги "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);
});

Моя единственная проблема здесь заключается в том, чтобы поместить все элементы тега в массив (I ').я совсем не знаком с селекторами xpath или синтаксисом nightwach ...).последнее, что я безуспешно попробовал, это:

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

1 Ответ

0 голосов
/ 12 июля 2019

хорошо, я нашел что-то, что работает для меня, может быть, это будет работать для кого-то еще ... вот оно (со случайным селектором 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);
              });
          });
        }
      })

Это, вероятно, не самый чистый способ, но должен делать работу ... По крайней мере, это имеет для меня

...