SlideShare uma empresa Scribd logo
1 de 75
UI Automation:

Page Objects
Лучше проще, да лучше
Alexei Vinogradov
Alexei Vinogradov

IT-Kонсультант



тестирование, управление тестированием,
автоматизация в тестировании, коучинг
15+ лет в IT, докладчик SQA Days / Codefest
Студент-практикант -> Программист -> Тестировщик ->…
! !
http://radio-qa.com
Page Objects: идея
Разделить код тестов и 

код нахождения и 

управления элементами страниц
Page Objects: преимущества
Уменьшает дублирование кода
Улучшает читаемость и стабильность
Уменьшает расходы на поддержку изменений
UI Автоматизация - это скучно
UI Автоматизация
1. Составить тест-кейсы (не все)
2. Сражаться с тулзами
3. Сражаться с изменениями
4. Повторять 1-3
Лекарство
Пишем свои фреймворки
Justin Searls
Анти-паттерны в Page Objects:
типизированные элементы
Yandex HtmlElements
testIT WebTester
JDI
Button
Link
Image
Checkbox
Типизированные элементы
Это что за элемент?
<a class=„fancy“ href=„javascript:doSmth()“>
Типизированные элементы
A это что за элемент?
<input type=„button“>
Типизированные элементы
A это? :)
<div style=„..some-qooxdoo-magic..“>
Проблемы типизирования
Проверка валидности в Runtime, не Compile-time
Проблемы типизирования
Один элемент - несколько типов
Проблемы типизирования
Нужно задумываться о типе элемента
Усложняет поддержку, если тип „несовершенен“
Вывод
Тотальное типизирование элементов - зло!
Но…
Поддержка стандартных ситуаций - польза:
• Uploads
• Select/Dropdown
• Tables
• …
Static Page Objects (Page Modules)
Void Page Objects
Fluent Page Objects
Реализация
http://selenide.org
Selenium inside
UI Testing Framework
open(url)
open(relativeUrl)
Selenide


WebDriver driver=new FirefoxDriver();

driver.get(url);



driver.get(SystemProperties.get(„hostname“)

+ relativeUrl);
$(„cssSelector“)
Selenide
driver.findElement(By.cssSelector("cssSelector"))



или


@FindBy (css="cssSelector")
shouldBe(…), shouldHave(…), should(…)
shouldNotBe(…), etc.
Selenide
Assert + implicit wait +
StaleElementReferenceException retry +

smart logging + screenshot + source code save
Приложение
LoginPage HomePage
Static Page Objects
Все элементы и методы - static
Методы возвращают void или сущности
Другое название PageModules*
* Яков Крамаренко, „KISS Automation“ (2015)
Static (Page Modules)
public class LoginPage {



public static SelenideElement welcomeMsg=$("#welcome"),

username=$("#username"),

password=$("#password"),

loginBtn=$("#login");



public static void login(String user, String pwd){

username.setValue(user);

password.setValue(pwd);

loginBtn.click();

}

}


public class HomePage {


public static SelenideElement welcomeMsg=$("#welcome");

}
Static (Page Modules)
public class LoginPage {



public static SelenideElement welcomeMsg=$("#welcome"),

username=$("#username"),

password=$("#password"),

loginBtn=$("#login");



public static void login(String user, String pwd){

username.setValue(user);

password.setValue(pwd);

loginBtn.click();

}

}


public class HomePage {


public static SelenideElement welcomeMsg=$("#welcome");

}
Static (Page Modules)
public class LoginTest {



@Test

public void testLogin(){

open("/");

LoginPage.welcomeMsg.shouldBe(visible);

LoginPage.login("admin","12345");

HomePage.welcomeMsg.shouldBe(visible);

}

}

Паттерн public/private (or default)
…

// elements to be used in tests

public static SelenideElement welcomeMsg = $("#welcome");



// elements to be used in pageObject only

static SelenideElement username = $("#username"),

password = $("#password"),

loginBtn = $("#login");

…







Антипаттерн Getter/Setter
public class LoginPage {



public static SelenideElement welcomeMsg=$("#welcome"),

username=$("#username"),

password=$("#password"),

loginBtn=$("#login");



public static SelenideElement getWelcomeMsg() {

return welcomeMsg;

}



public static SelenideElement getUsername() {

return username;

}



public static SelenideElement getPassword() {

return password;

}



public static SelenideElement getLoginBtn() {

return loginBtn;

}



public static void login(String username, String pwd){

getUsername().setValue(username);

getPassword().setValue(pwd);

getLoginBtn().click();

}

}

