SECON'2016. Иовлев Роман, JDI is UI Automation FutureSECONХочешь узнать как можно получать удовольствие от автоматических тестов? Как писать сами тесты не тратя время на многочисленные Хелперы и заплатки? И при этом получить действительно качественные понятные тесты с детальными логами и возможностью быстрого рефакторинга? Ты хочешь иметь тесты написанные в едином стиле не только для Web, но и мобильных устройств и даже десктоп приложений? Приходи и мы расскажем как наша новая разработка JDI поможет тебе стать настоящим Джедаем в автоматизации!
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.TKConfАвтоматизация тестирования является важной и не неотъемлемой частью разработки современного ПО, но без правильного подхода не редко случается, что написание автотестов занимает слишком много времени, а их поддержка может требовать больше затрат чем просто ручная регрессия. Почему же так происходит и как этого избежать? В этой презентации, базируясь на своем опыте работы во множестве проектов, я хочу рассказать об основных ошибках и проблемах, с которыми приходится сталкиваться автоматизаторам и что нужно сделать чтобы их избежать (на примере фреймворка для автоматизации JDI)
QA Fest 2019. Андрей Солнцев. Selenide для профиQAFestЕсли вы устали от примитивных "Hello World" примеров и хотите знать больше про кишки Selenide и подводные камни, приходите на этот доклад. Обсудим параллельный запуск, рулы и листенеры, трюки с помощью JavaScript и прокси и всё такое.
А ещё лучше, если вы сами предложите свою тему. Повлияй на доклад!
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQAFestPage Objects, вероятно, самый известный на сегодня паттерн, используемый в автоматизации через UI. И самый простой, скажете вы? Не соглашусь, по моим наблюдением применение данного паттерна таит в себе подводные камни даже для наиболее типичных веб-приложений.
В данном докладе я познакомлю вас с тремя простыми и практичными видами PageObject архитектуры - Static, Void и Fluent, продемонстрирую использование кодом, сравню плюсы и минусы подходов. Также я расскажу о важных недостатках Yandex HTMLElements и о некоторых других неудачных подходах, которые повторяются из одного самодельного фреймворка в другой. Вы увидите на примерах, как простой код решает проблемы лучше, чем слишком умный. Примеры на языке Java/Selenide легко переносимы и на другие языки программирования (.NET, Python и другие).
Let’s talk about AtlasArtem SokovetsAtlas – Next Generation of Page Object, which uses the interfaces instead of classes, Page Object tree structure, embedded waits and clear assertions. In talk, I will tell about the core functionality of the framework, the developer, which I am and show it extension points.
Продвинутое использование ActiveRecord в Yii2Paul KlimovЗапись лекции "Продвинутое использование ActiveRecord в Yii2" от 24.09.2016, проходившей в Киеве в "Projector"
http://prjctr.com.ua/events/yii2-conference.html
Приложения для Windows Phone: как мы это делаем #codefestActis WundermanПрезентация руководителя отдела мобильных приложений Григория Никонова для конференции CodeFest 2013. Рассказ о нашем опыте в разработке мобильных приложений и, в частности, о том, как сэкономить время и усилия за счёт фреймворков.
За пределами PageObjectautomated-testing.infoЗа пределами PageObject, Дмитрий Жарий
Есть ли необходимость в использовании объектно-ориентированного подхода в автоматизации тестирования? Нужно ли нам экономить исходный код, или лучше скопировать, вставить и подправить? Что лучше, “сложное” ООП или простые “дубовые” тесты. Ответ зависит от Вашего проекта автоматизации и от дальнейших планов его развития. Если Вы планируете остановится на десятке тестов, то в таком случае в “более сложных практиках” необходимости нет. Если же Вы планируете долгосрочное развитие фреймворка автоматизации, то задуматься о правильной архитекторе и будущем росте необходимо уже прямо сейчас.
В своем докладе Дмитрий расскажет, как очень несложные практики ООП помогут сделать код еще проще и понятней. И поверьте, в хорошем коде может разобраться любой человек, а горы “вечно падающего копи-паста” будут просто ненавидеть. Также Дмитрий расскажет о том, как Автоматизация может тестировать сама себя при помощи легких UI тестов перед тем, как запустить более тяжелые функциональные тесты и сценарии. Он покажет, как написав код тестового набора всего лишь один раз, применить его для каждой страницы отдельно. Примеры кода к докладу будут на C#/.NET. Но, любую такую практику можно реализовать на любом общеизвестном и популярном языке программирования.
Примеры решения типичных задач за рамками ядра Yii2Paul KlimovРассмотрим сравнительно сложные, и в то же время, часто возникающие, задачи, для которых ядро Yii не дает готового решения. Посмотрим как из отдельных моделей ActiveRecord собирать единые сущности, и как разбивать большие модели на составляющие. Разберем как правильно сохранять файлы и как сэкономить на обработчиках событий и поведениях
- Интернационализация сущностей в базе данных;
- Обработка “ролей” в реляционных базах данных;
- Работа с файлами;
- Вложенные модели;
- Trait вместо Behavior.
Оптимизация Selenium тестов и ускорение их поддержкиSQALabДоклад Павла Балахонова на SQA Days-22. 17-18 ноября 2017. Санкт-Петербург, Россия
www.sqadays.com
Продвинутое использование ActiveRecord в Yii2Paul KlimovЗапись лекции "Продвинутое использование ActiveRecord в Yii2" от 24.09.2016, проходившей в Киеве в "Projector"
http://prjctr.com.ua/events/yii2-conference.html
Приложения для Windows Phone: как мы это делаем #codefestActis WundermanПрезентация руководителя отдела мобильных приложений Григория Никонова для конференции CodeFest 2013. Рассказ о нашем опыте в разработке мобильных приложений и, в частности, о том, как сэкономить время и усилия за счёт фреймворков.
За пределами PageObjectautomated-testing.infoЗа пределами PageObject, Дмитрий Жарий
Есть ли необходимость в использовании объектно-ориентированного подхода в автоматизации тестирования? Нужно ли нам экономить исходный код, или лучше скопировать, вставить и подправить? Что лучше, “сложное” ООП или простые “дубовые” тесты. Ответ зависит от Вашего проекта автоматизации и от дальнейших планов его развития. Если Вы планируете остановится на десятке тестов, то в таком случае в “более сложных практиках” необходимости нет. Если же Вы планируете долгосрочное развитие фреймворка автоматизации, то задуматься о правильной архитекторе и будущем росте необходимо уже прямо сейчас.
В своем докладе Дмитрий расскажет, как очень несложные практики ООП помогут сделать код еще проще и понятней. И поверьте, в хорошем коде может разобраться любой человек, а горы “вечно падающего копи-паста” будут просто ненавидеть. Также Дмитрий расскажет о том, как Автоматизация может тестировать сама себя при помощи легких UI тестов перед тем, как запустить более тяжелые функциональные тесты и сценарии. Он покажет, как написав код тестового набора всего лишь один раз, применить его для каждой страницы отдельно. Примеры кода к докладу будут на C#/.NET. Но, любую такую практику можно реализовать на любом общеизвестном и популярном языке программирования.
Примеры решения типичных задач за рамками ядра Yii2Paul KlimovРассмотрим сравнительно сложные, и в то же время, часто возникающие, задачи, для которых ядро Yii не дает готового решения. Посмотрим как из отдельных моделей ActiveRecord собирать единые сущности, и как разбивать большие модели на составляющие. Разберем как правильно сохранять файлы и как сэкономить на обработчиках событий и поведениях
- Интернационализация сущностей в базе данных;
- Обработка “ролей” в реляционных базах данных;
- Работа с файлами;
- Вложенные модели;
- Trait вместо Behavior.
Оптимизация Selenium тестов и ускорение их поддержкиSQALabДоклад Павла Балахонова на SQA Days-22. 17-18 ноября 2017. Санкт-Петербург, Россия
www.sqadays.com
Вёрстка WordPress тем - WP Kharkiv Meetup #1dima_kuzovlevИз чего состоит тема? Зачем нужна дочерняя тема? Что такое иерархия шаблонов? Какие есть тонкости подключения CSS & JS? Для чего не стоит использовать functions.php?
Регрессионное тестирование версткиTalks&WorksДоклад Алексея Малейкова, ведущего разработчика в HTML Academy.
«Совместно с платформой «Открытое образование» мы запустили курс, посвященный основам HTML и CSS. Перед нами стояла задача разработать систему, которая будет автоматически проверять итоговые проекты на соответствие заранее подготовленному макету. В качестве основной техники для проверки было выбрано регрессионное тестирование.
В каждом проекте мы проверяли разметку, сетку и стилевое оформление не только страницы целиком, но и отдельных блоков. Одной из главных проблем был поиск этих самых блоков, так как о том, какой будет верстка студентов, мы не знали ничего - ни какие теги они использовали, ни какие классы и идентификаторы были задействованы. Имели только общее представление о структуре.
В докладе я расскажу, от чего мы отталкивались при построении этой системы, как мы разбирали и анализировали проекты. Какие инструменты и технологии мы для этого использовали и почему. Какие подводные камни вылезали, и какие возникали проблемы».
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"YandexЕсть мнение, что БЭМ! можно применять только в Яндексе и подобных больших компаниях для сложных проектов. Мы расскажем, почему это не так. Доклад ориентирован на любого веб-разработчика, а примеры будут основываться на таких задачах как: вёрстка HTML+CSS по PSD, написание JS компонент, сборка динамического сайта с использованием PHP/Django/RoR.
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey RebrovКак-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
За пределами Page Object. ATDays 2013 Киев. Февраль 2013Dmytro ZhariiБолее детально в посте: Слайды/Видео к моему докладу на #atdays : За переделами PageObject
http://blog.zhariy.com/2013/02/atdays-pageobject.html
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловGeeksLab OdessaРarse'им бэкенд
Аким Халилов
Вы хотите выучить Backbone? Хотите просто писать клиентский код, не думая о сервере и о том, как все обрабатывать, хранить, бэкапить? Выход есть – храните с помощью Parse. Parse – платформа, которая предоставляет возможность хранения данных без забот о сервере. Хранилище данных, соц. сети, push-notification, cloud code. Что такое Parse и что он умеет, о библиотеке для использования:
- знакомство с JS API и примеры использования;
- начинаем кодить: stub-проект;
- кодим фичи: CRUD + плюшки;
- хостим.
Плюсы и минусы автоматизации, пример из жизниz-techПрезентация Влады Шпатыковской "Плюсы и минусы
автоматизации, пример из жизни" с конференции Z-Tech 9.02.2013
Куда приводят мечты? или Искусство развития тестировщикаSQALabДоклад Нины Щегловой на SQA Days-22. 17-18 ноября 2017. Санкт-Петербург, Россия
www.sqadays.com
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALabДоклад Дарьи Шишковой на SQA Days-22. 17-18 ноября 2017. Санкт-Петербург, Россия
www.sqadays.com
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALabДоклад Владимира Иванова на SQA Days-22. 17-18 ноября 2017. Санкт-Петербург, Россия
www.sqadays.com
Continuous performance testingSQALabThis document discusses continuous performance testing (CPT) and introduces the Jagger CPT solution. It provides an overview of why performance testing is important, outlines the principles and goals of CPT, and describes the key parts of the Jagger CPT platform including load generation, metrics collection, test data management, and environment management. It also provides an example customer success story where Jagger was used for continuous performance testing of a large ecommerce site.
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALabДоклад Юлии Александровой на SQA Days-22. 17-18 ноября 2017. Санкт-Петербург, Россия
www.sqadays.com
Добиваемся эффективности каждого из 9000+ UI-тестовSQALabДоклад Максима Сахарова на SQA Days-22. 17-18 ноября 2017. Санкт-Петербург, Россия
www.sqadays.com
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALabThis document provides an overview of the JDI (Java UI test automation framework). It discusses features of JDI including being UI element oriented, providing common UI elements and solutions to common problems. It provides examples of how to write tests using JDI annotations and page object pattern. The document also summarizes benefits of JDI such as reducing test code, improving test clarity, reuse across projects. Finally it outlines new features planned for JDI 2.0 including layout verification, page object generator, integration with Selenium and expanding JDI to other languages like Python.
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALabДоклад Алексея Анисимова на SQA Days-22. 17-18 ноября 2017. Санкт-Петербург, Россия
www.sqadays.com
Тестирование геолокационных системSQALabThe document discusses testing of geolocation systems. It provides an overview of geolocation, including definitions and importance. It then outlines the speaker's experience and work testing GIS systems. The rest of the document details approaches to testing geolocation, including simulating calls, checking responses and databases, and verifying accuracy. It also discusses common data formats, projections, tools like PostGIS and QGIS, and potential bugs to watch for like coordinate jumbling. The conclusion emphasizes starting simple, practicing to improve, and for tests to grow with knowledge as geolocation is important for future IT.
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...SQALabДоклад Никиты Налютина на SQA Days-22. 17-18 ноября 2017. Санкт-Петербург, Россия
www.sqadays.com
5. Проблема 1: Составные элементы
@FindBy(css=".colors-dropdown .caret")
WebElement arrow;
@FindBy (css=".colors-dropdown . dd-menu")
List<WebElement> list;
@FindBy (css=".colors-dropdown [type='text']")
WebElement value;
public void selectColor (String color){
arrow.click();
for (WebElement el : list)
if (el.getText.equals(color)) {
el.click();
break;
}
arrow.click();
}
public String getSelectedColor(){
return value.getAttribute(“value”);
}
5
6. Составные элементы - Selenium
@FindBy(css=".color-dropdown .caret")
WebElement arrow;
@FindBy (css=".color-dropdown. dd-menu")
List<WebElement> list;
@FindBy (css=".color-dropdown [type='text']")
WebElement value;
@FindBy(css=".color-dropdown .caret")
WebElement arrow;
@FindBy (css=".color-dropdown. dd-menu")
List<WebElement> list;
@FindBy (css=".color-dropdown [type='text']")
WebElement value;
@FindBy(css=".color-dropdown .caret")
WebElement arrow;
@FindBy (css=".color-dropdown. dd-menu")
List<WebElement> list;
@FindBy (css=".color-dropdown [type='text']")
WebElement value;
public void selectColor (String color){
arrow.click();
for (WebElement el : list)
if (el.getText.equals(color)) {
el.click();
break;
}
arrow.click();
}
public String getSelectedColor(){
return value.getAttribute(“value”);
}
public void selectColor (String color){
arrow.click();
for (WebElement el : list)
if (el.getText.equals(color)) {
el.click();
break;
}
arrow.click();
}
public String getSelectedColor(){
return value.getAttribute(“value”);
}
public void selectColor (String color){
arrow.click();
for (WebElement el : list)
if (el.getText.equals(color)) {
el.click();
break;
}
arrow.click();
}
public String getSelectedColor(){
return value.getAttribute(“value”);
} 6
7. Составные элементы - JDI
class MyPage extends WebPage {
@FindBy(class = "colors-dropdown")
public IDropDown<Colors> colors = new Dropdown<>(
By.className("сarret"),
By.cssSelector("li span"),
By.cssSelector("[type=‘text’]"));
@FindBy(class = " sizes-dropdown")
public MyDropdown<Sizes> sizes;
}
7
8. Составные элементы - JDI
myPage.colors.select("Blue");
myPage.colors.setValue(Colors.BLUE);
*А еще можно работать с Enum
String value = myPage.colors.getValue();
8
10. Таблицы - Selenium
@FindBy(css=".root .table")
WebElement table;
@FindBy (css=".root .li .row")
List<WebElement> row;
@FindBy (css=".root .li .column")
List<WebElement> column;
public int getColumnsCount(){//TODO};
public int getRowdCount(){//TODO};
public String getRowValue (int index){//TODO};
public String getCellvalue (int index){//TODO};
public int searchRowContain(){//TODO};
public int searchRowMatch(){//TODO};
public String myGetRowValue (int index){//TODO};
public String myGetCellvalue (int index){//TODO};
public int myGetColumnCount(){//TODO};
public int myGetRowCount(){//TODO};
public String myGetRowValue (int index){//TODO};
public String myGetCellvalue (int index){//TODO};
public int myGetColumnCount(){//TODO};
public int myGetRowCount(){//TODO};
…
public String myGetCellvalue (int index){//TODO};
public void cellClick (int x, int y) {
driver.findElement(By.xpath(format("/tr[%s]/td[%s]"),x, y)).click();
}
10
13. Проблема 3: сложные ячейки
myPage.table.cell(1, 2).get(MyCell.class)
.seeMore.click(); 13
14. Итоги
• Существенное уменьшение количество кода
• Экономия времени тест инженера
• Тесты пишутся быстро
• Меньше вероятность ошибки
• Проще поддержка тестов
Типизированные элементы
14
33. Не только Web – Интерфейсы - JDI
Интерфейсы – взгляд на элементы с точки зрения
пользователя
myButton.click();
myButton.getText();
public interface IButton {
void click();
String getText();
}
33
34. Не только Web
@Test
public void addContactTest() {
ContactDetails contacts =
new ContactDetails(
"Irina",
"222-22-22");
startPage.addContact.click();
addContactForm.save(contacts);
}
34
36. UI Objects
+ Типизированные элементы
+ Типизированные Объекты (Секции)
+ Элементы-интерфейсы
UI Objects = PageObject
36
37. Выводы
• Меньше кода
• Экономия времени
• Увеличение производительности
• Меньше вероятность ошибки
• Проще поддержка тестов
• Легко адаптировать под свой проект
• Мультиплатформенность
• Логирование
37
#4: Для оптимизации затрат на разработку и тестирования в компании Epam мы разрабатываем различные инструменты, которые помогают нам ускорить процесс разработки и существенно сэкономить деньги и время на внедрение автоматизации.
Мы также стараемся делится нашими наработками с сообществом, об одном из таких инструментов и пойдет речь.
Фреймворк, который мы используем для UI тестирования в компании называется JDI.
JDI имплементирует паттерн UI Objects, который расширяет всем известный паттерн Page Objects и позволяет легко адаптировать его под разные проекты отличающиеся не только версткой веб страницы, но и даже платформой (поддерживаются и мобильные устройства и Desktop)
Подробнее информацию об его использовании можно поcмотреть в презентациях по ссылочкам или почитать на нашем сайте.
Если вас больше интересует реализация или есть идеи по улучшению фреймворка, то welcome на Github.
#7: В этом случае мы получим Page Object с большим количеством элементов и методов соотнести которые друг с другом будет крайне не просто
#8: В JDI же мы смотрим на элементы с точки зрения пользователя. Для пользователя это 1 элемент dropdown. Так и запишем.
Все необходимые локаторы указываются вместе.
Также если вы обратили внимание у элемента можно указать общую часть локатора. Это позволяет сделать используемые локаторы существенно короче и нагляднее/
В случае если дропдауны в вашем проекте реализованы достаточно стандартно, то можно создать свой элемент и запись станет гораздо короче
#12: В JDI же таблица описывается очень просто, так же как и любой другой элемент. JDI умеет работать с «локаторами шаблонами», в которые потом подставляются значения, что сохраняет концепцию PageObjects и делает сами классы наглядными и легко поддерживаемыми
У Таблиц также есть возможности для более детальной ее преднастройки, ну а в случае если таблица у вас реализована с использование стандартного подхода (тег table), вам достаточно просто указать локатор на него
JDI мы предлагает взгялнуть на таблицу, как на отдельны элемент – создаем один элемент вместо трех
В качестве входных параметров в конструктор передаем только локаторы для сторок и колонок таблицы, причем локаторы относительно ТАБЛИЦЫ ВЦЕЛОМ
Если у нас таблицы посложнее и содержит еще и хедеры и футоры – локаторы для них также можно указывать в конструкторе – конструкторов для построения таблицы много.
Реализованы Локаторы с шаблонами, куда будет подставлен индеск колоки или строки
А если таблица реализована стандартным образом – еще проще – просто создаем элемент через аннотицию FindBy
#34: К счастью нет! Благодаря Интерфейсам используемым в JDI вам достаточно лишь подключить другой пакет (к примеру mobile) и все ваши тесты смогут работать с мобильными устройствами. Поменять придется лишь то что действительно отличается.
Вот к примеру Кнопка. Кнопки бывают и в Web приложениях и в Мобильных и на Desktop. Есть ли какая-то разница между ними? С точки зрения реализации конечно да, но с точки зрения пользователя никакой. На кнопку просто можно нажать. Ну возможно у нее еще есть название.
JDI смотрит на все элементы с точки зрения пользовательских действий именно по этому мы используем интерфейсы. Где же конкретно используются наши элементы это уже вопрос их реализации. Можно использовать Selenium, а можно Appium, можно даже написать имплементацию на JavaScript
концептуально это неверно
JDI предоставляет набор интерфейсов для работы с каждым UIObjects
Для кнопки есть только click () и getText(), реализация которых зависит уже от типа прилжения и драйвера.
Соответственно, интерфейсы помогают нам взглянуть на элементы с точки зрения пользователя, чего мы и добаваемся при написаниее тестов
но есть проблемы и посложнее