Подтвердить что ты не робот

В чем разница между NightwatchJS и WebdriverIO?

Как следует из названия, в чем разница между Nightwatch.js и Webdriver.io?

Кажется, что они имеют один и тот же синтаксис и делают почти одно и то же. Насколько они разные?

Мне нужно выбирать между ними.

4b9b3361

Ответ 1

Я написал набор тестов с использованием каждого из этих инструментов несколько раз.

Webdriver.io позволяет вам писать тестовые примеры "с нуля" и иметь большой контроль над отчетами, скажем, за счет интеграции со slack с использованием slack npm и других пакетов. Вам нужно знать или быстро изучать node.js. Помимо хорошей работы с настольными браузерами, он хорошо интегрируется с Appium, Android Studio и Xcode, поэтому вы можете запускать свои автоматизированные тесты на эмуляторах Android и симуляторах iOS локально. Вам нужно будет установить эти вещи и написать некоторый код, чтобы сообщить Appium, какие драйверы использовать, а также выбрать возможности и т.д.

Nightwatch - это довольно обширное решение, которое использует итератор для автоматической повторной проверки тестов до трех раз, если они не пройдены. Nightwatch имеет приличную поддержку интеграции с инструментами VM, такими как SauceLabs, так что вы можете теоретически запускать тестовые сценарии для 700+ различных комбинаций платформы/браузера/версии без написания кода для управления каждым драйвером. Nightwatch управляет запуском и отключением селена для вас. Хотя это последнее звучит очень впечатляюще, на самом деле достаточно много работы, чтобы достичь и поддерживать этот уровень тестового покрытия. Nightwatch также имеет довольно встроенное разделение задач, что позволяет вам определять пользовательские команды и требовать их в базовом тесте или в отдельных тестах. Вы можете модулировать некоторые части тестов и импортировать их, чтобы вам не приходилось постоянно переписывать, скажем, тест входа в систему для использования во многих случаях. Кроме того, вы можете использовать пользовательские команды для импорта селекторов в виде пар ключ-значение.

Используя каждый из них, я бы подвел итог следующим образом:

webdriver.io: если вам нужен больший контроль, очень индивидуальное решение, и вам не нужен итератор, и вы уверены, что знаете достаточно для написания кода для выбора драйвера браузера, настройки возможностей и необходимости настраиваемого управления вашей отчетности.

Nightwatch: если вы хотите быстро начать писать тесты, знайте, что их будет относительно легко запускать на определенных платформах/браузерах/версиях, и при этом вы сможете значительно расширить свои тесты путем написания пользовательских команд.

Еще один вариант прямо сейчас - это Dalek.js, который имеет простое создание сценария Nightwatch, но без всех наворотов.

Перед запуском nightwatch вы можете настроить браузеры в файле Magellan.json, а затем при запуске теста вы вызываете браузеры или набор браузеров ("профиль") в качестве аргументов командной строки, таким образом:

Для локальных браузеров:

./node_modules/.bin/magellan --serial --browsers=chrome,firefox

Предполагая, что вы настроили учетную запись saucelabs и добавили свое имя пользователя и ключ доступа, вы можете вызвать профиль браузера следующим образом:

./node_modules/.bin/magellan --serial --profile=myBrowsers

Это предполагает, что вы настроили профиль myBrowsers в файле Magellan.json следующим образом:

{
    "profiles": {
        "myBrowsers": [
          { "browser": "chrome_46_OS_X_10_10_Desktop" },
          { "browser": "firefox_42_Windows_2012_R2_Desktop" },
          { "browser": "safari_8_OS_X_10_10_Desktop" },
          { "browser": "safari_7_OS_X_10_9_Desktop" }, 
          { "browser": "safari_9_OS_X_10_11_Desktop" }, 
          { "browser": "IE_10_Windows_2012_Desktop" }, 
          { "browser": "IE_11_Windows_2012_R2_Desktop" },
          { "browser": "chrome_45_OS_X_10_8_Desktop" },
          { "browser": "chrome_45_OS_X_10_9_Desktop" },
          { "browser": "chrome_45_OS_X_10_10_Desktop" },
          { "browser": "chrome_45_OS_X_10_11_Desktop" },
          { "browser": "chrome_46_OS_X_10_10_Desktop" }, 
          { "browser": "chrome_45_Windows_10_Desktop" },
          { "browser": "chrome_45_Windows_2003_Desktop" },
          { "browser": "chrome_45_Windows_2008_Desktop" },
          { "browser": "chrome_45_Windows_2012_Desktop" },
          { "browser": "chrome_45_Windows_2012_R2_Desktop" },
          { "browser": "chrome_46_Windows_10_Desktop" },
          { "browser": "chrome_46_Windows_2003_Desktop" },
          { "browser": "chrome_46_Windows_2008_Desktop" },
          { "browser": "chrome_46_Windows_2012_Desktop" },
          { "browser": "chrome_46_Windows_2012_R2_Desktop" }, 
          { "browser": "firefox_42_OS_X_10_9_Desktop" }, 
          { "browser": "firefox_42_Windows_2012_R2_Desktop" },
          { "browser": "android_4_4_Linux_Samsung_Galaxy_S4_Emulator", "orientation": "portrait" },
          { "browser": "ipad_8_4_iOS_iPad_Simulator", "orientation": "landscape"},
          { "browser": "ipad_8_4_iOS_iPad_Simulator", "orientation": "landscape"},
          { "browser": "ipad_9_0_iOS_iPad_Simulator", "orientation": "landscape"},
          { "browser": "ipad_9_0_iOS_iPad_Simulator", "orientation": "portrait"},
          { "browser": "ipad_9_1_iOS_iPad_Simulator", "orientation": "landscape"},
          { "browser": "ipad_9_1_iOS_iPad_Simulator", "orientation": "portrait"},
          { "browser": "iphone_9_1_iOS_iPhone_Simulator", "orientation": "portrait"},
          { "browser": "iphone_9_1_iOS_iPhone_Simulator", "orientation": "landscape"}

        ]
}

}

НЕКОТОРЫЕ БОЛЕЕ ПОЛЕЗНЫЕ (НЕОБЯЗАТЕЛЬНЫЕ) ARGS COMMAND LINE:

переключение аргумента --serial приводит к сериализации выполнения теста и более подробному тестированию, где вы можете просмотреть ошибки, которые были возвращены во время выполнения. Кроме того, для выполнения тестов требуется гораздо больше времени.

добавив аргумент --sauce, как только ваши тестовые сценарии будут работать для браузеров, существующих на вашем локальном компьютере, вы можете подключиться к (в настоящее время) 760 браузерам, поддерживаемым Sauce Labs. Вставь это в терминал и нажми return:

./node_modules/.bin/magellan --serial --list_browsers

Для каждого устройства/браузера, который вы хотите протестировать, просто добавьте листинг в столбце Параметры командной строки для копирования и вставки в виде значений, разделенных запятыми после --browser = при выполнении скрипта. ПРИМЕЧАНИЕ: при работе без --sauce вы можете просто использовать --browser = хром или --browser = хром, firefox

BREAKING IT DOWN:

Использование Nightwatch без --sauce, но с --serial - отличный способ начать. Работайте над своим сценарием до тех пор, пока вы не проверили то, что вы хотите проверить, и когда вы будете уверены, что все тесты, которые должны пройти, выполните его, запустите его с соусными лабораториями и основными браузерами, которые вы хотите протестировать. Если вы уверены, что основные браузеры покрыты, вы можете запустить его без --serial, чтобы сократить время выполнения (полезно в Sauce Labs, что будет стоить денег).

Но достаточно прозелитизма, вы можете узнать, что вам нужно о Saucelabs здесь: https://wiki.saucelabs.com/display/DOCS/The+Sauce+Labs+Cookbook+Home

И для типичного примера Nightwatch, чтобы сделать канонический привет мир: попробуйте этот шаблонный пример