Антипаттерн Getter/Setter
Ненужные строчки кода
Увеличивает „шум“ в полезном коде
Static imports
import static com.app.pages.LoginPage.*;



public class LoginTest {



@Test

public void testLogin(){

open("/");

welcomeMsg.shouldBe(visible);

login("admin","12345");

HomePage.welcomeMsg.shouldBe(visible);

}

}

Не всегда хороши:
Static imports
import static com.app.pages.FormElement.*;


public class FormTest {



@Test

public void shouldBeInitiallyEmpty(){

firstname.shouldBe(empty);

lastname.shouldBe(empty);
addressLine1.shouldBe(empty);
addressLine2.shouldBe(empty);
mobilePhone.shouldBe(empty);
}

}

Иногда полезны:
Преимущества - недостатки
+ Очень просто и доступно для начинающих
- (очень редко) Проблемы при параллелизации 

(может зависеть от фреймворка, из-за static)
? меньше гибкости: 

не рекомендуется хранить состояние 

нельзя сделать текучий (fluent) интерфейс
Приложение
LoginPage HomePage
Void Page Objects
Убираем static из описания полей и методов
Добавляем конструктор
Void Page Objectspublic class LoginPage {



public SelenideElement welcomeMsg = $("#welcome");



SelenideElement username = $("#username"),

password = $("#password"),

loginBtn = $("#login");



public void login(String username, String pwd) {

…

}



public LoginPage(){

welcomeMsg.shouldBe(visible);

}

}
public class HomePage {



SelenideElement welcomeMsg=$("#welcome");



public SelenideElement loggedInUser=$("#loggedInUser");



public HomePage(){

welcomeMsg.shouldBe(visible);

}

}
Void Page Objects
public class LoginTest {



@Test

public void testLogin(){

open("/");

new LoginPage().login("admin","12345");

HomePage homePage=new HomePage();

homePage.loggedInUser.shouldHave(text("admin"));

}

}
Преимущества - недостатки
+ Очень просто и доступно для начинающих
+/? Проверки в конструкторе
+/? можно хранить состояние 

(пример - выбранная строка таблицы)
Fluent Page Objects
Методы возвращают PageObject страницы перехода
Если перехода нет - возвращается текущий
PageObject
Fluent Page Objects
public class LoginPage {



public SelenideElement welcomeMsg = $("#welcome");

…

public HomePage login(String username, String pwd) {

this.username.setValue(username);

password.setValue(pwd);

loginBtn.click();

return new HomePage();

}



public LoginPage(){

welcomeMsg.shouldBe(visible);

}

}

Приложение
HomePage
Fluent Page Objects
public class HomePage {



SelenideElement welcomeMsg=$("#welcome"),

reloadBalanceBtn=$("#reloadBalance"),

balanceDetailsBtn=$("#balanceDetails");



…
}



public HomePage reloadBalance(){

reloadBalanceBtn.click();

return this; // return new HomePage();

}



public BalanceDetailsPage openBalanceDetails(){

balanceDetailsBtn.click();

return new BalanceDetailsPage();

}

}

Fluent Page Objects
public class LoginTest {



@Test

public void testLogin(){

open("/");

HomePage homePage=new LoginPage().login("admin","12345");

homePage.loggedInUser.shouldHave(text("admin"));

}

}
Fluent Page Objects
public class FlowTest {



@Test

public void fluentTest(){

new LoginPage().login("admin","12345")

.reloadBalance()

.openBalanceDetails();

}



@Test

public void nonfluentTest(){

HomePage homePage=new LoginPage().login("admin","12345");

homePage.reloadBalance();

BalanceDetailsPage balancePage=homePage.openBalanceDetails();

}

}

Абсолютно неоднозначно, какой из вариантов лучше
Преимущества - недостатки
? переходы между страницами определены в
Page Object - анализ тулзами
-/? некоторые сложности, если метод
возвращает сущности
Приложение
LoginPage
Методы на распутье (Void)
public class LoginTest {



@Test

public void testLogin(){

new LoginPage().login("admin","12345");

HomePage homePage=new HomePage();

homePage.loggedInUser.shouldHave(text("admin"));

}



@Test

public void testBadLogin(){

LoginPage loginPage=new LoginPage();

loginPage.errorMsg.shouldNotBe(visible);

loginPage.login("admin","admin");

new LoginPage().errorMsg.shouldBe(visible);

//loginPage.errorMsg.shouldBe(visible);

}

}
Методы на распутье (Fluent)


