SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium  Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium Zoe Gilbert
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data BindingDuy Khanh
 
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...Edureka!
 
Java Basics
Java BasicsJava Basics
Java BasicsSunil OS
 
Learning jQuery in 30 minutes
Learning jQuery in 30 minutesLearning jQuery in 30 minutes
Learning jQuery in 30 minutesSimon Willison
 
Setting up Page Object Model in Automation Framework
Setting up Page Object Model in Automation FrameworkSetting up Page Object Model in Automation Framework
Setting up Page Object Model in Automation Frameworkvaluebound
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIhabib_786
 
Class 3 - PHP Functions
Class 3 - PHP FunctionsClass 3 - PHP Functions
Class 3 - PHP FunctionsAhmed Swilam
 
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and moreSymfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and moreRyan Weaver
 
Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018André Luiz Forchesatto
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introductionJonathan Holloway
 
Angular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP ServicesAngular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP ServicesWebStackAcademy
 

Was ist angesagt? (20)

Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium  Page Object Model and Implementation in Selenium
Page Object Model and Implementation in Selenium
 
jQuery
jQueryjQuery
jQuery
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
Javascript and DOM
Javascript and DOMJavascript and DOM
Javascript and DOM
 
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
 
Java Basics
Java BasicsJava Basics
Java Basics
 
JQuery UI
JQuery UIJQuery UI
JQuery UI
 
Modern JS with ES6
Modern JS with ES6Modern JS with ES6
Modern JS with ES6
 
Learning jQuery in 30 minutes
Learning jQuery in 30 minutesLearning jQuery in 30 minutes
Learning jQuery in 30 minutes
 
jQuery
jQueryjQuery
jQuery
 
Setting up Page Object Model in Automation Framework
Setting up Page Object Model in Automation FrameworkSetting up Page Object Model in Automation Framework
Setting up Page Object Model in Automation Framework
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
JQuery selectors
JQuery selectors JQuery selectors
JQuery selectors
 
Class 3 - PHP Functions
Class 3 - PHP FunctionsClass 3 - PHP Functions
Class 3 - PHP Functions
 
Vue.js for beginners
Vue.js for beginnersVue.js for beginners
Vue.js for beginners
 
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and moreSymfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
 
Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018
 
Angular Directives
Angular DirectivesAngular Directives
Angular Directives
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Angular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP ServicesAngular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP Services
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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