Первоначально опубликовано blog.kevinlamping.com
Автоматизированные тесты пользовательского интерфейса не получают большой любви.
Конечно, они популярны, чтобы давать презентации и писать посты в блоге, но, по моему опыту, не многие компании имеют солидный набор тестирования пользовательского интерфейса.
Давайте определим тесты пользовательского интерфейса как любой автоматический тест, который управляет интерфейсом, похожим на браузер.
Дело в том, что тесты используют веб -сайт в традиционном смысле. Мы открываем страницу, нажимаем на некоторые элементы и проверяем некоторые функциональные возможности.
Так почему же отсутствие использования? Похоже, что эти виды тестов были бы невероятно полезны.
И они есть, когда вы можете заставить их работать.
Есть четыре общих вопроса, к которым я сталкивался:
- Большинство инструментов используют Java, что слишком многословное для целей тестирования
- Инструменты, написанные в Nodejs, часто ограничиваются Phantomjs, что мешает вам тестировать в реальных браузерах.
- Написание команд для селена сложна и подвержена ошибкам
- Инструменты работают отлично, пока вы не масштабируете их за пределы
К счастью, Webdriverio имеет противоядие со всеми этими заболеваниями.
Webdriverio “Front-End Friendly”
В отличие от многих инструментов селена, Webdriverio написана полностью в JavaScript. Даже установка селена выполняется через модуль NPM.
Я всегда думал, что автоматизация браузеров означала выяснить, как запустить какое -то сложное приложение Java, которое никогда не звучало для меня привлекательными. Есть также Selenium IDE, но написание тестов через записи страниц слишком напомнило мне веб -редактора Wysiwyg, такие как FrontPage Microsoft.
Вместо этого Webdriverio позволяет мне написать на языке, с которым я знаком, и интегрируется с теми же инструментами тестирования, которые я использую для модульных тестов (мокко и чай).
Ментальная нагрузка для перехода от написания фактической функциональности в JavaScript на написание тестового кода в JavaScript минимальна, и мне нравится этот фактор.
Другая замечательная вещь, и это больше для кредита селена, чем Webdriverio, заключается в том, что я могу использовать расширенные селекторы CSS для поиска элементов.
XPath пугает меня без веской причины. Что -то в сменах вместо пространств просто охлаждает мои кости.
Но мне не нужно учиться xpath.
Используя WebDriverio, я просто передаю свой знакомый селектор CSS, и он точно знает, о чем я говорю.
Я полагаю, что разработчики фронта должны писать тесты для своего кода (как единицы, так и функционального). Webdriverio делает это невероятно простым.
Он обладает силой селена
Я всегда чувствовал себя сдерживающимся при написании тестов в Phantomjs, зная, что он никогда не сможет подтвердить функциональность в популярных, но баггических браузерах, таких как IE.
Но поскольку Webdriverio использует селен под капюшоном, я могу запустить свои тесты во всех видах браузеров.
Selenium – невероятно надежная платформа и лидер отрасли для управления автоматизацией браузеров. Webdriverio стоит на плечах гигантов, пиггиируя поверх селена. Все замечательные вещи в селене доступны, без накладных расходов на написание тестов на основе Java.
Он стремится к простоте
Команды, которые вы используете в своих тестах WebDriverio, являются кратким и здравым смыслом.
Я имею в виду, что WebDriverio не заставляет вас писать код, чтобы соединить две части вместе, которые, очевидно, предназначены друг для друга.
Например, если я хочу нажать кнопку через обычный скрипт селена, я должен использовать две команды. Один, чтобы получить элемент, а другой нажимать на него.
Почему? Очевидно, что если я хочу что -то щелкнуть, мне нужно будет идентифицировать это.
WebDriverio упрощает команду «Click», принимая селектор элементов прямо в команду, а затем преобразует это в два необходимые действия селена. Это означает, что вместо того, чтобы писать это:
driver.findElement(webdriver.By.id('btnG')).click();
Я могу просто написать это:
browser.click('#btnG')
При написании тестов это намного меньше повторения с ума.
Говоря о Simple, мне нравится, как Webdriverio интегрируется в селен. Вместо того, чтобы создавать свою собственную интеграцию селена, они используют общий API REST, который Selenium 2.0 предоставляет и делает его простыми старыми запросами.
Вот пример из Core Webdriverio кода elementactive
Протокол:
let elementActive = function () { return this.requestHandler.create({ path: '/session/:sessionId/element/active', method: 'POST' }) }
Вот и все. Это в основном полная часть файла/функции.
Понимание того, что здесь происходит, довольно просто. Мы отправляем запрос сообщения в конечную точку «Элемент/Актив» и возвращаем ответ.
Я все еще изучаю node.js, поэтому приятно видеть программное обеспечение, где у меня есть какое -то представление о том, что происходит.
Большая часть библиотеки состоит из этих небольших команд, живущих в их собственном небольшом небольшом файле. Это означает, что обновления проще, а интеграция в облачные сервисы селена, такие как Sauce Labs или BrowserStack невероятно проста.
Слишком много инструментов попробуйте повторно изобрести колесо, просто ради него. Я рад, что Webdriverio делает это простым, в свою очередь, помогая мне легко понять, что происходит за кулисами.
Это легко расширять/масштабируемое
Как человек, который провел значительную часть моей карьеры, работая в крупных организациях, для меня важно, чтобы инструменты, которые я использую, легко расширяются.
У меня будут индивидуальные потребности, и я хочу написать свои собственные абстракции, чтобы уменьшить бремя для разработчиков, которых я поддерживаю.
Webdriverio отлично справляется с этим двумя способами:
Пользовательские команды
По умолчанию есть множество команд через Webdriverio, но часто вы хотите написать пользовательскую команду только для вашего приложения.
Webdriverio делает это действительно простым.
Просто вызовите функцию «AddCommand» и пройдите в своих пользовательских шагах.
Вот пример из их документов:
browser.addCommand("getUrlAndTitle", function (customVar) { return { url: this.getUrl(), title: this.getTitle(), customVar: customVar }; });
Теперь, когда я хочу как URL, так и заголовок для моего теста, у меня есть одна команда, доступная, чтобы получить эти данные.
Объекты страниц
С выпуском 4.x Webdriverio они представили Новый шаблон для написания объектов Анкет Для тех, кто не знаком с термином, объекты Page – это способ представления взаимодействия со страницей или компонентом.
Вместо того, чтобы повторять один и тот же селектор во всем вашем наборе тестирования для общего элемента страницы, вы можете написать объект страницы для ссылки на этот компонент.
Затем, в ваших тестах, вы просто спрашиваете объект страницы о том, что вам нужно, и он обрабатывает его для вас.
Это означает, что тесты являются более поддерживаемыми и легкими для чтения.
Они более поддерживаются, потому что обновление селекторов и действий происходит в одном файле.
Когда простое изменение HTML на страницу входа в систему прорывается половину ваших тестов, вам не нужно найти каждую ссылку на Ввод#Имя пользователя
в вашем коде. Вам нужно только обновить объект страницы входа, и вы готовы снова к работе.
Их легче читать, потому что тесты становятся меньше о конкретной реализации страницы и больше о том, что делает страница.
Например, скажем, нам нужно войти на наш веб -сайт для большинства наших тестов. Без объектов страницы все наши тесты начнутся с:
browser.url("login-page") browser.setValue("#username", "testuser") browser.setValue("#password", "hunter2") browser.click("#login-btn")
С объектами страницы это может стать таким же простым, как:
LoginPage.open(); LoginPage.login('testuser', 'hunter2');
Нет ссылки на конкретных селекторов. Нет знаний о URL. Просто шаги самостоятельных документов, которые читаются больше как инструкции, чем код.
Теперь объекты Page – это не новая идея, которую представил Webdriverio. Но то, как они настроили его на использование простых объектов JavaScript, блестяще. Не существует внешней библиотеки или пользовательского домена, чтобы понять. Это просто JavaScript и немного прототипического наследования.
Суммируя это
Я не считаю себя тестером.
Я слишком неуклюжий, чтобы меня отвечали за обеспечение запуска без ошибок.
Тем не менее, я не могу не любить то, что дает мне Webdriverio, и я действительно фанат того, что они делают, и надеюсь, что проект продолжает расти.
Если вы являетесь фронтальным разработчиком или просто знаком с JavaScript, ознакомьтесь с Webdriverio И посмотрите, найдете ли вы это так же потрясающе, как и я.
Оригинал: “https://dev.to/klamping/how-webdriverio-makes-testing-worth-it”