…



public HomePage login(String username, String pwd) {

doLogin(username, pwd);

return new HomePage();

}



public LoginPage badLogin(String username, String pwd) {

doLogin(username, pwd);

return new LoginPage(); //return this;

}



private void doLogin(String username, String pwd) {

this.username.setValue(username);

password.setValue(pwd);

loginBtn.click();

}



… 

}
Методы на распутье (Fluent)
public class LoginTest {



@Test

public void testLogin(){

HomePage homePage=new LoginPage().login("admin","12345");

homePage.loggedInUser.shouldHave(text("admin"));

}



@Test

public void testBadLogin(){

LoginPage loginPage=new LoginPage().badLogin("admin","admin");

loginPage.errorMsg.shouldHave(text("Error"));

}

}

Немецкая шутка
Сколько немцев нужно, чтобы вкрутить лампочку?
Анти-паттерны: наследование
Наследование сущностей - О.К.
Анти-паттерны: наследование
Наследование страниц - плохо
Анти-паттерны: наследование
Усложняет поддержку
Лучше пользуйте композицией
Или элементами без композиции
Или копипейстом…*
S.O.L.I.D.
Правила SOLID для тестов - зло!
потому что тестовый код ПОСТОЯННО исполняется
Паттерн Page Elements (Page Blocks)
сложно или невозможно обозначить страницы
блоки элементов повторяются на разных страницах
поддержка в Yandex HTMLElements и др.
паттерн можно использовать без композиции
Тесты с Page Elements без композиции
public class NonCompositeTest {



@Test

public void elementTest(){

new LoginPage().login(„admin“,"12345");
HomePage page=new HomePage();

AddressElement address=new AddressElement();

page.userName.shouldBe(visible);

address.zipCode.shouldBe(visible); 

}



}

Композиция с Page Elements
public class HomePage {



…
public AddressElement addressElement;



public HomePage(){

addressElement=new AddressElement();
…

}



}