ОБНОВЛЕНИЯ: несколько моментов, которые люди поднимают и которые произошли со мной после публикации этого.

Webdriver.io: поскольку итератора нет, возможности восстановления после сбоев во время выполнения теста меньше, это означает, что сбои более определенны. Поскольку это чисто асинхронно, у вас могут быть головные боли, отслеживающие точное происхождение сбоя. Вам также может понадобиться создать отдельные сценарии разборки для любых данных, которые вы создаете, чтобы избежать конфликтов данных во время выполнения.

Nightwatch.js: так как итератор позволяет вам повторять попытки, вы часто сможете найти, где происходит сбой вашего скрипта. Это может позволить вам быстрее найти дефект, вместо того чтобы сосредоточиться на том, почему ваш скрипт не работает. Также легче отключить ваши индивидуальные сценарии.

ОБНОВЛЕНИЕ 2:

С Nightwatch короткие тесты полезны/приветствуются. Поскольку итератор считывает тестовые файлы в память каждую итерацию непосредственно перед выполнением, вы можете буквально редактировать тесты между выполнением итерации. Позвольте мне сказать, что по-другому: Ваш набор Nightwatch:

test_1 starts
test_1 FAIL    // because you made a trivial error in your test case
test-2 starts  // while it is running, you make the change, save it
test-2 PASS
test_1 starts  // the iteration starts * with your change! *
test_1 PASS
============= Suite Complete =============

     Status: PASSED
    Runtime: 2m 48.3s
Total tests: 2
 Successful: 2 / 2
1 test(s) have retried: 1 time(s)

С другой стороны, настроить Slack webhooks с помощью node/webdriver.io легко. Это означает, что вы можете настроить свои тесты node/webdriver.io так, чтобы они сообщали Slack после их завершения. Клиенты ценят это, потому что после завершения сборки они скоро увидят результаты автоматизации, такие как:

✅ Автоматическое тестирование [имя клиента/продукта здесь] Sprint ##. #. # Передано [URL-адрес или IP-адрес сервера] с OS X Firefox 59.0.2

Failed Автоматическое тестирование [имя клиента/продукта здесь] Sprint ##. #. # Не удалось на [URL-адрес или IP-адрес сервера] с OS X Firefox 59.0.2

ОБНОВЛЕНИЕ 3 (6 августа 2017 г.)

Потратив еще полтора года на работу с обоими на ежедневной основе, я хочу добавить следующие моменты.

Существует такое же количество пакетов NPM, которые интегрируются с каждым из них, но вы заметите, что есть гораздо больше вопросов о Stackoverflow о Nightwatch (4x). Я полагаю, что это потому, что Webdriver.io - это более гибкий подход к автоматическому тестированию [это мое мнение, и я приветствую обратную связь/откат назад]. У тех, кто использует это, не будет вопросов о том, как использовать это, у них будут определенные вопросы о методах.

Nightwatch станет лучшей отправной точкой для тех, кто обладает обширной IDE Selenium и большим опытом работы с javascript. Он имеет много полезных решений из коробки. Тот небольшой опыт, который у меня есть с Далеком, позволяет предположить, что это был бы хороший вариант.

Кто-то с большим количеством JavaScript и, возможно, некоторого опыта объектно-ориентированного программирования и Unix, скорее всего, найдет Webdriver.io лучше. Это просто отличный вариант, чтобы создать свой собственный фреймворк, как я сейчас и делаю. Если вы можете представить, как бы вы хотели, чтобы ваши инициализация, управление потоком и отчетность работали, и готовы ли вы внести вклад в дело пота, это удачно.

Ниже меня спросили, какой я предпочитаю, и я предпочитаю Webdriver.io для обширных тестов e2e. Хотя я часто использую персонализированное репозиторий Nightwatch для большинства клиентских работ, построенных на нашей платформе, это может измениться в ближайшем будущем, когда я создам свое собственное решение Webdriver.io.

