- Файлы тестов должны располагаться в папке
e2e-tests\nightwatch\tests(группировка по папкам допускается) - Файлы тестов должны иметь название формата
<Наименование файла>.test.js - Формат тест-кейса:
testcase('Наименование кейса', () => {
<тело кейса>
})- Формат шагов:
step('наименование шага', () => {
<команды, которые необходимо выполнить>
})- Формат ожидания:
expected('наименование ожидаемого результата', () => {
<команды, которые необходимо выполнить>
})Пример
testcase('Логаут', () => {
step('кликаем на Аватар', () => {
browser.click('[data-testid="AccountMenu:avatar"]')
})
step('кликаем на Выйти', () => {
browser.click('[data-testid="AccountMenu:logout"]')
})
expected('отображается кнопка Войти', () => {
browser.waitForElementPresent('[data-testid="Header:authLink"]')
})
})Важно: step и expected вне testcase выполняться не будут.
При создании тест-кейса рекомендуется использовать атрибуты для поиска элементов (data-testid).
Все команды указаны в документации Nightwatch. В таблице ниже перечислены самые частые из них.
| Команда | Что делает | Пример |
|---|---|---|
| browser.url() | Открывает страницу по URL | browser.url(browser.launch_url) |
| browser.click() | Нажимает на элемент | browser.click('[data-testid="Header:authLink"]') |
| browser.waitForElementPresent() | Проверяет, что элемент находится на странице | browser.waitForElementPresent('[data-testid="AuthForm:form"]') |
| browser.waitForElementNotPresent() | Проверяет, что элемент отсутствует на странице | browser.waitForElementNotPresent('[data-testid="AuthForm:form"]') |
| browser.setValue() | Вводит значение в поле | browser.setValue('[data-testid="AuthForm:email"]', 'zakaz1@zakaz.ru') |
| browser.pause() | Ожидает указанное время в мс | browser.pause(5000) |
| browser.assert.containsText() | Проверяет текст внутри элемента с необходимым id | browser.assert.containsText('[data-testid="PasswordEditForm:informer"]','Пароль успешно изменён') |
| browser.moveToElement() | Наводит курсор на элемент | browser.moveToElement('[data-testid="EditForm"]', 1, 1) |
| browser.assert.screenshotElement() | Сравнивает скриншот объекта с эталонным скриншотом. Как работает: при самом первом запуске делает эталонный скриншот, при последующих сравнивает новый скриншот с эталоном. | browser.assert.screenshotElement('[data-testid="EditForm"]','форма редактирования') |
| browser.execute(dragAndDrop, ['селектор первого элемента','селектор элемента, куда двигаем']) | Предоставляет функцию darg-and-drop. Как использовать: выполнить в терминале (достаточно один раз) yarn add --dev html-dnd и в начале теста объявить var dragAndDrop = require('html-dnd').codeForSelectors. После этого можно пользоваться командой |
|
| .assert.screenshotElement() | Скрывает элементы страницы на скриншоте | .assert.screenshotElement('[data-test-id="Card:root"]','вид карточки талант отказался',{ hideSelectors: ['[data-test-id="CardResponse:date"]'] }) |
- Браузер стартует в начале каждого тест-кейса и закрывается после его выполнения.
- Изменить время ожидания по умолчанию можно в файле
/e2e-test/e2e-toolsв строке"waitForConditionTimeout": 10000. - После тестового прогона результат запуска сохраняется в отчет (адрес отчета доступен в конце лога запуска).
| Ошибка | Объяснение |
|---|---|
Error while running .clickElement() protocol action: An unknown error has occurred |
Возникает при попытке кликнуть на элемент, который есть на странице, но вне видимой части |
Error while running "screenshotElement" command: Error: Unsupported image type |
Возникает при попытке сделать скриншот элемента, которого нет на странице, или если эталонный скриншот не удалось считать |