Сложности с Page Elements
<div id=„address1“>
…
// code of addressElement
…
</div>
<div id=„address2“>
…
// code of addressElement
…
</div>
SavingAccountPage VisaAccountPage
Посмотрите Yandex HtmlElements
Или напишите своё решение
Или …
4 стадии развития
1. Знаю как сделать
2. Знаю как сделать эффективно
3. Знаю как сделать изящно
4. Знаю как не делать
Дублирование кода
SavingAccountPage VisaAccountPage
public class SavingAccountPage {
SelenideElement page=$("#address1"),

street=page.$(„#street“),
city=page.$(„#city“),

zipCode=page.$(„#zipCode“)
…

}
public class VisaAccountPage {
SelenideElement page=$("#address2"),

street=page.$(„#street“),
city=page.$(„#city“),

zipCode=page.$(„#zipCode“)
…

}
Дублирование кода
Сopy & Paste безопаснее в Page Object классах,

чем в прочем коде
потому что тестовый код ПОСТОЯННО исполняется
Дублирование кода
опасность при рефакторинге
когда код Page Object простой - его редко нужно
рефакторить
Анти-паттерны: чрезмерное
разделение обязанностей
Разделение локаторов и методов в разные файлы
Выделение констант в properties файлы
Резюме
3 паттерна для написания Page Objects:
Вспомогательные паттерны:
Static
Void
Fluent
public/private доступ
Page Element (Page Blocks)
дублирование кода
Резюме
анти-паттерны для Page Objects:
типизированные объекты
наследование
getter/setter
чрезмерное распределение обязанностей
Резюме
темы, не попавшие в доклад
Возвращение методами сущностей
Паттерн DataTransferObjects
Сохранения состояния
Простая реализация паттерна композиции
Три простые мысли*
В нашем мире не всё, всегда и везде, а кое-что,
иногда и местами. Из любых правил есть
исключения. И при принятии решений нужно
всегда держать голову включенной.
* (с) Дорофеев „Вебинар: Джедайская техника доведения дел до конца“
Три простые мысли*
Сложность порождает проблемы, а простые
вещи зачастую самые действенные.
* (с) Дорофеев „Вебинар: Джедайская техника доведения дел до конца“
Три простые мысли*
Освоен метод или нет становится понятно,
только когда начинаешь его применять. Только
через практику можно освоить написание
хороших тестов.
* (с) Дорофеев „Вебинар: Джедайская техника доведения дел до конца“
Напоследок
Всем позитива!
Photo: Sekhar, India ©
The End.
Questions?
skype: alexejv

email: alexei@vinogradov-it.de
twitter: @vinogradoff

Mais conteúdo relacionado

Mais procurados

Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptForziatech
 
Utilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationUtilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationSeven Peaks Speaks
 
Railway Oriented Programming
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented ProgrammingScott Wlaschin
 
PHP for Adults: Clean Code and Object Calisthenics
PHP for Adults: Clean Code and Object CalisthenicsPHP for Adults: Clean Code and Object Calisthenics
PHP for Adults: Clean Code and Object CalisthenicsGuilherme Blanco
 
Collections Api - Java
Collections Api - JavaCollections Api - Java
Collections Api - JavaDrishti Bhalla
 
Introduction to Javascript
Introduction to JavascriptIntroduction to Javascript
Introduction to JavascriptAmit Tyagi
 
Appium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAppium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAlina Dolgikh
 
Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depthVinay Kumar
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced JavascriptAdieu
 
React state
React  stateReact  state
React stateDucat
 
ES6 PPT FOR 2016
ES6 PPT FOR 2016ES6 PPT FOR 2016
ES6 PPT FOR 2016Manoj Kumar
 

Mais procurados (20)

jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScript
 
Utilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationUtilizing kotlin flows in an android application
Utilizing kotlin flows in an android application
 
Railway Oriented Programming
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented Programming
 
JQuery selectors
JQuery selectors JQuery selectors
JQuery selectors
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
PHP for Adults: Clean Code and Object Calisthenics
PHP for Adults: Clean Code and Object CalisthenicsPHP for Adults: Clean Code and Object Calisthenics
PHP for Adults: Clean Code and Object Calisthenics
 
Collections Api - Java
Collections Api - JavaCollections Api - Java
Collections Api - Java
 
Advanced JavaScript
Advanced JavaScriptAdvanced JavaScript
Advanced JavaScript
 
Javascript basics
Javascript basicsJavascript basics
Javascript basics
 
Angular Directives
Angular DirectivesAngular Directives
Angular Directives
 
Introduction to Javascript
Introduction to JavascriptIntroduction to Javascript
Introduction to Javascript
 
Object Oriented Javascript
Object Oriented JavascriptObject Oriented Javascript
Object Oriented Javascript
 
Php mysql ppt
Php mysql pptPhp mysql ppt
Php mysql ppt
 
Appium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAppium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон Семенченко
 
Spring jdbc
Spring jdbcSpring jdbc
Spring jdbc
 
Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depth
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced Javascript
 
React state
React  stateReact  state
React state
 
ES6 PPT FOR 2016
ES6 PPT FOR 2016ES6 PPT FOR 2016
ES6 PPT FOR 2016
 

Semelhante a QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe

SECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON'2016. Иовлев Роман, JDI is UI Automation FutureSECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON'2016. Иовлев Роман, JDI is UI Automation FutureSECON
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGAndrey Rebrov
 
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.TKConf
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf Conference
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about AtlasArtem Sokovets
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euAndrei Solntsev
 
MyBatis на практике
MyBatis на практикеMyBatis на практике
MyBatis на практикеVitebsk Miniq
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumUladzimir Kryvenka
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS developmentIvan Trifonov
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
ненавязчивый Java Script алексей сергеев
ненавязчивый Java Script   алексей сергеевненавязчивый Java Script   алексей сергеев
ненавязчивый Java Script алексей сергеевMedia Gorod
 

Semelhante a QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe (20)

SECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON'2016. Иовлев Роман, JDI is UI Automation FutureSECON'2016. Иовлев Роман, JDI is UI Automation Future
SECON'2016. Иовлев Роман, JDI is UI Automation Future
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
 
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about Atlas
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.eu
 
Crazy owl yii1=> yii2
Crazy owl yii1=> yii2Crazy owl yii1=> yii2
Crazy owl yii1=> yii2
 
MyBatis на практике
MyBatis на практикеMyBatis на практике
MyBatis на практике
 
My batis
My batisMy batis
My batis
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
 
Введение в Django
Введение в DjangoВведение в Django
Введение в Django
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
DOM & jQuery
DOM & jQueryDOM & jQuery
DOM & jQuery
 
course js day 4
course js day 4course js day 4
course js day 4
 
ненавязчивый Java Script алексей сергеев
ненавязчивый Java Script   алексей сергеевненавязчивый Java Script   алексей сергеев
ненавязчивый Java Script алексей сергеев
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 

Mais de QAFest

QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилин
QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилинQA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилин
QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилинQAFest
 
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The Future
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The FutureQA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The Future
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The FutureQAFest
 
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...QAFest
 
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...QAFest
 
QA Fest 2019. Никита Галкин. Как зарабатывать больше
QA Fest 2019. Никита Галкин. Как зарабатывать большеQA Fest 2019. Никита Галкин. Как зарабатывать больше
QA Fest 2019. Никита Галкин. Как зарабатывать большеQAFest
 
QA Fest 2019. Сергей Пирогов. Why everything is spoiled
QA Fest 2019. Сергей Пирогов. Why everything is spoiledQA Fest 2019. Сергей Пирогов. Why everything is spoiled
QA Fest 2019. Сергей Пирогов. Why everything is spoiledQAFest
 
QA Fest 2019. Сергей Новик. Между мотивацией и выгоранием
QA Fest 2019. Сергей Новик. Между мотивацией и выгораниемQA Fest 2019. Сергей Новик. Между мотивацией и выгоранием
QA Fest 2019. Сергей Новик. Между мотивацией и выгораниемQAFest
 
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...QAFest
 
QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...
QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...
QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...QAFest
 
QA Fest 2019. Иван Крутов. Bulletproof Selenium Cluster
QA Fest 2019. Иван Крутов. Bulletproof Selenium ClusterQA Fest 2019. Иван Крутов. Bulletproof Selenium Cluster
QA Fest 2019. Иван Крутов. Bulletproof Selenium ClusterQAFest
 
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...QAFest
 
QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...
QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...
QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...QAFest
 
QA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automation
QA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automationQA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automation
QA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automationQAFest
 
QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...
QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...
QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...QAFest
 
QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...
QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...
QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...QAFest
 
QA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях IT
QA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях ITQA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях IT
QA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях ITQAFest
 
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложении
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложенииQA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложении
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложенииQAFest
 
QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...
QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...
QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...QAFest
 
QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...
QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...
QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...QAFest
 
QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22
QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22
QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22QAFest
 

Mais de QAFest (20)

QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилин
QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилинQA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилин
QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилин
 
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The Future
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The FutureQA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The Future
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The Future
 
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...
 
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
 
QA Fest 2019. Никита Галкин. Как зарабатывать больше
QA Fest 2019. Никита Галкин. Как зарабатывать большеQA Fest 2019. Никита Галкин. Как зарабатывать больше
QA Fest 2019. Никита Галкин. Как зарабатывать больше
 
QA Fest 2019. Сергей Пирогов. Why everything is spoiled
QA Fest 2019. Сергей Пирогов. Why everything is spoiledQA Fest 2019. Сергей Пирогов. Why everything is spoiled
QA Fest 2019. Сергей Пирогов. Why everything is spoiled
 
QA Fest 2019. Сергей Новик. Между мотивацией и выгоранием
QA Fest 2019. Сергей Новик. Между мотивацией и выгораниемQA Fest 2019. Сергей Новик. Между мотивацией и выгоранием
QA Fest 2019. Сергей Новик. Между мотивацией и выгоранием
 
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...
 
QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...
QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...
QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...
 
QA Fest 2019. Иван Крутов. Bulletproof Selenium Cluster
QA Fest 2019. Иван Крутов. Bulletproof Selenium ClusterQA Fest 2019. Иван Крутов. Bulletproof Selenium Cluster
QA Fest 2019. Иван Крутов. Bulletproof Selenium Cluster
 
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
 
QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...
QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...
QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...
 
QA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automation
QA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automationQA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automation
QA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automation
 
QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...
QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...
QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...
 
QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...
QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...
QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...
 
QA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях IT
QA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях ITQA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях IT
QA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях IT
 
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложении
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложенииQA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложении
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложении
 
QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...
QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...
QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...
 
QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...
QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...
QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...
 
QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22
QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22
QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22
 

QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe