1 Вопрос: Утвердить строку содержит определенное значение (и провалить тест, если это не так)

вопрос создан в Wed, May 8, 2019 12:00 AM

В рамках моего nightwatch.js тестирования у меня есть следующий код, в котором будут перечислены все значения элемента (в данном случае это список городов Великобритании);

"Page 2 Location SEO Crawl paths are displayed": function (browser) {
  browser.elements('xpath', '//a[contains(@href,"location")]', function (results) {
    results.value.map(function(element) {
      browser.elementIdAttribute(element.ELEMENT, 'innerText', function(res) {
        var resme = res.value;
          console.log(resme)
      });
    });
  });
},

Это правильно перечисляет все значения элемента как таковые;

 введите описание изображения здесь

Теперь я хотел бы проверить, указан ли Ноттингем в результате, и Сбой , если это не так.

Я установил пакет assert npm, чтобы посмотреть, поможет ли это, и изменил мой код на;

"Page 2 Location SEO Crawl paths are displayed": function (browser) {
  browser.elements('xpath', '//a[contains(@href,"location")]', function (results) {
    results.value.map(function(element) {
      browser.elementIdAttribute(element.ELEMENT, 'innerText', function(res) {
        var resme = res.value;
        console.log(resme);
          if (resme.includes("Nottingham")) {
            assert.ok(true);
          }
          else {
            assert.ok(false);
        }
      });
    });
  });
},

но это не сработало, так как я продолжал получать следующую ошибку;

 введите описание изображения здесь

Использование пакета assert - лучший способ проверить это, или есть более простой способ утверждать, что Nottingham включен в этот список, а тесты терпит неудачу , если это не так.

Я пытался использовать resme.includes("Nottingham"), но это не провал теста.

Любая помощь будет принята с благодарностью.

Спасибо.

    
0
1 ответ                              1                         

Похоже, что самая внутренняя функция (та, которая имеет res в качестве параметра) вызывается для каждого элемента, а resme - это элемент, который вы сейчас перебираете, а не массив, поэтому функция include не работает должным образом.

Я не знаком с этой библиотекой, но думаю, вам нужно сделать что-то вроде этого:

"Page 2 Location SEO Crawl paths are displayed": function (browser) {
  var found = false;
  browser.elements('xpath', '//a[contains(@href,"location")]', function (results) {
    results.value.map(function(element) {
      browser.elementIdAttribute(element.ELEMENT, 'innerText', function(res) {
        var resme = res.value;
        console.log(resme);
        if (resme === "Nottingham") {
          found = true;
          // Maybe return something like null or 0 to stop iterating (would depend on your library).
        }
      });
    });
  });
  assert.ok(found)
},

Вы инициируете переменную "found" со значением false, а когда вы перебираете каждое значение, вы устанавливаете его в true, если вы его нашли. При желании вы должны прервать итерацию в этой точке. Когда весь процесс будет завершен, подтвердите, что вы нашли нужное значение.

    
0
2019-05-08 15: 57: 47Z
источник размещен Вот