ОБНОВЛЕНИЕ 4 (2 мая 2018 г.)

Обновлено для ясности об управлении драйверами Selenium и браузера, а также добавлены некоторые подробности об использовании Appium и Xcode/Android Studio.

Ответ 2

Этот вопрос стал настоящим форком для многих реализаций POC и/или MVP веб-автоматизации. Я не хочу, чтобы это диктовало неправильное направление!

Таким образом, я считаю, что нужен более тщательный ответ с более широким охватом (простота установки, зависимости, важные плагины, сервисы, репортеры, документация, поддержка и другие интеграции) и, надеюсь, более субъективная доставка, чем принятый ответ.


❒ TL; DR: (для ленивых!)

➮ если вы новичок, начинающий с веб-автоматизации, или вы хотите создать тестовое покрытие для небольшого/среднего веб-приложения, то выберите любой из двух! (может также сделать бросок монеты!) Различия между ними очень малы на более низком уровне. Трещины становятся пробелами только тогда, когда вы сталкиваетесь с более сложными задачами в будущем.

➮ если вы хотите создать полноценный, тяжеловесный жгут автоматизации, чтобы обеспечить качество для большого корпоративного веб-приложения или огромного веб-портала, то прочитайте весь пост (или воспользуйтесь моим советом и отправляйтесь в WDIO!)


❒ Полномочия: (что рекомендует мне высказаться по этому поводу?)

С начала 2013 года я интенсивно работаю с основанными на NodeJS тестовыми средами, занимая различные должности инженера по автоматизации контроля качества от начального уровня до старшего и до руководителя отдела контроля качества. Я обобщу свой опыт работы с этими фреймворками и веб-автоматизацией:

  • WebdriverIO (+4 лет)
  • Ночной дозор (+2 год)
  • построил, поддержал и расширил несколько фреймворков с использованием этих инструментов, обеспечивая качество во всех основных браузерах и средах (настольных и мобильных)
  • провел несколько выступлений и презентаций WebdriverIO & NightwatchJS на различных встречах/конференциях
  • хорошо знаком со всей средой тестирования NodeJS (кроме WebdriverIO и Nightwatch, также работал с: WebdriverJS (оригинальный форк для WebdriverIO), Nightmare, Robot и, как недавно, Puppeteer).

❒ Рекомендация: если вам нужно выбирать между двумя вариантами реализации POC, я рекомендую вам прочитать весь этот ответ. Только тогда вы сможете получить полное представление о всей таблице.


Details Детали проекта:

.-------------.---------.-----------.----------.-------------.--------------.
|   project   | ⭐️stars | 📉📈forks | 🚫issues| 📬 open PRs |  🛠 updated  |
:-------------+---------+-----------+----------+-------------+--------------:
| webdriverio |    5050 |      1450 |       68 |           6 |  12.Jul.2019 |
:-------------+---------+-----------+----------+-------------+--------------:
| nightwatch  |    9450 |       930 |  116|⁺306|          15 |  01.Jul.2019 |
'-------------'---------'-----------'----------'-------------'--------------'

+ - второе значение представляет сумму открытых выпусков (open метка) и stale выпусков (stale метка, 238 из них). Если вам интересно, (я знаю, что я был!) stale представляет ярлык, данный для открытых билетов, которые были неактивны некоторое время с помощью бота. (Это довольно подозрительно!)

Allow мелкие блюда на вынос: (это личная интерпретация приведенных выше чисел, поэтому, пожалуйста, возьмите их с крошкой соли)

Night (🎯Сила) NightwatchJS - более широко используемое решение (идея реализована общим числом звезд Github), оно также быстро приобрело известность после интеграции и евангелизации командой QA в нескольких крупных компаниях (например, LinkedIn, AirBnB, GoPro и т.д.)

➮ (🎯Сила) Благодаря своей прочности, модульности и расширяемости, WebdriverIO может похвастаться большим количеством вилок. Недавние интеграции со множеством популярных служб по требованию (например, плагинов ChromeDevTools, React и VisualRegression) также укрепили доверие сообщества тестировщиков к решению.

