SlideShare a Scribd company logo
1 of 56
Download to read offline
STABILITY IN UNSTABILITY
SELF-HEALING
TEST AUTOMATION
Анна Чернышева
Lead Test Automation Engineer, EPAM
WEB TESTING
Akita owner
https://github.com/alfa-laboratory/akita
MANUAL

TESTING
SIMPLE
AUTOMATION

TOOLS
AGILE,
FAST
AUTOMATION
CONTINOUS
TESTING
ML, AI
TESTING
БЫСТРЫЙ ЦИКЛ ОБРАТНОЙ СВЯЗИ МЕЖДУ
РАЗРАБОТЧИКАМИ И РЕЗУЛЬТАТАМИ
ТЕСТИРОВАНИЯ
АВТОМАТИЗИРОВАННЫЕ ТЕСТЫ
ПРОСТЫЕ, ЭФФЕКТИВНЫЕ И СТАБИЛЬНЫЕ
РЕДИЗАЙН
ПОТОМУ ЧТО ФРОНТ ТАК РЕШИЛ
<div class="column-control__column column-control__column-padding-tile
column-control__column-mobile-res-100 column-control__column-min-res-100
column-control__column-middle-res-50 column-control__column-max-res-50
column-control__padding-tile-min column-control__padding-tile-middle
column-control__padding-tile-mobile column-control__padding-tile-max">
<div class="column-control__column-par">
<div data-component="BannerBuilder"
id="content_en_homepage-themes_2019_D306_jcr-
content_content-paragraph_column-control-dff9_column-0-content_banner-
builder-8bf1"
class="banner-builder banner-builder__wrapper js-flyer-
component banner-builder__1548877541698">
~ 1500 тестов
~ 40% падений тестов из-за изменения локатора
ТРАТИМ ВРЕМЯ НА ОБНОВЛЕНИЕ ЛОКАТОРОВ,
ВМЕСТО НАПИСАНИЯ НОВЫХ ТЕСТОВ
Хватит это терпеть!
NoSuchElementException
Self Healing Tests - No More Unstable Tests
КАК ЖЕ
ЗАСТАВИТЬ
ТЕСТЫ
ЧИНИТЬ
САМИХ СЕБЯ?
CatDog
РАСПОЗНАВАНИЕ ИЗОБРАЖЕНИЙ
НАЖАТА «ДОБАВИТЬ В КОРЗИНУ»
Вырезаем и сохраняем изображение кнопки
НАЖАТА «ДОБАВИТЬ В КОРЗИНУ»
Вырезаем и сохраняем изображение кнопки
НАЖАТА «ДОБАВИТЬ В КОРЗИНУ»
Вырезаем и сохраняем изображение кнопки
НАЖАТА «ДОБАВИТЬ В КОРЗИНУ»
Определяем, где сохраненный фрагмент
находится на экране и нажимаем на нее
PROS & CONS
‣ Простота написания и
поддержки тестов
‣ Запуск тестов на
всевозможных
окружениях
‣ Быстрое обнаружение
изменений на UI
‣ Долго обучать нейронку
‣ Нужен эталон
‣ Ложные срабатывания
https://applitools.com/
ДИНАМИЧЕСКИЕ ЛОКАТОРЫ
‣ В режиме реального времени
анализируем DOM страницы,
извлекаем объекты, их
атрибуты и ранжируем
‣ Рейтинг локатора
увеличивается
шаг теста пройден с локатором
вверху списка
‣ Рейтинг текущего локатора
уменьшается и используется локатор
ниже из списка
шаг теста упал с локатором вверху
списка
‣ Просим перепроверить UI
ни один из локаторов не подходит
PROS & CONS
‣ Динамическое
обновление состояния
‣ Простота написания и
поддержки тестов
‣ ML алгоритм надо учить
‣ Только для новых
тестов
‣ Зависимость от
реализации поиска
элемента
ИНСТРУМЕНТЫ НА РЫНКЕ
СУЩЕСТВУЮЩИЕ ИНСТРУМЕНТЫ
ЗАСТАВЛЯЮТ ЖИТЬ В ИХ ЭКОСИСТЕМЕ
ЗАДУМАЛИСЬ О НОВОМ ПОДХОДЕ
ИДЕЯ И ВИДЕНЬЕ
‣Для использования на любом этапе развития проекта
‣Без зависимости от фреймворка
‣Замена статических локаторов динамическими
ИДЕЯ И ВИДЕНЬЕ
‣Для использования на любом этапе развития проекта.
‣Без зависимости от фреймворка.
‣Замена статических локаторов динамическими
PoC
Определяет сходства (или различия) между двумя графами
graph edit distance (GED)
Расстояние редактирования между g1 и g2, представляет собой
количество операций редактирования, при которых g1 достигает g2.
Преобразование g1 в g2 с помощью операций
замены, вставки, удаления
Deleted a Deleted div
//button[contains(@class,'default-btn')]
<button role="button" type="button" class="button
button_size_m default-btn"><span
class="button__content"><span
class="button__text">Кнопка</span></span></button>
БЫЛО
<button role="button" id="id-id" type="button" class="button
button_size_l"><span class="button__content"><span
class="button__text">Кнопка</span></span></button>
СТАЛО
In node body > div#react-app > div.app.app_theme_alfa-on-white >
div.app.app_theme_alfa-on-white > div.page.page_theme_alfa-on-white >
div.page__content.page__content_offset > div.content.content_theme_alfa-on-white >
div > div > div > div:
    Removed: <button role="button" type="button" class="button button_size_m
button_theme_alfa-on-white default-btn">...</button>:
    body > div#react-app > div.app.app_theme_alfa-on-white > div.app.app_theme_alfa-
