SlideShare a Scribd company logo
Software quality assurance days
18 Международная конференция
по вопросам качества ПО
sqadays.com
Москва. 27–28 ноября 2015
Матвеев Сергей
ЗАО «КИВИ». Москва, Россия
Selenium, а давай подождем?
Selenium, а давай подождем?
О себе
В тестировании более 3 лет
Занимаюсь front-end и back-end
тестами, а так же нагрузочным
тестированием
Люблю организовывать
процессы и вдохновлять людей
2
Selenium, а давай подождем?
Selenium, а давай подождем?
3
Selenium, а давай подождем?
Схема простейшего теста
Подождем
элемент
Взаимодействие
с элементом
Подождем
результат
Проверим
результат
4
Selenium, а давай подождем?
Простейшее ожидание
public void sleep() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void sleep(long time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Продвинутые методики:
5
Selenium, а давай подождем?
Почему это плохо?
1. Тесты не стали стабильнее
2. Увеличение времени на
поддержку
3. Увеличение времени
прохождения тестового
набора
4. «Временное решение»
станет вечным
5. Увеличение кода тестовых
методов
6
Selenium, а давай подождем?
«Временное решение» станет вечным
form.typeValue(value);
page.waitSecond();
Assert.assertTrue(form.dataOnlineIsVisible());
Следующий commit:
form.typeValue(value);
page.waitSecond();
page.waitSecond();
page.waitSecond();
page.waitSecond();
Assert.assertTrue(form.dataOnlineIsVisible());
7
Selenium, а давай подождем?
Увеличение кода тестовых методов
link = “Боевики"
leftMenu.choose(link);
assertTrue(!content.isEmpty);
Так?
link = «Боевики"
leftMenu.choose(link);
sleep();
assertTrue(!content.isEmpty);
… или так?
public void choose(String link) {
driver.findElement(By.linkText(link)).click();
sleep();
}
8
Selenium, а давай подождем?
Состояния элемента
Не найден
Есть, видимый, нельзя
взаимодействовать
Есть, но невидимый
Есть, видимый, можно
взаимодействовать
Был, но удален из DOM
«Алексей Баранцев. Все секреты и тайны Selenium 2.0»
9
Selenium, а давай подождем?
Имплицитные ожидания (неявные)
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
element = driver.findElement(By.id("sub"));
Когда они не работают:
1. Надо просто проверить наличие элемента
2. Нужно найти один элемент из двух
3. Подождать пока элемент исчезнет
10
Selenium, а давай подождем?
Эксплицитные ожидания (явные)
Супер связка WebDriverWait + ExpectedCondition
new WebDriverWait(driver, 30).until(visibilityOfAllElementsLocatedBy(By.id("subb")));
11
Selenium, а давай подождем?
Что можно подождать?
Класс ExpectedConditions:
Смена заголовка страницы
wait.until(titles(«Заголовок");
Появление элемента
wait.until(presenceOfAllElementsLocatedBy(locator));
Видимость элемента
wait.until(visibilityOfElementLocated(locator));
Удаление элемента из DOM
wait.until(stalenessOf(element));
Невидимость элемента
wait.until(invisibilityOfElementLocated(locator));
12
Selenium, а давай подождем?
Тонкая настройка
public class WebDriverWait extends FluentWait<WebDriver>
new WebDriverWait()
.withMessage(“Не дождались :-(”)
.pollingEvery(200, TimeUnit.MILLISECONDS)
.withTimeout(10,TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class)
13
Selenium, а давай подождем?
Собственные условия ожидания
static ExpectedCondition<Boolean> display(final By by) {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver webDriver) {
return webDriver.findElement(by).isDisplayed();
}
};
}
14
static Predicate<WebElement> isElementDisplay() {
return new Predicate<WebElement>() {
@Override
public boolean apply(WebElement element) {
return element.isDisplayed();
}
};
}
Selenium, а давай подождем?
Прочие ожидания
• Frame
• Window
• Alert
• Загрузка страницы
15
Selenium, а давай подождем?
Alert
wait().until(ExpectedConditions.alertIsPresent());
Команда driver.switchTo().alert(); в FF будет ждать 2 секунды, если alert нет.
Любое действие может закончиться с UnhandledAlertException
16
Selenium, а давай подождем?
Окна
17
Selenium, а давай подождем?
Ожидание окна с html контентом
ExpectedCondition<String> windowWithCorrectH1(final String h1) {
return new ExpectedCondition<String>() {
@Override
public String apply(WebDriver driver) {
String mainWindow = driver.getWindowHandle();
String foundWindow = null;
Set<String> otherWindows = driver.getWindowHandles();
for(String window : otherWindows) {
try {
driver.switchTo().window(window);
if(driver.findElement(By.tagName("h1")).getText().equals(h1)) {
foundWindow = window;
break;
}
} catch (WebDriverException e) {
}
}
driver.switchTo().window(mainWindow);
return foundWindow;
}
};
}
18
Selenium, а давай подождем?
Ожидание появления любого нового окна
ExpectedCondition<String> newWindow(final Set<String> currentWindows) {
return new ExpectedCondition<String>() {
@Override
public String apply(WebDriver driver) {
Set<String> newWindows = driver.getWindowHandles();
newWindows.removeAll(currentWindows);
if (newWindows.size() > 0) {
return (String)newWindows.toArray()[0];
} else {
return null;
}
}
};
}
...
Set<String> windows = driver.getWindowHandles();
click();
new WebDriverWait(driver,10).until(newWindow(windows));
...
19
Selenium, а давай подождем?
Ожидание загрузки страницы
Selenium использует свойство document.readyState для определения момента
окончания загрузки страницы.
20
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(CapabilityType.PAGE_LOAD_STRATEGY,"eager");
• normal
• eager
• none
Виды стратегий:
Selenium, а давай подождем?
Как все это использовать?
21
Selenium, а давай подождем?
Как все это использовать?
driver.findElement(search).sendKeys("mts");
clickEnter();
Assert.assertTrue(isProvidersPresent());
driver.findElement(search).sendKeys("банки");
clickEnter();
Assert.assertTrue(isProvidersPresent());
22
Selenium, а давай подождем?
Как все это использовать?
driver.findElement(search).sendKeys("mts");
clickEnter();
Assert.assertTrue(isProvidersPresent());
driver.findElement(search).sendKeys("банки");
clickEnter();
Assert.assertTrue(isProvidersPresent());
if(isProvidersPresent()) {
wait.until(ExpectedConditions.stalenessOf(driver.findElement(By.cssSelector(provider)));
}
23
Selenium, а давай подождем?
Как все это использовать?
driver.findElement(search).sendKeys("mts");
clickEnter();
Assert.assertTrue(isProvidersPresent());
driver.findElement(search).sendKeys("банки");
clickEnter();
Assert.assertTrue(isProvidersPresent());
WebElement provider = driver.findElement(By.cssSelector(provider));
wait.until(ExpectedConditions.stalenessOf(provider));
24
Selenium, а давай подождем?
Как все это использовать?
Тест не дождался нового провайдера
25
Selenium, а давай подождем?
Как все это использовать?
driver.findElement(search).sendKeys("mts");
clickEnter();
Assert.assertTrue(isProvidersPresent());
WebElement provider = driver.findElement(By.cssSelector(provider));
driver.findElement(search).sendKeys("банки");
clickEnter();
wait.until(ExpectedConditions.stalenessOf(provider));
Assert.assertTrue(isProvidersPresent());
wait.until(visibilityOfAllElementsLocatedBy(providerLocator));
wait.until(visibilityOfAllElementsLocatedBy(providerLocator));
26
Selenium, а давай подождем?
Зачем все это нужно?
27
Selenium, а давай подождем?
Убрал все sleep();
28

More Related Content

What's hot

автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumvyacheslavmaslov
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"SQALab
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформыSQALab
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
QA Fest 2017. Яна Кокряшкина. Интеграция автоматизированных тестов с инструме...
QA Fest 2017. Яна Кокряшкина. Интеграция автоматизированных тестов с инструме...QA Fest 2017. Яна Кокряшкина. Интеграция автоматизированных тестов с инструме...
QA Fest 2017. Яна Кокряшкина. Интеграция автоматизированных тестов с инструме...QAFest
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveSQALab
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работыPaul Stashevsky
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIPavel Asanov
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumvyacheslavmaslov
 
Человекопонятные отчёты
Человекопонятные отчётыЧеловекопонятные отчёты
Человекопонятные отчётыbearoff
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
 
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...CodeFest
 
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...lshevtsov
 
Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияMatvey Malkov
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиSQALab
 

What's hot (19)

автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
 
Automation testing desktop applications
Automation testing desktop applicationsAutomation testing desktop applications
Automation testing desktop applications
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
QA Fest 2017. Яна Кокряшкина. Интеграция автоматизированных тестов с инструме...
QA Fest 2017. Яна Кокряшкина. Интеграция автоматизированных тестов с инструме...QA Fest 2017. Яна Кокряшкина. Интеграция автоматизированных тестов с инструме...
QA Fest 2017. Яна Кокряшкина. Интеграция автоматизированных тестов с инструме...
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
 
Человекопонятные отчёты
Человекопонятные отчётыЧеловекопонятные отчёты
Человекопонятные отчёты
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
Selenium rc
Selenium rcSelenium rc
Selenium rc
 
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
 
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
 
Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложения
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 

Viewers also liked

Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовSQALab
 
Тестирование инсталляторов
Тестирование инсталляторовТестирование инсталляторов
Тестирование инсталляторовSQALab
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...SQALab
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникSQALab
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium SQALab
 
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...SQALab
 
Как «сварить» Pairwise и не пуститься во все тяжкие
Как «сварить» Pairwise и не пуститься во все тяжкиеКак «сварить» Pairwise и не пуститься во все тяжкие
Как «сварить» Pairwise и не пуститься во все тяжкиеSQALab
 
Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?OdessaQA
 
Автоматизация тестирования: доступна каждому или удел избранных?
Автоматизация тестирования: доступна каждому или удел избранных?Автоматизация тестирования: доступна каждому или удел избранных?
Автоматизация тестирования: доступна каждому или удел избранных?SQALab
 
Автоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийSQALab
 
Успешный тестировщик. Путь профессионала
Успешный тестировщик. Путь профессионалаУспешный тестировщик. Путь профессионала
Успешный тестировщик. Путь профессионалаSQALab
 
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейКак 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейSQALab
 
Нагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховИлья Кожухов
 
Оценки тестирования - полезные и условные метрики
Оценки тестирования - полезные и условные метрикиОценки тестирования - полезные и условные метрики
Оценки тестирования - полезные и условные метрикиSQALab
 

Viewers also liked (15)

Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
Тестирование инсталляторов
Тестирование инсталляторовТестирование инсталляторов
Тестирование инсталляторов
 
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
Автоматизация визуального тестирования адаптивного дизайна на примере Galen F...
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
 
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
Что ждет тестировщиков при организации процесса тестирования Enterprise-проду...
 
Как «сварить» Pairwise и не пуститься во все тяжкие
Как «сварить» Pairwise и не пуститься во все тяжкиеКак «сварить» Pairwise и не пуститься во все тяжкие
Как «сварить» Pairwise и не пуститься во все тяжкие
 
Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?Нагрузочное тестирование. С чего начать?
Нагрузочное тестирование. С чего начать?
 
Автоматизация тестирования: доступна каждому или удел избранных?
Автоматизация тестирования: доступна каждому или удел избранных?Автоматизация тестирования: доступна каждому или удел избранных?
Автоматизация тестирования: доступна каждому или удел избранных?
 
Автоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегий
 
Успешный тестировщик. Путь профессионала
Успешный тестировщик. Путь профессионалаУспешный тестировщик. Путь профессионала
Успешный тестировщик. Путь профессионала
 
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователейКак 3 тестировщика играючи тестируют приложение для 10млн пользователей
Как 3 тестировщика играючи тестируют приложение для 10млн пользователей
 
Нагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter Кожухов
 
Оценки тестирования - полезные и условные метрики
Оценки тестирования - полезные и условные метрикиОценки тестирования - полезные и условные метрики
Оценки тестирования - полезные и условные метрики
 
Death By PowerPoint Rus
Death By PowerPoint RusDeath By PowerPoint Rus
Death By PowerPoint Rus
 

Similar to Selenium, а давай подождем?

(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочинеAlexei Lupan
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
 
Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumSQALab
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumSQALab
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Testing with Selenium
Testing with SeleniumTesting with Selenium
Testing with SeleniumOSLL
 
Приемочные тесты на огурце
Приемочные тесты на огурцеПриемочные тесты на огурце
Приемочные тесты на огурцеAlexander Byndyu
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETMikhail Shcherbakov
 
(Seleniumcamp) Selenium RC for QA Engineer
(Seleniumcamp) Selenium RC for QA Engineer(Seleniumcamp) Selenium RC for QA Engineer
(Seleniumcamp) Selenium RC for QA EngineerYan Alexeenko
 
Белым по черному или альтернативное использование unit-тестирования
Белым по черному или альтернативное использование unit-тестированияБелым по черному или альтернативное использование unit-тестирования
Белым по черному или альтернативное использование unit-тестированияSQALab
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAndrey Rebrov
 
Современные возможности ES-2015 (Promise, Generators, Proxy).
Современные возможности ES-2015 (Promise, Generators, Proxy).Современные возможности ES-2015 (Promise, Generators, Proxy).
Современные возможности ES-2015 (Promise, Generators, Proxy).Valtech Ukraine
 
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)Web Tech Fun
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый стартAntonio
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Konstantin slisenko - Spring Framework
Konstantin slisenko - Spring FrameworkKonstantin slisenko - Spring Framework
Konstantin slisenko - Spring Frameworkbeloslab
 
Spock - the next stage of unit testing
Spock - the next stage of unit testingSpock - the next stage of unit testing
Spock - the next stage of unit testingjugkaraganda
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: PromisesRAMBLER&Co
 

Similar to Selenium, а давай подождем? (20)

(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
(Seleniumcamp) Selenium IDE как артефакт пикника на обочине
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе Selenium
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и Selenium
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Testing with Selenium
Testing with SeleniumTesting with Selenium
Testing with Selenium
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
 
Приемочные тесты на огурце
Приемочные тесты на огурцеПриемочные тесты на огурце
Приемочные тесты на огурце
 
Простой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NETПростой и кросс-платформенный WEB-сервер на .NET
Простой и кросс-платформенный WEB-сервер на .NET
 
(Seleniumcamp) Selenium RC for QA Engineer
(Seleniumcamp) Selenium RC for QA Engineer(Seleniumcamp) Selenium RC for QA Engineer
(Seleniumcamp) Selenium RC for QA Engineer
 
Белым по черному или альтернативное использование unit-тестирования
Белым по черному или альтернативное использование unit-тестированияБелым по черному или альтернативное использование unit-тестирования
Белым по черному или альтернативное использование unit-тестирования
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
 
Современные возможности ES-2015 (Promise, Generators, Proxy).
Современные возможности ES-2015 (Promise, Generators, Proxy).Современные возможности ES-2015 (Promise, Generators, Proxy).
Современные возможности ES-2015 (Promise, Generators, Proxy).
 
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
 
Telerik Web aii
Telerik Web aiiTelerik Web aii
Telerik Web aii
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Konstantin slisenko - Spring Framework
Konstantin slisenko - Spring FrameworkKonstantin slisenko - Spring Framework
Konstantin slisenko - Spring Framework
 
Spock - the next stage of unit testing
Spock - the next stage of unit testingSpock - the next stage of unit testing
Spock - the next stage of unit testing
 
RDSDataSource: Promises
RDSDataSource: PromisesRDSDataSource: Promises
RDSDataSource: Promises
 

More from SQALab

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировкуSQALab
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаSQALab
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиSQALab
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALab
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALab
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testingSQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииSQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовSQALab
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовSQALab
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsSQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеSQALab
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALab
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестированиеSQALab
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"SQALab
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных системSQALab
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросSQALab
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...SQALab
 

More from SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 

Selenium, а давай подождем?

  • 1. Software quality assurance days 18 Международная конференция по вопросам качества ПО sqadays.com Москва. 27–28 ноября 2015 Матвеев Сергей ЗАО «КИВИ». Москва, Россия Selenium, а давай подождем?
  • 2. Selenium, а давай подождем? О себе В тестировании более 3 лет Занимаюсь front-end и back-end тестами, а так же нагрузочным тестированием Люблю организовывать процессы и вдохновлять людей 2
  • 3. Selenium, а давай подождем? Selenium, а давай подождем? 3
  • 4. Selenium, а давай подождем? Схема простейшего теста Подождем элемент Взаимодействие с элементом Подождем результат Проверим результат 4
  • 5. Selenium, а давай подождем? Простейшее ожидание public void sleep() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } public void sleep(long time) { try { Thread.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } Продвинутые методики: 5
  • 6. Selenium, а давай подождем? Почему это плохо? 1. Тесты не стали стабильнее 2. Увеличение времени на поддержку 3. Увеличение времени прохождения тестового набора 4. «Временное решение» станет вечным 5. Увеличение кода тестовых методов 6
  • 7. Selenium, а давай подождем? «Временное решение» станет вечным form.typeValue(value); page.waitSecond(); Assert.assertTrue(form.dataOnlineIsVisible()); Следующий commit: form.typeValue(value); page.waitSecond(); page.waitSecond(); page.waitSecond(); page.waitSecond(); Assert.assertTrue(form.dataOnlineIsVisible()); 7
  • 8. Selenium, а давай подождем? Увеличение кода тестовых методов link = “Боевики" leftMenu.choose(link); assertTrue(!content.isEmpty); Так? link = «Боевики" leftMenu.choose(link); sleep(); assertTrue(!content.isEmpty); … или так? public void choose(String link) { driver.findElement(By.linkText(link)).click(); sleep(); } 8
  • 9. Selenium, а давай подождем? Состояния элемента Не найден Есть, видимый, нельзя взаимодействовать Есть, но невидимый Есть, видимый, можно взаимодействовать Был, но удален из DOM «Алексей Баранцев. Все секреты и тайны Selenium 2.0» 9
  • 10. Selenium, а давай подождем? Имплицитные ожидания (неявные) driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); element = driver.findElement(By.id("sub")); Когда они не работают: 1. Надо просто проверить наличие элемента 2. Нужно найти один элемент из двух 3. Подождать пока элемент исчезнет 10
  • 11. Selenium, а давай подождем? Эксплицитные ожидания (явные) Супер связка WebDriverWait + ExpectedCondition new WebDriverWait(driver, 30).until(visibilityOfAllElementsLocatedBy(By.id("subb"))); 11
  • 12. Selenium, а давай подождем? Что можно подождать? Класс ExpectedConditions: Смена заголовка страницы wait.until(titles(«Заголовок"); Появление элемента wait.until(presenceOfAllElementsLocatedBy(locator)); Видимость элемента wait.until(visibilityOfElementLocated(locator)); Удаление элемента из DOM wait.until(stalenessOf(element)); Невидимость элемента wait.until(invisibilityOfElementLocated(locator)); 12
  • 13. Selenium, а давай подождем? Тонкая настройка public class WebDriverWait extends FluentWait<WebDriver> new WebDriverWait() .withMessage(“Не дождались :-(”) .pollingEvery(200, TimeUnit.MILLISECONDS) .withTimeout(10,TimeUnit.SECONDS) .ignoring(NoSuchElementException.class) 13
  • 14. Selenium, а давай подождем? Собственные условия ожидания static ExpectedCondition<Boolean> display(final By by) { return new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver webDriver) { return webDriver.findElement(by).isDisplayed(); } }; } 14 static Predicate<WebElement> isElementDisplay() { return new Predicate<WebElement>() { @Override public boolean apply(WebElement element) { return element.isDisplayed(); } }; }
  • 15. Selenium, а давай подождем? Прочие ожидания • Frame • Window • Alert • Загрузка страницы 15
  • 16. Selenium, а давай подождем? Alert wait().until(ExpectedConditions.alertIsPresent()); Команда driver.switchTo().alert(); в FF будет ждать 2 секунды, если alert нет. Любое действие может закончиться с UnhandledAlertException 16
  • 17. Selenium, а давай подождем? Окна 17
  • 18. Selenium, а давай подождем? Ожидание окна с html контентом ExpectedCondition<String> windowWithCorrectH1(final String h1) { return new ExpectedCondition<String>() { @Override public String apply(WebDriver driver) { String mainWindow = driver.getWindowHandle(); String foundWindow = null; Set<String> otherWindows = driver.getWindowHandles(); for(String window : otherWindows) { try { driver.switchTo().window(window); if(driver.findElement(By.tagName("h1")).getText().equals(h1)) { foundWindow = window; break; } } catch (WebDriverException e) { } } driver.switchTo().window(mainWindow); return foundWindow; } }; } 18
  • 19. Selenium, а давай подождем? Ожидание появления любого нового окна ExpectedCondition<String> newWindow(final Set<String> currentWindows) { return new ExpectedCondition<String>() { @Override public String apply(WebDriver driver) { Set<String> newWindows = driver.getWindowHandles(); newWindows.removeAll(currentWindows); if (newWindows.size() > 0) { return (String)newWindows.toArray()[0]; } else { return null; } } }; } ... Set<String> windows = driver.getWindowHandles(); click(); new WebDriverWait(driver,10).until(newWindow(windows)); ... 19
  • 20. Selenium, а давай подождем? Ожидание загрузки страницы Selenium использует свойство document.readyState для определения момента окончания загрузки страницы. 20 DesiredCapabilities cap = new DesiredCapabilities(); cap.setCapability(CapabilityType.PAGE_LOAD_STRATEGY,"eager"); • normal • eager • none Виды стратегий:
  • 21. Selenium, а давай подождем? Как все это использовать? 21
  • 22. Selenium, а давай подождем? Как все это использовать? driver.findElement(search).sendKeys("mts"); clickEnter(); Assert.assertTrue(isProvidersPresent()); driver.findElement(search).sendKeys("банки"); clickEnter(); Assert.assertTrue(isProvidersPresent()); 22
  • 23. Selenium, а давай подождем? Как все это использовать? driver.findElement(search).sendKeys("mts"); clickEnter(); Assert.assertTrue(isProvidersPresent()); driver.findElement(search).sendKeys("банки"); clickEnter(); Assert.assertTrue(isProvidersPresent()); if(isProvidersPresent()) { wait.until(ExpectedConditions.stalenessOf(driver.findElement(By.cssSelector(provider))); } 23
  • 24. Selenium, а давай подождем? Как все это использовать? driver.findElement(search).sendKeys("mts"); clickEnter(); Assert.assertTrue(isProvidersPresent()); driver.findElement(search).sendKeys("банки"); clickEnter(); Assert.assertTrue(isProvidersPresent()); WebElement provider = driver.findElement(By.cssSelector(provider)); wait.until(ExpectedConditions.stalenessOf(provider)); 24
  • 25. Selenium, а давай подождем? Как все это использовать? Тест не дождался нового провайдера 25
  • 26. Selenium, а давай подождем? Как все это использовать? driver.findElement(search).sendKeys("mts"); clickEnter(); Assert.assertTrue(isProvidersPresent()); WebElement provider = driver.findElement(By.cssSelector(provider)); driver.findElement(search).sendKeys("банки"); clickEnter(); wait.until(ExpectedConditions.stalenessOf(provider)); Assert.assertTrue(isProvidersPresent()); wait.until(visibilityOfAllElementsLocatedBy(providerLocator)); wait.until(visibilityOfAllElementsLocatedBy(providerLocator)); 26
  • 27. Selenium, а давай подождем? Зачем все это нужно? 27
  • 28. Selenium, а давай подождем? Убрал все sleep(); 28