➮ (🌋Слабость) Даже если это не техническая критика, в последнее время я стал недоволен постоянным непрофессионализмом, окружающим команду NightwatchJS. Таким образом, кроме устаревших билетов, вы можете постоянно находить свои совершенно действительные ошибки, внезапно закрытые, практически без информации. Иногда вы получаете что-то смешное, как это.

➮ (ppOpportunity) Следующие две категории ("Открытые проблемы", "Открытые PR") на самом деле являются истинным изображением соотношения коммитов и вкладчиков: NightwatchJS в основном поддерживается Андреем Русу и несколькими другими, а WebdriverIO выделяется как проект во главе с основным спонсором Кристианом Броманом и при поддержке очень активного и шипучего сообщества.

➮ (ubСубъективно) Лично у меня иногда возникает ощущение, что Nightwatch, как фреймворк веб-автоматизации, уже наполовину отложен, и основной вкладчик больше заинтересован в получении доходов от пользователей, чем в устранении текущих проблем. Не поймите меня неправильно... Я ничего не имею против маркетинга и продвижения себя, но я бы скорее приложил усилия к продукту и уважению к своим активным пользователям, ПЕРВЫМ!


❒ Отказ от ответственности!

Следующие оценки (on a scale of 1-5 ⭐️) являются моей личной оценкой после интенсивной работы с обеими on a scale of 1-5 ⭐️. Они не отражают ничего, кроме моего собственного опыта использования данных инструментов.


❒ Настройка проекта:

  • WebdriverIO ( 5/5 ⭐️)
  • NightwatchJS ( 4.0/5 ⭐️)

Настроить WDIO, Nightwatch или любую основанную на NodeJS среду тестирования на данный момент довольно просто:

➊ установить пакет:

npm install --save webdriverio
// or
npm install --save nightwatch

& Установить и запустить пакет Selenium Server:

npm install --save-dev selenium-standalone
// don't forget to ...
cd ./node_modules/.bin
./selenium-standalone install
./selenium-standalone start

Structure создать структуру папок быстрого тестирования:

./
├── /test
|   ├── /features        (test-files go here)
|   |   └── test.js      (your first test here)
|   ├── /pages           (page-objects go here)
|   ├── /assets          (everything goes in here)
|   └── /custom_commands (custom methods go here)
└── package.json

➍ создание файла конфигурации (wdio.conf.js или nightwatch.conf.js):

➮ (🎯Сила) на этом этапе WebdriverIO получает преимущество, так как оно поставляется из коробки с пользовательским мастером CLI для простой и простой настройки файла wdio.conf.js (вы можете запустить мастер с помощью wdio config)

Night с Nightwatch вы должны скопировать и вставить nightwatch.conf.js файл nightwatch.conf.js из раздела Начало работы

Night это не значит, что Nightwatch не хватает в этом отношении, просто я лично чувствую, что это оставляет больше места для интерпретации по некоторым аспектам, таким как, какие конфигурационные ключи являются обязательными, что такое nightwatch.json и чем он отличается от nightwatch.conf.js и т.д. Просто кажется, что после прочтения исходной документации по конфигурации я оставляю больше вопросов, чем ответов.

Hel Помощник по настройке WebdriverIO (мастер CLI):

enter image description here


❒ Написание и запуск нашего первого теста:

  • WebdriverIO ( 5/5 ⭐️)
  • NightwatchJS ( 4.5/5 ⭐️)

Итак, вы наконец-то настроили свой проект, у вас есть все ваши программные зависимости, не время писать наш первый тест. Ваш проект на данном этапе должен выглядеть следующим образом:

./
├── /test
|   ├── /features
|   |   └── test.js
|   ├── /pages
|   ├── /assets
|   └── /custom_commands
├── wdio.conf.js or nightwatch.conf.js
└── package.json

Мне очень нравится и ценит то, что и у Nightwatch, и у WebdriverIO есть несколько хороших готовых рабочих примеров на соответствующих домашних страницах. Подключи и играй!

