Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В protactor ^5 под капотом используются Jasmine 2.x и jasminewd2(адаптер jasmine 2 -> webdriver) и правильно было бы в зависимостях использовать тайпинги для второго Jasmine и тайпинги для адаптера. Так что я бы поставил бы @types/jasmine@^2 и @types/jasminewd2.
А вот в Protractor 6 уже используется третий Jasmine без всяких "сторонних" адаптеров.
"...WebDriver, умеет работать только с конечным набором локаторов. Этот список можно посмотреть на сайте w3.org....", а то давно пользуюсь но никогда не доходили руки посмотреть именно спецификации.
«This specification is derived from the popular Selenium WebDriver browser automation framework.»— тоесть этот стандарт написан по мотивам селениума. Но и стандарт, и селениум — они как-бы не статичны, да и конторы их пилят немного разные…
Вместо этого набора команд можно указать любой другой, который нужен для работы лично вам. Например, вы можете запускать и гасить selenium-сервер между запусками тестов. Хотя это, конечно, проще контролировать внутри самого кода тестов.
TypeScript отличается от JavaScript поддержкой использования полноценных классов
и возможностью подключения модулей
не “скомпилируется”, если вместо int в функцию где-то явно передается string
У меня уже были установлены NodeJS (v11.6.0)
npm install -g typescript
SELENIUM_PROMISE_MANAGER: false
Tests/*Test.js
Особой разницы нет, просто мне привычнее работать с jar-файлом
await browser.wait(EC.presenceOf(input_button), 5000);
Это означает, что код не всегда выполняется в том порядке, в котором он написан.
const myObj = {myVar: null};
function asyncChanger(obj, prop, value) {
setTimeout(() => obj[prop] = value, 1000);
}
asyncChanger(myObj, 'myVar', 42);
нам пригодится функция then()
Он позволяет избегать promise hell, который раньше образовывался в коде из-за большого количества вложенностей
getText()
.then(text => someInputField.sendKeys(text))
.then(() => someFinalization());
getText()
.then(text => someInputField.sendKeys(text)
.then(() => someFinalization()));
Вот тут путаете ) Код всегда выполняется именно в том порядке, в котором он написан. Там ничего случайного нет. Разница в том когда вы получите результат асинхронного кода.
<...>
Здесь функция asyncChanger будет вызвана именно там, где она написана, но переменная изменится через секунду. Если инетерсно — могу дать пару ссылок с подробным разбором асинхронности в JS.
Если инетерсно — могу дать пару ссылок с подробным разбором асинхронности в JS.
«Для запуска нашего теста сначала надо превратить TS-код в JS-код, а затем запустить его:
$ tsc $ protractor output_js/config.js
Наш тест запустился — мы молодцы. :)»
node .\output_js\config.jsnpm install protractornpx protractor output_js/config.js
Разворачиваем автоматизацию за пару часов: TypeScript, Protractor, Jasmine