SlideShare a Scribd company logo
1 of 85
Selenide
для профи
Andrei Solntsev
twitter.com/asolntsev
1. Алгоритм Селенида
2. Пэджъ объжекты
3. Свой вебдрайвер
4. Несколько драйверов
5. Прокси
6. Трюки с JavaScript
7. Самопальные команды
План
UI Test
@Test
public void userCanLogin() {
open("http://localhost:8080/login");
$(By.name("user.name")).setValue("john");
$("#submit").click();
$(".menu").shouldHave(text("Hello, John!"));
}
UI Test
@Test
public void userCanLogin() {
open("http://localhost:8080/login");
$(By.name("user.name")).setValue("john");
$("#submit").click();
$(".menu").shouldHave(text("Hello, John!"));
}
UI Test
@Test
public void userCanLogin() {
open("http://localhost:8080/login");
$(By.name("user.name")).setValue("john");
$("#submit").click();
$(".menu").shouldHave(text("Hello, John!"));
}
UI Test
@Test
public void userCanLogin() {
open("http://localhost:8080/login");
$(By.name("user.name")).setValue("john");
$("#submit").click();
$(".menu").shouldHave(text("Hello, John!"));
}
UI Test
@Test
public void userCanLogin() {
open("http://localhost:8080/login");
$(By.name("user.name")).setValue("john");
$("#submit").click();
$(".menu").shouldHave(text("Hello, John!"));
}
Главный секрет:
Selenide
очень простой
Каждый из вас может это сделать.
НО
незачем!
Каждый может
построить
такую дорогу
через болото
НО
нафига?
Самый Главный Алгоритм
void click() {
}
Самый Главный Алгоритм
void click() {
do {
} while (прошло меньше N секунд);
}
Самый Главный Алгоритм
void click() {
do {
try {
}
catch (Exception e) {
}
} while (прошло меньше N секунд);
}
Самый Главный Алгоритм
void click() {
do {
try {
webdriver.findElement().click();
}
catch (Exception e) {
}
} while (прошло меньше N секунд);
}
Самый Главный Алгоритм
void click() {
do {
try {
webdriver.findElement().click();
}
catch (Exception e) {
sleep(100 мс)
}
} while (прошло меньше N секунд);
}
Дьявол в деталях
void click() {
do {
try {
webdriver.findElement().click();
}
catch (Exception e) {
sleep(100 мс)
}
} while (прошло меньше N секунд);
}
Какие ошибки ловить?
● Некоторые требуют
мгновенного
падения
Дьявол в деталях
void click() {
do {
try {
webdriver.findElement().click();
}
catch (Exception e) {
sleep(100 мс)
}
} while (прошло меньше N секунд);
}
А сколько тут ждать?
● Для коллекций
надо ждать
больше?
Дьявол в деталях
void click() {
do {
try {
webdriver.findElement().click();
}
catch (Exception e) {
sleep(100 мс)
}
} while (прошло меньше N секунд);
return ???;
}
Результат ок или не ок?
● Например,
$.shouldNot(exist);
Дьявол в деталях
void click() {
do {
try {
webdriver.findElement().click();
}
catch (Exception e) {
sleep(100 мс)
}
} while (прошло меньше N секунд);
return …;
}
В какой момент делать
скриншот?
Пэдж обжекты
Selenide пэдж обжект
public class GooglePage {
public void search(String query) {
$(By.name(“q”))
.val(queue)
.pressEnter();
}
}
● Фактори не нужны.
● Аннотации не нужны.
● Просто программируй!
Можно с полем By
public class GooglePage {
private By query = By.name(“q”);
public void search(String query) {
$(query)
.val(queue)
.pressEnter();
}
}
@Test {
var page = new GooglePage();
}
Можно с полем SelenideElement
public class GooglePage {
private SelenideElement query = $(By.name(“q”));
public void search(String query) {
query
.val(queue)
.pressEnter();
}
}
@Test {
var page = page(GooglePage.class);
}
Селенидовский контейнер
public class ТипаHtmlElementsPage {
SelenideElement container = $(“....”);
SelenideElement username = container.$(“...”);
SelenideElement password = container.$(“...”);
public void login(String un, String pwd) {
username.val(un);
password.val(pwd);
}
И контейнеры не нужны!
Есть и контейнеры
class ТипаHtmlElementsPage {
@FindBy(id = "status")
StatusBlock status;
}
class StatusBlock extends ElementsContainer {
@FindBy(className = "username")
SelenideElement username;
@FindBy(className = "username")
SelenideElement username;
} Повторюсь:
Я не уверен, что это нужно.
Нав
игац
ия
по
DO
Mу
Поиск родителей
● $.parent()
● $.closest(“table”)
Поиск родителей и детей
● $.parent()
● $.closest(“table”)
$(“table td[data-foo=’bar’]”)
.closest(“table”)
.find(“tr”, 4)
.find(byText(“КЛЕТКО”)
.click();
Свой вебдрайвер
Есть два способа:
1. setWebDriver
2. WebdriverProvider
Есть два способа:
setWebDriver WebdriverProvider
Не рекомендую! Рекомендую
● Сам думай, когда
закрыть
● Заботишься
только о том, КАК
открыть браузер
setWebDriver
@Before
public void setUp() {
this.browser = new ChromeDriver(........);
WebDriverRunner.setWebDriver(browser);
}
@After
public void tearDown() {
WebDriverRunner.closeWebDriver();
browser.quit();
WebdriverProvider
@Before
public void setUp() {
Configuration.browser = MyWDProvider.class.getName();
open(“https://google.com”);
}
@After
public void tearDown() {
// ничего не нужно
}
WebdriverProvider
static class MyWDProvider implements WebDriverProvider {
@Override
public WebDriver createDriver(DesiredCapabilities сapabilities) {
return new ChromeDriver(desiredCapabilities);
}
}
WebdriverProvider
static class MyWDProvider implements WebDriverProvider {
@Override
public WebDriver createDriver(DesiredCapabilities сapabilities) {
ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
options.addArguments("--proxy-bypass-list=<-loopback>");
options.merge(desiredCapabilities);
return new ChromeDriver(options);
}
}
Два браузера
Два браузера
Selenide хранит один браузер на поток.
Для параллельных тестов.
Два браузера
Поток 1:
open(“/user”);
$(“a”).should(appear);
Поток 2:
open(“/admin”);
$(“#active-users”).should(...);
А вот это низя:
Поток 1:
Configuration.timeout = 200;
open(“/user”);
$(“a”).should(appear);
Поток 2:
Configuration.timeout = 9999999;
open(“/admin”);
$(“#active-users”).should(...);
@Test
public void userLogin() {
open(“http://some.site.com”);
$(“#username”).val(“petja”).pressEnter();
$(“#name”).shouldHave(text(“Hello, Petja!”);
}
И так низя:
@Test
public void userLogin() {
open(“http://some.site.com”);
$(“#username”).val(“petja”).pressEnter();
$(“#name”).shouldHave(text(“Hello, Petja!”);
open(“http://some.site.com/admin”);
$(“.block[data-username=’petja’]”).click();
refresh();
$(“#name”).shouldHave(text(“Goodbye, Petja!”);
}
И так низя:
@Test
public void userLogin() {
var b1 = new SelenideDriver();
b1.open(“http://some.site.com”);
b1.$(“#username”).val(“petja”).pressEnter();
b1.$(“#name”).shouldHave(text(“Hello, Petja!”);
var b2 = new SelenideDriver();
b2.open(“http://some.site.com/admin”);
b2.$(“.block[data-username=’petja’]”).click();
b1.$(“#name”).shouldHave(text(“Goodbye, Petja!”);
Selenide 5.0
var b1 = new SelenideDriver(
new SelenideConfig()
.timeout(6000)
.browser("chrome")
.headless(true)
);
var b2 = new SelenideDriver(
new SelenideConfig()
.timeout(90_000)
.browser("firefox")
.proxyEnabled(true)
);
Selenide 5.0
Как будто бы
всё хорошо?
@Test
public void userLogin() {
var b1 = open(“http://some.site.com”);
b1.$(“#username”).val(“petja”).pressEnter();
b1.$(“#name”).shouldHave(text(“Hello, Petja!”);
var b2 = open(“http://some.site.com/admin”);
$(“.block[data-username=’petja’]”).click();
b1.refresh();
b1.$(“#name”).shouldHave(text(“Goodbye, Petja!”);
}
Проблемка!
Прокси
$.download()
@Test
public void userCanViewTerminalDetailsAsPDF() throws FileNotFoundException {
…
File detailsAsPdf = $("#print-pdf").download();
}
$.download()
@Test
public void userCanViewTerminalDetailsAsPDF() throws FileNotFoundException {
File detailsAsPdf = $("#print-pdf").download();
PDF pdf = new PDF(pdfFile);
assertThat(pdf, containsText("PP028004"));
assertThat(pdf, containsText("Торговый терминал"));
assertThat(pdf, containsTextCaseInsensitive("VeriFone VX 810"));
}
Между прочим,
github.com/codeborne/pdf-test
github.com/codeborne/xls-test
$.download()
Есть два варианта:
Configuration.fileDownload = HTTPGET;
Configuration.fileDownload = PROXY;
Для $.download...
Selenide запускает свой прокси-сервер.
Он умеет:
● Скачивать файлы
● Подменять заголовки
● Инжектить JS код на страницу
● И т.д. и т.п.
Пример прокси:
@Before public void setUp() {
Configuration.proxyEnabled = true;
open("https://google.com");
}
@Test void canAddInterceptorsToProxyServer() {
SelenideProxyServer proxy = getSelenideProxy();
proxy.addRequestFilter("proxy-usages.request", (request,
contents, messageInfo) -> {
String url = messageInfo.getUrl();
log(url + "nn" + contents.getTextContents());
return null;
});
А тут вообще чума!
Можно подменить запрос!
@Test void canAddInterceptorsToProxyServer() {
SelenideProxyServer proxy = getSelenideProxy();
proxy.addRequestFilter("proxy-usages.request", ...);
proxy.addResponseFilter("proxy-usages.response",
(response, contents, messageInfo) -> {
String url = messageInfo.getUrl();
log(url + "nn" + contents.getTextContents());
}
});
Параллелизация
Люди запускают тесты в N потоков
Проблемы:
● Статические переменные
● Одновременный доступ к данным
● синхронизация
● И т.д.
● - ОШИБКИ!
Параллелизация
Запускать тесты в N процессов
pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkCount>3</forkCount>
<reuseForks>true</reuseForks>
</configuration>
</plugin>
Гораздо проще -
Запускать тесты в N процессов
buld.gradle:
test {
maxParallelForks = 5
}
Гораздо проще -
Трюки с JavaScript
эффективность
фседозволенность
Э -
Ф -
Выбрать дату
void setDateByName(String name, String date) {
executeJavaScript(
String.format("$('[name="%s"]').val('%s')",
name, date)
);
}
@Test {
setDateByName("recurrent.startDate", "16.01.2009");
}
Выбрать опцию в bootstrap select
void selectBS(WebElement select, String value) {
executeJavaScript(
"$(arguments[0]).val(arguments[1]).trigger('change')",
select, value);
}
@Test {
selectBS($(By.name("operationCode")), "11100");
}
Слайдер
void setMaxYearlyFee(int value) {
executeJavaScript(
"$('#sld').data('slider').value[0] = arguments[0];" +
"$('#sld').triggerHandler('slide');"
);
}
@Test {
setMaxYearlyFee(100);
}
Заигнорить чёртов confirm
public static void mockConfirm() {
executeJavaScript(
"window.confirm = function() {return true;};"
);
}
Чак Норрис
не отвечает “да” в confirm.
Это confirm отвечает “да”.
Контакты в мобильном
private void mockCordovaContactsAPI(String number) {
executeJavaScript(
"window.plugins = {" +
" contactNumberPicker: { " +
" pick: function(callback) {" +
" callback({" +
" phoneNumber:"" + number + """
" });}}}");
}
@Test {
mockCordovaContactsAPI("+79110080075");
}
Кол-во видимых элементов
@Test {
$$(".offer:visible").shouldHave(size(3));
}
@Test {
$$(".offer").filter(visible)
.shouldHave(size(3));
}
Selenium не умеет
Это м.б. медленно :(
Кол-во видимых элементов
int sizeOf(String cssSelector) {
Number count = executeJavaScript(
"return $(arguments[0]).length", cssSelector);
return count.intValue();
}
@Test {
assertEquals(1, sizeOf(".offer:visible"));
}
Из списка элементов исключить
другой список
List<String> страныИзЭксельки = ...;
List<String> страныСоСтраницы = $$(“td:nth-child(3)”)
.excludeWith(text(“text”))
.stream()
.map(el -> el.getText())
.collect(toList());
Это м.б. медленно :(
Из списка элементов исключить
другой список
List<String> страныИзЭксельки = ...;
List<String> страныСоСтраницы = executeJavascript(
"return Array.from(" +
" document.querySelectorAll('td:nth-child(3)')" +
").map(x => x.textContent)");
А вот это быстро
fast set value
Проблема:
1. $.sendKeys() медленный
2. Иногда $.sendKeys() не работает:
a. Элемент невидимый
b. Маска на поле
c. Какой-нибудь хитрый JS
d. Какой-нибудь компонент типа DatePicker
На помощь приходит JavaScript!
Режим “fast set value”
mvn -Dselenide.fastSetValue=true
@Before public void setUp() {
Configuration.fastSetValue = true;
}
или
Режим “fast set value”
И тогда $.setValue() использует JavaScript
который гораздо быстрее!
Ты сам можешь выбирать:
$.setValue(“john”) - быстро
$.sendKeys(“john”) - если быстро никак
● Автозаполнение
● Автоформатирование
● Хитрые JS обработчики
● JS почему-то не работает
● ...
Самопальные команды
Слайдер
void setMaxYearlyFee(WebElement slider, int value) {
executeJavaScript(...);
}
@Test {
setMaxYearlyFee($(“#slider”), 100);
}
А хочется вот так:
@Test {
$(“#slider”).setMaxYearlyFee(100);
}
@Test {
setMaxYearlyFee($(“#slider”), 100);
}
А ещё круче вот так:
@Test {
$(“#slider”)
.setMaxYearlyFee(100)
.setMinYearlyFee(15)
.selectFee(50)
}
Так можно в Kotlin и Groovy
Но не в Java
Но можно так:
@Test {
$(“#slider”)
.execute(setMaxYearlyFee(100))
.execute(setMinYearlyFee(15))
.execute(selectFee(50))
}
Command<SelenideElement> setMaxYearlyFee(int fee) {
return (proxy, locator, args) -> {
executeJavaScript(".... " + fee);
return proxy;
};
}
См. https://ru.selenide.org/2019/09/02/selenide-5.3.0/
Selenide
и
мобильники
Selenide для мобильников (Appium)
@Test public void mobileCalculator() {
$(By.name("2")).click();
$(By.name("+")).click();
$(By.name("4")).click();
$(By.name("=")).click();
$(By.className("android.widget.EditText"))
.shouldHave(text("6"));
}
Можно без аннотаций:
https://github.com/selenide-examples
/selenide-appium
Пэдж обжекты и Appium
class MobileCalculatorPage {
@AndroidFindBy(id = "op_add")
@iOSFindBy(id = “op_add”);
SelenideElement plus;
}
А можно и с аннотациями:
https://github.com/selenide
/selenide-appium
Люди!
RTFT!
Read the fucking TESTS!
github.com / selenide / src / test / java / integration
Вы можете
влиять
на этот процесс
Андрей Солнцев
@asolntsev
ru.selenide.org
Спасибо за фотки:
1. https://stories.genvagula.com/my-magical-estonia-500aafd5b2c0
2. https://www.facebook.com/stan.vasilyev
3. https://i-love-tallinn.livejournal.com/306474.html
4. https://www.facebook.com/lyosha.razin
5. https://www.facebook.com/ttrk19/

More Related Content

What's hot

Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring SecurityDzmitry Naskou
 
Your code sucks, let's fix it
Your code sucks, let's fix itYour code sucks, let's fix it
Your code sucks, let's fix itRafael Dohms
 
Appium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAppium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAlina Dolgikh
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해beom kyun choi
 
The definitive guide to java agents
The definitive guide to java agentsThe definitive guide to java agents
The definitive guide to java agentsRafael Winterhalter
 
The lazy programmer's guide to writing thousands of tests
The lazy programmer's guide to writing thousands of testsThe lazy programmer's guide to writing thousands of tests
The lazy programmer's guide to writing thousands of testsScott Wlaschin
 
Object Calisthenics Applied to PHP
Object Calisthenics Applied to PHPObject Calisthenics Applied to PHP
Object Calisthenics Applied to PHPGuilherme Blanco
 
기본적인 테스트에 대한 pytest 자동화 접근
기본적인 테스트에 대한 pytest 자동화 접근기본적인 테스트에 대한 pytest 자동화 접근
기본적인 테스트에 대한 pytest 자동화 접근SangIn Choung
 
Collection v3
Collection v3Collection v3
Collection v3Sunil OS
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Ryosuke Uchitate
 
엘라스틱서치 실무 가이드_202204.pdf
엘라스틱서치 실무 가이드_202204.pdf엘라스틱서치 실무 가이드_202204.pdf
엘라스틱서치 실무 가이드_202204.pdf한 경만
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and SlingLo Ki
 
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신Sungchul Park
 
Selenium webdriver interview questions and answers
Selenium webdriver interview questions and answersSelenium webdriver interview questions and answers
Selenium webdriver interview questions and answersITeLearn
 
Scalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureScalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureNicholas Zakas
 
Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...
Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...
Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...Edureka!
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring DataArturs Drozdovs
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Scott Wlaschin
 

What's hot (20)

Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring Security
 
JDBC
JDBCJDBC
JDBC
 
Your code sucks, let's fix it
Your code sucks, let's fix itYour code sucks, let's fix it
Your code sucks, let's fix it
 
Appium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAppium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон Семенченко
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
The definitive guide to java agents
The definitive guide to java agentsThe definitive guide to java agents
The definitive guide to java agents
 
The lazy programmer's guide to writing thousands of tests
The lazy programmer's guide to writing thousands of testsThe lazy programmer's guide to writing thousands of tests
The lazy programmer's guide to writing thousands of tests
 
Object Calisthenics Applied to PHP
Object Calisthenics Applied to PHPObject Calisthenics Applied to PHP
Object Calisthenics Applied to PHP
 
기본적인 테스트에 대한 pytest 자동화 접근
기본적인 테스트에 대한 pytest 자동화 접근기본적인 테스트에 대한 pytest 자동화 접근
기본적인 테스트에 대한 pytest 자동화 접근
 
Collection v3
Collection v3Collection v3
Collection v3
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門
 
엘라스틱서치 실무 가이드_202204.pdf
엘라스틱서치 실무 가이드_202204.pdf엘라스틱서치 실무 가이드_202204.pdf
엘라스틱서치 실무 가이드_202204.pdf
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and Sling
 
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
 
JQuery UI
JQuery UIJQuery UI
JQuery UI
 
Selenium webdriver interview questions and answers
Selenium webdriver interview questions and answersSelenium webdriver interview questions and answers
Selenium webdriver interview questions and answers
 
Scalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureScalable JavaScript Application Architecture
Scalable JavaScript Application Architecture
 
Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...
Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...
Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring Data
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
 

Similar to QA Fest 2019. Андрей Солнцев. Selenide для профи

Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euAndrei Solntsev
 
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
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.TKConf
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about AtlasArtem Sokovets
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человекаNETFest
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb SpockBohdan Danyliuk
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumUladzimir Kryvenka
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловGeeksLab Odessa
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverIgor Khrol
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS developmentIvan Trifonov
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый стартAntonio
 

Similar to QA Fest 2019. Андрей Солнцев. Selenide для профи (20)

Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.eu
 
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
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Let’s talk about Atlas
Let’s talk about AtlasLet’s talk about Atlas
Let’s talk about Atlas
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
 
Gwt jug basic
Gwt jug basicGwt jug basic
Gwt jug basic
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
 
course js day 4
course js day 4course js day 4
course js day 4
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 

More from 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
 

More from 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 Fest 2019. Андрей Солнцев. Selenide для профи