❖ Пример NightwatchJS: (тестирует поиск Рембрандта в Google)

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();
  }
};

Example Пример WebdriverIO: (тестирует поиск DuckDuckGo для WebdriverIO)

wdio-v5:

describe('DuckDuckGo - Search Test, () => {

    it('Should test the DuckDuckGo search page', async () => {

        await browser.url('https://duckduckgo.com/');
        await browser.setValue('#search_form_input_homepage', 'WebdriverIO');
        await $('#search_button_homepage').click();
        // 
        const title = await browser.getTitle();
        assert.equal(title, 'WebdriverIO at DuckDuckGo', 'Checking the title ...');
    });
});

wdio-v4:

const webdriverio = require('webdriverio');
const options = { desiredCapabilities: { browserName: 'chrome' } };
const client = webdriverio.remote(options);

client
  .init()
  .url('https://duckduckgo.com/')
  .setValue('#search_form_input_homepage', 'WebdriverIO')
  .click('#search_button_homepage')
  .getTitle().then(function(title) {
     console.log('Title is: ' + title);
     // outputs: "Title is: WebdriverIO (Software) at DuckDuckGo"
  })
  .end();

Это становится особенно удобным, когда вы хотите показать кому-то быстрое развертывание тестовой среды или провести курс автоматизации, а вам не хватает рабочего примера для тестирования под рукой.

➮ (🎯Сила) Прямо перед написанием вашего первого теста, WebdriverIO предлагает вам принять решение. Вы хотите написать свой код синхронно или асинхронно? Это обеспечивает огромную гибкость, позволяя вам выбрать способ, которым вы хотите написать свои тесты (используя флаг sync).

OteПримечание: это была особенность wdio-v4 ! Новая реализация WebdriverIO (wdio-v5) сфокусирована на синхронном подходе к написанию тестов, одновременно используя асинхронные вызовы изнутри. В целях обеспечения точного представления старой версии я wdio-v4 нижеприведенные примеры, хотя они больше не действительны для wdio-v4.

// By default WebdriverIO commands are executed in a synchronous way using
// the wdio-sync package. If you still want to run your tests in an async way
// e.g. using promises you can set the sync option to false.
sync: true,

sync: true пример:

describe('DuckDuckGo - Search Test, () => {

    it('Should test the DuckDuckGo search page', () => {

        browser.url('https://duckduckgo.com/');
        browser.setValue('#search_form_input_homepage', 'WebdriverIO');
        browser.click('#search_button_homepage');
        const title = browser.getTitle();
        console.log('Title is: ' + title);
    });
});

sync: false пример:

describe('DuckDuckGo - Search Test, () => {

    it('Should test the DuckDuckGo search page', () => {

        return browser
            .url('https://duckduckgo.com/')
            .setValue('#search_form_input_homepage', 'WebdriverIO')
            .click('#search_button_homepage')
            .getTitle().then(function(title) {
                console.log('Title is: ' + title)
                // outputs: "Title is: WebdriverIO (Software) at DuckDuckGo"
            });
    });
});

❒ Объекты страницы:

  • WebdriverIO ( 5/5 ⭐️)
  • NightwatchJS ( 5/5 ⭐️)

В настоящее время практически невозможно провести дискуссию об автоматизации сети и не закончить бурным обсуждением объектов страницы, их полезности, их реализации или объектной модели страницы в целом.

Прежде чем мы углубимся в то, как объекты страницы могут быть реализованы в этих двух тестовых средах NodeJS, я чувствую, что мы должны понять ПОЧЕМУ? мы их используем.

ЗАЧЕМ? (почему мы используем объекты страницы?)

Есть поговорка: не изобретай велосипед, поэтому я не собираюсь. Вместо этого я процитирую ThoughtWork Мартина Фаулера, который ИМХО сказал это лучше всего:

