Потрогаем selenium из JS

Кузьмин Валерий, Kontur.Recognition, КонфУР осень 2017,

Екатеринбург

План мастер-класса

  1. Selenium wtf? (5 минут)
  2. Тесты на JS (5 минут)
  3. WDIO (5 минут)
  4. Практика с WDIO (7 по 10 минут)
  5. Заключение (5 минут)

1.5 часа (90 минут)

НЕ будет

  1. юнит-тестов
  2. моков-спаев
  3. настройки wdio
  4. настройки селениум-сервера

Окружение

  1. node.js > 6
  2. yarn
  3. JRE
  4. chrome
  5. Все тестировалось на Win10

Selenium wtf?

Test

Test engine,

Bindings

Selenium server

Async code

HTTP

HTTP

Selenium Protocol

+Driver

Устройство

Тесты на JS

Собери себе сам

  1. Тест-фреймворк (mocha, jasmine)
  2. Ассерты (assert, chai)
  3. Раннер (mocha, wdio)
  4. Репортер (dot, teamcity)
  5. Моки/спаи (sinon)

Варианты

  • Nightwatch
  • TestCafe
  • Webdriver.io
  • selenium-webdriver

WDIO

Как выглядит тест

(mocha.bdd + chai.expect)

describe('basic import functions set', () => {
	beforeEach(() => {
		browser.clearTestClaim('a#clearTestClaimNew');
		browser.goToTestClaim('testClaimNew');
		browser.waitForMainPageToLoad();
	});

	it('can upload a formalized document', () => {
		browser.uploadDocumentAndWait(testFiles.formalized_act);
		const isDocumentRecognized = 
                    browser.isDocumentRecognized(
                        FnsType.XmlAcceptanceCertificate);
		return chai.expect(isDocumentRecognized).to.be.true;
	});
});

Особенности и что можно делать

  • Собирается из плагинов
  • Асинхронные тесты можно писать синхронно
  • Все команды селениума
  • Хелперы-ожидания, настройка таймаутов
  • Свои команды
  • PageObject-ы

Практика

Запусти проект

Открой 3 консоли в директории с проектом, от админа

  1. yarn, подожди пока установится
  2. yarn selenium, разреши файрвол
  3. yarn start, откроется браузер

 

В 2 консолях оставляем selenium и start

В 3-й будем запускать тесты:

yarn test или yarn test-grep "my test"

 

01 - открой сайт и проверь текст

browser.url('where')

browser.getText('[data-testid=...]')

assert.equal(actual, expected)

02 - заполни форму

browser.selectByValue('#sel', 'option-value')

browser.setValue('#sel', 'text')

browser.click('#sel')

assert.include(actual, 'substring')

03 - подожди элемент

browser.waitForVisible('#sel')

04 - выполни скрипт

browser.executeAsync((done) => {

                            ...; done();

                       })

05 - проверь консоль

browser.log('browser').value

msg.level === 'SEVERE'

06 - напиши команду

./wdio-custom-commands.js

browser.ensureNoErrorsInConsole()

На этом все.

Спасибо, что пришел на мой мастер-класс!

vkuzmin@kontur.ru

malcoriel

wdio-at-konfur2017

By Valeriy Kuzmin

wdio-at-konfur2017

  • 754