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

You code sucks, let's fix it
You code sucks, let's fix itYou code sucks, let's fix it
You code sucks, let's fix itRafael Dohms
 
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
 
Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredElias Nogueira
 
Kiss PageObjects [01-2017]
Kiss PageObjects [01-2017]Kiss PageObjects [01-2017]
Kiss PageObjects [01-2017]Iakiv Kramarenko
 
Karate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made SimpleKarate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made SimpleVodqaBLR
 
What is WebElement in Selenium | Web Elements & Element Locators | Edureka
What is WebElement in Selenium | Web Elements & Element Locators | EdurekaWhat is WebElement in Selenium | Web Elements & Element Locators | Edureka
What is WebElement in Selenium | Web Elements & Element Locators | EdurekaEdureka!
 
Object Calisthenics Applied to PHP
Object Calisthenics Applied to PHPObject Calisthenics Applied to PHP
Object Calisthenics Applied to PHPGuilherme Blanco
 
Playwright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern WebPlaywright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern WebApplitools
 
Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass SlidesNir Kaufman
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
Easy tests with Selenide and Easyb
Easy tests with Selenide and EasybEasy tests with Selenide and Easyb
Easy tests with Selenide and EasybIakiv Kramarenko
 
Type Driven Development with TypeScript
Type Driven Development with TypeScriptType Driven Development with TypeScript
Type Driven Development with TypeScriptGarth Gilmour
 
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!
 
Karate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingKarate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingRoman Liubun
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南Shengyou Fan
 
Introduction Django
Introduction DjangoIntroduction Django
Introduction DjangoWade Austin
 

What's hot (20)

You code sucks, let's fix it
You code sucks, let's fix itYou code sucks, let's fix it
You code sucks, let's fix it
 
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
 
Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssured
 
Kiss PageObjects [01-2017]
Kiss PageObjects [01-2017]Kiss PageObjects [01-2017]
Kiss PageObjects [01-2017]
 
Karate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made SimpleKarate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made Simple
 
What is WebElement in Selenium | Web Elements & Element Locators | Edureka
What is WebElement in Selenium | Web Elements & Element Locators | EdurekaWhat is WebElement in Selenium | Web Elements & Element Locators | Edureka
What is WebElement in Selenium | Web Elements & Element Locators | Edureka
 
Object Calisthenics Applied to PHP
Object Calisthenics Applied to PHPObject Calisthenics Applied to PHP
Object Calisthenics Applied to PHP
 
Playwright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern WebPlaywright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern Web
 
Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass Slides
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
TestNG
TestNGTestNG
TestNG
 
Easy tests with Selenide and Easyb
Easy tests with Selenide and EasybEasy tests with Selenide and Easyb
Easy tests with Selenide and Easyb
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Test NG Framework Complete Walk Through
Test NG Framework Complete Walk ThroughTest NG Framework Complete Walk Through
Test NG Framework Complete Walk Through
 
Type Driven Development with TypeScript
Type Driven Development with TypeScriptType Driven Development with TypeScript
Type Driven Development with TypeScript
 
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...
 
Karate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testingKarate - powerful and simple framework for REST API automation testing
Karate - powerful and simple framework for REST API automation testing
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
 
Introduction Django
Introduction DjangoIntroduction Django
Introduction Django
 
Selenium
SeleniumSelenium
Selenium
 

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 для профи