[Тест E2E]Nightwatch.js

Nightwatch.js – это простое в использовании решение для сквозного тестирования (E2E) на основе Node.js для браузерных приложений и веб-сайтов. Он использует мощный W3C WebDriver API для выполнения команд и утверждений над элементами DOM.

Nightwatch.js может помочь вам выполнить автоматизированное тестирование пользовательского интерфейса, это платформа на основе Node.js и использует Selenium WebDriver API.

Образец кода

module.exports = {
  'Demo test Google' : function (client) {
    client
      .url('http://www.google.com')
      .waitForElementVisible('body', 1000)
      .assert.title('Google')
      .assert.visible('input[type=text]')
      .setValue('input[type=text]', 'rembrandt van rijn')
      .waitForElementVisible('button[name=btnG]', 1000)
      .click('button[name=btnG]')
      .pause(1000)
      .assert.containsText('ol#rso li:first-child',
        'Rembrandt - Wikipedia')
      .end();
  }
};

Используйте функцию обратного вызова
Большинство методов в Nightwatch.js включают функцию обратного вызова. Если вы не знакомы с функцией обратного вызова, см. это =› Обратные вызовы и обещания

click()
Имитирует событие щелчка по заданному элементу DOM.

Иногда click() может не работать, так как браузер ожидает запроса сервера, поэтому вы не получите ожидаемого результата, пока браузер не получит данные.

Чтобы решить эту проблему, мы можем использовать pause(), чтобы запрос был завершен.
*Помните, не используйте часто pause().Вы никогда не знаете, почему тест был остановлен. Потому что есть много проблем, которые могут привести к возникновению этой проблемы. например проблема с сетью, проблема с сервером или проблема с браузером.

execute()
Может внедрить фрагмент кода JavaScript на страницу для выполнения в контексте текущего выбранного фрейма.

Зачем использовать execute()?
Иногда, когда мы используем некоторые методы Nightwatch.js для тестирования содержимого, возможно, результат не соответствует нашим ожиданиям. В зависимости от этого мы можем использовать execute() для решения проблемы.

saveScreenshot()
Сделайте скриншот текущей страницы и сохраните его как файл с заданным именем.
*Используйте этот метод перед закрытием браузера. Потому что иногда тест проходит успешно; однако результат на экране может не совпадать с нашим прогнозом. Таким образом, вы можете использовать saveScreenshot(), чтобы вручную проверить ситуацию.

Образец кода

module.exports = {
  'Show some example': browser => {
  browser
    .url('https://play.niceday.tw/product/3')
    .waitForElementVisible('body', 1000)
    .windowMaximize()
  browser
    .useCss()
    .click('div.htwOHr')
    .useXpath()
    .expect.element('//*[@id="introductionCkEditor"]').to.present
browser
    .execute(function(){
        const domElement = document.querySelector('.kuCDMI')
        const displayContext = getComputedStyle(domElement, ':before').content
        const removeQuote = displayContext.replace("\"", "").replace("\"", "")
      
        return removeQuote
}, function(res) {
          console.log('res',res.value)
          this.assert.equal(res.value,'已售完')
       }
    )
browser
     .saveScreenshot('./screenshots/nightwatchjs.png')
     .end()
  }
}

Nightwatch.js =› http://nightwatchjs.org/

Курс Udemy о Nightwatch.js, начните с установки, чтобы написать несколько простых тестов =› https://www.udemy.com/javascript-automation-testing-selenium-nodejs-nightwatchjs/learn/v4/overview

Если вас интересует Selenium, смотрите здесь =› https://www.seleniumhq.org/

Типичный пример для китайского читателя =›https://ithelp.ithome.com.tw/articles/10190937

Джеймс