on-white > div.page.page_theme_alfa-on-white > div.page__content.page__content_offset
> div.content.content_theme_alfa-on-white > div > div > div:nth-of-type(1) > div
    Added: <span class="checkbox-group checkbox-group_type_normal checkbox-
group_theme_alfa-on-white control-group" role="group" tabindex=«-1»>…</span>
.
.
.
НАХОДИМ РАЗНИЦУ МЕЖДУ ДВУМЯ DOM
СТАНИЦЫ
In node :root:
Modified: <button role="button" id="id-id" type="button" class="button
button_size_mbutton_size_l button_theme_alfa-on-white default-btndata">...</button>:
In node :root:
Removed: <button role="button" type="button" class="button button_size_m
button_theme_alfa-on-white default-btn">...</button>:
    Added: <span class="checkbox-group checkbox-group_type_normal checkbox-
group_theme_alfa-on-white control-group" role="group" tabindex="-1">...</span>:
In node :root:
    Removed: <button role="button" type="button" class="button button_size_m
button_theme_alfa-on-white default-btn">...</button>:
    Added: <span class="input-group input-group_width_available input-
group_theme_alfa-on-white control-group" role="group" tabindex="-1">...</span>:
СРАВНИВАЕМ ADDED ЭЛЕМЕНТЫ С
ИСКОМЫМ
//body/div[@id="react-app"]/div[contains(concat(" ",normalize-space(@class),"
")," app ")][contains(concat(" ",normalize-space(@class)," ")," app_theme_alfa-
on-white ")]/div[contains(concat(" ",normalize-space(@class)," ")," app ")]
[contains(concat(" ",normalize-space(@class)," ")," app_theme_alfa-on-white ")]/
div[contains(concat(" ",normalize-space(@class)," ")," page ")][contains(concat("
",normalize-space(@class)," ")," page_theme_alfa-on-white ")]/
div[contains(concat(" ",normalize-space(@class)," ")," page__content ")]
[contains(concat(" ",normalize-space(@class)," ")," page__content_offset ")]/
div[contains(concat(" ",normalize-space(@class)," ")," content ")]
[contains(concat(" ",normalize-space(@class)," ")," content_theme_alfa-on-white
«)]/div/div/div/div/button
ФОРМИРУЕМ НОВЫЙ ЛОКАТОР
public WebElement findElement(By by) {
WebElement el;
try {
el = super.findElement(by);
} catch (NoSuchElementException ex) {
By newBy = getNewLocator();
el = findElementByNewLocator(newBy);
}
return el;
}
EventDriver extends EventFiringWebDriver
СТРАТЕГИЯ
На каждое действие сохраняем состояние DOM
СТРАТЕГИЯ
На каждое действие сохраняем состояние DOM
NoSuchElementException
СТРАТЕГИЯ
На каждое действие сохраняем состояние DOM
Находим разницу между двумя DOM и предлагаем
вариант нового локатора
NoSuchElementException
СТРАТЕГИЯ
На каждое действие сохраняем состояние DOM
Находим разницу между двумя DOM и предлагаем
вариант нового локатора
Сохраняем успешный локатор и предлагаем
использовать его
NoSuchElementException
PROS
‣ Хорошо работает при изменении атрибутов
‣ Нет привязки к конкретной экосистеме
‣ Для проектов на любой стадии разработки
CONS
‣ Привязка к Selenium
‣ Новые локаторы выглядят устрашающе
‣ Высокое потребление памяти
‣ Пока не стабильно при больших изменениях
DOM с глубокой вложенностью
BROWSER PLUGIN
JsonWireProtocol
Response Status Codes
7 NoSuchElement
An element could not be located on the page using the
given search parameters.
POST /session/:sessionId/element
Search for an element on the page,
starting from the document root.
Command Summary
LIFEHACK
//*[@id=«react-app»]/div/div[1]/div/div[2]/div/div/div/
div[1]/div/div/button
//*[@id=«react-app»]/div/div[1]/div/div[2]/div/div/div/
div[1]/div/div
LIFEHACK
Обращение к родителю не найденного элемента
работает в ~70% случаев
//*[@id=«react-app»]/div/div[1]/div/div[2]/div/div/div/
div[1]/div/div/button
//*[@id=«react-app»]/div/div[1]/div/div[2]/div/div/div/
div[1]/div/div
Q&A
facebook.com/anna.chernyshova.79

More Related Content

Similar to STABILITY IN UNSTABILITY SELF-HEALING TEST AUTOMATION

Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0akrakovetsky
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5Technopark
 
Сергей Ревко
Сергей РевкоСергей Ревко
Сергей РевкоSQALab
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиSQALab
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Seleniumjazzteam
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрийsolit
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиZestranec
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9HighLoad2009
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015GetDev.NET
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf Conference
 
Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)Alexander Novichkov
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in railssergeymoiseev
 
Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Anton Arhipov
 
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Транслируем.бел
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf Conference
 

Similar to STABILITY IN UNSTABILITY SELF-HEALING TEST AUTOMATION (20)

Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
Сергей Ревко
Сергей РевкоСергей Ревко
Сергей Ревко
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015
 
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to UsZFConf 2010: What News Zend Framework 2.0 Brings to Us
ZFConf 2010: What News Zend Framework 2.0 Brings to Us
 
Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in rails
 
Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)Domain Specific Languages (for business rules)
Domain Specific Languages (for business rules)
 
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
Андрей Богомолов Автоматизация дистрибуции информации о наличии и цене товара...
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
 

STABILITY IN UNSTABILITY SELF-HEALING TEST AUTOMATION