"Когда вы пишете тесты для веб-страницы, вам нужно обращаться к элементам на этой веб-странице, чтобы щелкать ссылки и определять, что отображается. Однако, если вы пишете тесты, которые манипулируют элементами HTML напрямую, ваши тесты будут хрупкими по отношению к изменениям в пользовательский интерфейс. Объект страницы оборачивает HTML-страницу или фрагмент с помощью API для конкретного приложения, что позволяет вам манипулировать элементами страницы, не копаясь в HTML. "


ЧТО? (что нам предоставляют объекты-страницы?)

  • они создают разделение интересов: тест против страницы
  • они создают высокоуровневую абстракцию приложения
  • они (должны) содержат всю статическую информацию о странице
  • они предлагают возможность перепроектировать приложение без изменения тестов
  • они могут представлять любой элемент (объект) на странице или всю страницу целиком

КАК? (как мы создаем такие объекты страницы?)

Хватит болтать! Давайте посмотрим, как мы можем легко реализовать некоторые объекты страницы в нашей тестовой среде.

Пример объекта страницы WebdriverIO:

page.js (это ваша база объектов страниц)

export default class Page {
    open (path) {
        browser.url(path);
        // !Note: if you want to make sure your page was completely
        //        loaded, then maybe add some logic to wait for
        //        document.readyState = "complete", or "interactive"
        // Use a /custom_command for this! Go D.R.Y. principle! RAWWWWR!
    }
}

form.page.js (это пример объекта страницы формы входа):

import Page from './page'

class FormPage extends Page {
    //
    // > define your elements here <
    //
    get username () { return $('#username') }
    get password () { return $('#password') }
    get submitButton () { return $('#login button[type=submit]') }
    get flash () { return $('#flash') }
    //
    // > define or overwrite page methods here <
    //
    open () {
        super.open('login')
    }

    submit () {
        this.submitButton.click()
    }
}

export default new FormPage()

Пример объекта страницы NightwatchJS:

homepage.js (это пример объекта страницы домашней страницы):

const homepageCustomCommands = {

  checkHomePage: function() {
    this.api.perform((done) => {
      //
      // > do some homepage checks here <
      //
    });
    return this;
  }
};

const homepage = {
  url() {
    return '${this.api.globals.baseUrl}/homepage';
  },
  elements: {
    'generic': '#generic',
    'elements': '#elements',
    'gohere': '#gohere',
    sections: {
      header: {
        selector: '#header',
        elements: {
          'these': '#these',
          'are': '#are',
          'your': '#your',
          'selectors': '#selectors'
        },
      },
      footer: {
        selector: '#footer',
        elements: {
          // > footer selectors go here <
        },
      },
    },
  }
  commands: [homepageCustomCommands]
};

module.exports = homepage;

❒ Документация и поддержка:

  • WebdriverIO ( 5/5 ⭐️)
  • NightwatchJS ( 3/5 ⭐️)

И NightwatchJS, и WebdriverIO имеют отличную поддержку в отношении документации:

❯ WebdriverIO: начало работы | API DOCs | Gitter Chat

❯ NightwatchJS: начало работы | API DOCs

➮ (🎯Сила) оба проекта имеют очень чистую и информативную документацию, чтобы сопровождаться отличными примерами

➮ (ppВозможность) в качестве замечания, я иногда обнаруживал, что ищу решение одной или нескольких проблем с функциями Nightwatch или ограничений фреймворка только для того, чтобы найти решение в какой-то непростой истории или блоге. Было бы неплохо, если бы такие ответы и вклады (например, оставленные открытыми публикации PR) были централизованы и документированы

➮ (eWeakness) Я точно не знаю, где находится узкое место в отношении медленного цикла разработки Nightwatch и слабой (в лучшем случае) поддержки багов сообщества, запросов функций или даже представленных PR. На мой взгляд, это выглядит как недостаток в отличие от активного сообщества разработчиков вокруг WDIO или полезного чата Gitter.


продолжение следует...

❒ отчетность

System CI/CD Системная интеграция

❒ Архитектурные различия