Selenium. Необходимые знания в программировании

Содержание

Слайд 2

Формат занятий Мало теории Много практики Минимально необходимые навыки Обратная связь приветствуется Домашние задания

Формат занятий

Мало теории
Много практики
Минимально необходимые навыки
Обратная связь приветствуется
Домашние задания

Слайд 3

Необходимые знания в программировании Основные типы переменных Циклы Условные операторы Статические

Необходимые знания в программировании

Основные типы переменных
Циклы
Условные операторы
Статические методы
Простейшее наследование (без инкапсуляции

и полиморфизма)
Слайд 4

Необходимый инстументарий Firefox FireBug FirePath Selenium IDE https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ IntelliJIDEA Community https://www.jetbrains.com/idea/download/#tabs_1=windows Библиотека Selenium Standalone Server http://www.seleniumhq.org/download/

Необходимый инстументарий

Firefox
FireBug
FirePath
Selenium IDE https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/
IntelliJIDEA Community https://www.jetbrains.com/idea/download/#tabs_1=windows
Библиотека Selenium Standalone

Server http://www.seleniumhq.org/download/
Слайд 5

План Часть 1 Selenium теория Идентификация элементов при помощи XPath Selenium

План

Часть 1
Selenium теория
Идентификация элементов при помощи XPath
Selenium IDE
Рекордер
Основные команды
Локаторы
Проверки
Ожидания
Задание

Часть 2
Selenium WebDriver
Создание

(импорт) проекта
Основные части автотеста. JUnit
Основные команды
Ожидание элементов, асинхронные действия
Проверки
Создание простого фреймворка
Задание
Слайд 6

Selenium Selenium - среда для тестирования web-приложений, выполняющая проверки средствами браузера

Selenium

Selenium - среда для тестирования web-приложений, выполняющая проверки средствами браузера

Selenium automates browsers.
Selenium RC
Selenium Grid
Selenium IDE
Selenium WebDriver
Selenium Server
Слайд 7

Принцип работы Selenium Selenium RC - использовал ядро, которое передавало браузеру

Принцип работы Selenium

Selenium RC - использовал ядро, которое передавало браузеру на

выполнение необходимые JavaScript-команды. Это обеспечивало некоторую кросбраузерность поскольку JavaScript выполняется, в значительной мере, одинаково в разных браузерах.
Selenium WebDriver – общается нативными средствами с каждым браузером (AndroidDriver, ChromeDriver, EventFiringWebDriver, FirefoxDriver, HtmlUnitDriver, InternetExplorerDriver, IPhoneDriver, PhantomJSDriver, RemoteWebDriver, SafariDriver )
Слайд 8

Идентификация элементов Хорошее решение для Firefox (FireBug + FirePath): FireBug https://getfirebug.com/

Идентификация элементов

Хорошее решение для Firefox (FireBug + FirePath):
FireBug https://getfirebug.com/
Просмотр и редактирование

HTML с применением изменений «на лету»
Дебаггер JavaScript
FirePath https://addons.mozilla.org/ru/firefox/addon/firepath/
Поиск на странице и автоматическое построение XPath
Подсветка самописных Xpath
“Инструменты разработчика” в Chrome
Слайд 9

XPath

XPath

Слайд 10

XPath. Важнейшие запросы * — обозначает любое имя или набор символов,

XPath. Важнейшие запросы

* — обозначает любое имя или набор символов, @* — любой

атрибут
[] — дополнительные условия выборки
/ — определяет уровень дерева
text() - Возвращает набор текстовых узлов;
contains(string, string) - Возвращает истину, если первая строка содержит вторую, иначе возвращает ложь.
or — логическое «или»
and — логическое «и»
= — логическое «равно»
Слайд 11

XPath. Примеры С применением индексов: html/body/div[4]/div[1]/div[3]/div[1]/ul/li[2]/span/a Внимание! Распространенная ошибка Одновременно к

XPath. Примеры

С применением индексов:
html/body/div[4]/div[1]/div[3]/div[1]/ul/li[2]/span/a
Внимание! Распространенная ошибка
Одновременно к нескольким элементам:
html/body/div[4]/div[1]/div[3]/div[1]/ul/li/span/a
(html/body/div[4]/div[1]/div[3]/div[1]/ul/li/span/a)[2]

– можно выбрать нужный по индексу, начиная с [1]
По значению атрибута определенного тега:
html/body/div[4]/div[1]/div[3]/div[1]/ul/li[@class='collapsible']/span/a
Слайд 12

XPath. Примеры По значению атрибута неопределенного тега: //span/*[@title='Эта страница защищена от

XPath. Примеры

По значению атрибута неопределенного тега:
//span/*[@title='Эта страница защищена от изменений, но

вы можете посмотреть и скопировать её исходный текст [Alt+Shift+e]']
По тексту:
//a[text()='Добро пожаловать']
По части текста :
//a[contains(text(),'Добро')]
С применением логики:
//a[contains(text(),'Добро') and contains(@title,'Википедия')]
Слайд 13

Selenium IDE Selenium IDE – плагин к Firefox, позволяющий осуществлять запись,

Selenium IDE

Selenium IDE – плагин к Firefox, позволяющий осуществлять запись,

редактирование и воспроизведение действий в браузере.
Слайд 14

Применимость Selenium IDE Простые тесты Простые сайты Не долгосрочная перспектива Рутина Тренировка, обучение

Применимость Selenium IDE

Простые тесты
Простые сайты
Не долгосрочная перспектива
Рутина

Тренировка, обучение
Слайд 15

Что понадобится для работы с Selenium IDE Mozilla Firefox Selenium IDE

Что понадобится для работы с Selenium IDE

Mozilla Firefox
Selenium IDE

Firebug + Firepath
Умение работать с XPath
Слайд 16

Тест кейс

Тест кейс

Слайд 17

Записанный рекордером тест

Записанный рекордером тест

Слайд 18

Основные действия Selenium IDE (Command) open(URL) – открыть страницу в браузере

Основные действия Selenium IDE (Command)

open(URL) – открыть страницу в браузере по

определенному адресу
click(locator)– клик по элементу
type(locator, value)– ввести значение в поле
select(selectLocator, optionLocator) – выбрать значение из выпадающего списка
selectWindow(windowID)– переключить фокус на другое окно
goBack() - вернуться на предыдущую страницу
close()– закрыть текущее окно
dragAndDropToObject(locatorOfObjectToBeDragged, locatorOfDragDestinationObject) – перемещение одного элемента на другой
Слайд 19

Локаторы Selenium IDE (Target) id –id элемента страницы; name –атрибут name

Локаторы Selenium IDE (Target)

id –id элемента страницы;
name –атрибут name элемента страницы;
xpath

–XPath выражение;
link – текст ссылки;
identifier –id элемента. Если по id элемент не найден, то поиск будет вестись по атрибуту name;
css – данный тип локаторов основан на описаниях таблиц стилей (CSS).
dom –DOM выражение;
Слайд 20

Локаторы Selenium IDE (Target) НАПРИМЕР:

Локаторы Selenium IDE (Target)

НАПРИМЕР:

Слайд 21

Проверки Selenium IDE Verify – просто проверка. Ошибка будет отмечена, но

Проверки Selenium IDE

Verify – просто проверка. Ошибка будет отмечена, но тест

продолжит выполняться Assert – заваливает и останавливает тест
Слайд 22

Проверки Selenium IDE verifyLocation(pattern)/ assertLocation(pattern) – проверить адрес текущей страницы. verifyTitle

Проверки Selenium IDE

verifyLocation(pattern)/ assertLocation(pattern) – проверить адрес текущей страницы.
verifyTitle (pattern)/

assertTitle (pattern)– проверить значение Title страницы.
verifyValue(locator, pattern) / assertValue (locator, pattern)– проверить значение элемента страницы.
verifyTextPresent(pattern) / assertTextPresent(pattern) – проверить, что страница содержит указанный в текст.
verifyElementPresent(locator) / assertElementPresent(locator) – проверить, есть ли на странице указанный элемент.
verifyVisible(locator)/ assertVisible(locator)– проверить видимость элемента
verifyAttribute(attributeLocator, pattern) / assertAttribute(attributeLocator, pattern) – проверить значение указанного атрибута
Слайд 23

Ожидания Selenium IDE waitForElementPresent(locator) – ожидание появления элемента на странице waitForTextPresent(pattern)

Ожидания Selenium IDE

waitForElementPresent(locator) – ожидание появления элемента на странице
waitForTextPresent(pattern) - ожидание

появления текста на странице
waitForVisible(locator) - ожидание видимости элемента
Слайд 24

Промежуточное задание Автоматизировать тест кейс:

Промежуточное задание

Автоматизировать тест кейс:

Слайд 25

Необходимый инстументарий для следующей части Firefox FireBug FirePath Selenium IDE https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/

Необходимый инстументарий для следующей части

Firefox
FireBug
FirePath
Selenium IDE https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/
IntelliJIDEA Community https://www.jetbrains.com/idea/download/#tabs_1=windows


Библиотека Selenium Standalone Server http://www.seleniumhq.org/download/
Слайд 26

Вопросы?

Вопросы?

Слайд 27

Selenium WebDriver

Selenium WebDriver

Слайд 28

Selenium WebDriver План: Настройка окружения. IDEA IDE Основные части автотеста. JUnit

Selenium WebDriver

План:
Настройка окружения. IDEA IDE
Основные части автотеста. JUnit
Простой тесткейс
Основные команды
Проверки
Ожидание элементов

явные и неявные
Фреймворк. Паттерн PageObject
Итоговое задание
Слайд 29

Selenium WebDriver Selenium WebDriver– позволяет взаимодействовать с браузерами их нативными средствами.

Selenium WebDriver

Selenium WebDriver– позволяет взаимодействовать с браузерами их нативными средствами.

Для каждого браузера свой WebDriver (AndroidDriver, ChromeDriver, EventFiringWebDriver, FirefoxDriver, HtmlUnitDriver, InternetExplorerDriver, IPhoneDriver, PhantomJSDriver, RemoteWebDriver, SafariDriver)
Слайд 30

Окружение для работы с WebDriver IDEA IDE Firefox FireBug FirePath

Окружение для работы с WebDriver

IDEA IDE
Firefox
FireBug
FirePath

Слайд 31

Почему IDEA IDE? Java Бесплатный Удобный Некоторые плагины работают лучше, чем, например, в Eclipse (Maven, Cucumber)

Почему IDEA IDE?

Java
Бесплатный
Удобный
Некоторые плагины работают лучше, чем,

например, в Eclipse (Maven, Cucumber)
Слайд 32

Создание тестового проекта в IDEA Используя экспортированный проект: Экспорт теста из

Создание тестового проекта в IDEA

Используя экспортированный проект:
Экспорт теста из Selenium

IDE в WebDriver в Java/JUnit4/WebDriver
Создание нового проекта в IDEA
Добавление результатов экспорта
Подключение библиотек
С нуля:
Создание нового проекта в IDEA
Создание структуры теста вручную (@Before, @After, @Test)
Подключение библиотек
Используя один из внутренних шаблонных проектов Ауриги:
Web + xUnit
Web + BDD
Слайд 33

Шаг 1

Шаг 1

Слайд 34

Шаг 2

Шаг 2

Слайд 35

Шаг 3

Шаг 3

Слайд 36

Шаг 4

Шаг 4

Слайд 37

Шаг 5

Шаг 5

Слайд 38

Шаг 6

Шаг 6

Слайд 39

Шаг 7

Шаг 7

Слайд 40

Шаг9

Шаг9

Слайд 41

Структура типичного теста c JUnit Инициализация (@Before). Действия, выполняемые перед каждым

Структура типичного теста c JUnit

Инициализация (@Before). Действия, выполняемые перед каждым

тестом. Например, старт браузера, открытие домашней страницы, логин
Тело (@Test). Сам тест
Завершение (@After). Действия, выполняемые после каждого теста. Например, закрытие браузера
Слайд 42

Основные команды WebDriver Объявление драйвера Поиск элементов Действия Навигация Действия с

Основные команды WebDriver

Объявление драйвера
Поиск элементов
Действия
Навигация
Действия с браузером
Действия с элементами
Проверки
Ожидания
Implicit Waits
Explicit Waits
Кастомные

Слайд 43

Объявление драйвера WebDriver driver = new FirefoxDriver(); WebDriver driver = new

Объявление драйвера

WebDriver driver = new FirefoxDriver();
WebDriver driver = new ChromeDriver();
WebDriver

driver = new InternetExplorerDriver();
Слайд 44

Поиск элементов WebElement element = driver.findElement(By. ) - Возвращает первый найденный

Поиск элементов

WebElement element = driver.findElement(By.<критерий поиска>) - Возвращает первый найденный элемент,

удовлетворяющий, условию поиска
driver.findElements(By.<критерий поиска>) - Возвращает все элементы, удовлетворяющие условию поиска
Основные методы поиска элементов:
driver.findElement(By.xpath()) – поиск элемента по Xpath
driver.findElement(By.id()) – поиск элемента по ID
driver.findElement(By.name(<имя>)) – поиск элемента по значению атрибута name
driver.findElement(By.linkText(<текст ссылки>)) – поиск элемента по тексту ссылки

Слайд 45

Действия. Навигация driver.navigate().to( ) - переход по URL driver.navigate().back() - переход

Действия. Навигация

driver.navigate().to() - переход по URL
driver.navigate().back() - переход назад
driver.navigate(). forward() -

переход вперед
driver.navigate(). refresh() - обновление

Слайд 46

Действия. Действия с браузером driver.close() - закрыть текущее окно. Закрывает браузер,

Действия. Действия с браузером

driver.close() - закрыть текущее окно. Закрывает браузер, если

нету больше открытых окон;
driver.quit() - выход из драйвера, закрытие всех окон связанных с ним
driver.getTitle() - возвращает Title текущей страницы;
driver.getCurrentUrl() - возвращает URL текущего окна
driver.getPageSource() - возвращает содержимое последней загруженной страницы

Слайд 47

Действия. Действия с элементами element.click() - одиночное нажатие по элементу element.getText()

Действия. Действия с элементами

element.click() - одиночное нажатие по элементу
element.getText() - возвращает

текст элемента
element.getAttribute(<название атрибута>) - возвращает значение указанного атрибута
element.isDisplayed() - является ли элемент видимым
element.isEnabled() - является ли элемент доступным
element.isSelected() - является ли элемент выбранным (чекбокс, радиобаттон)
element.sendKeys(<последовательность символов>) - послать элементу последовательность символов. Текстовых или функциональных клавиш

Пример:
element.sendKeys (“abcd” + Keys.TAB + “efgh”);
Слайд 48

Проверки Assert.fail( ) - завалить тест Assert.assertEquals( , , ) -

Проверки

Assert.fail(<необязательный текст ошибки>) - завалить тест
Assert.assertEquals(<необязательный текст ошибки>, <ожидаемое значение>, <фактическое

значение>) - сравнивает 2 объекта, 2 строки или 2 числа. Срабатывает при несовпадении
Assert.assertNotEquals(<необязательный текст ошибки>, <ожидаемое значение>, <фактическое значение>) - срабатывает при совпадении
Assert.assertTrue(<необязательный текст ошибки>, <выражение или булевое значение>) - срабатывает на ложном значении
Assert.assertFalse(<необязательный текст ошибки>, <выражение или булевое значение>) - срабатывает на правдивом значении

Пример:
Assert.assertEquals(“Текущее значение ” + cur + “ не равно фактическому” + fact, cur, fact);
Слайд 49

Ожидания. Explicit Waits Explicit Waits (явное ожидание) – готовое решение с

Ожидания. Explicit Waits

Explicit Waits (явное ожидание) – готовое решение с использованием

класса WebDriverWait. Представляет собой фактически циклическое ожидание указанного события. По умолчанию “WebDriverWait” вызывает “ExpectedCondition” каждые 500 миллисекунд до тех пор, пока условие не будет удовлетворено.
Ожидаемые события:
ExpectedConditions.visibilityOf(<элемент>) - видимость элемента
ExpectedConditions.presenceOfElementLocated(<локатор>) - наличие элемента
ExpectedConditions.textToBePresentInElement (<локатор>, <текст>) - текст элемента

Пример:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOf(element));
// Данный код будет либо выдаст исключение “TimeoutException” по прошествии 10 секунд, либо вернет найденный в течении 10 секунд элемент.
Слайд 50

Фреймворк. Паттерн PageObject Идея: Класс страницы представляет собой интерфейс, модель настоящей

Фреймворк. Паттерн PageObject

Идея:
Класс страницы представляет собой интерфейс, модель настоящей страницы
Профит:
Читабельность
Сопровождаемость. Изменения

интерфейса отражаются только в одном месте
Уменьшение дублирования
Правила:
В классе страницы содержатся ее контролы с локаторами и только типичные действия, осуществляемые на странице
Если страница большая, то ее можно логически разделить на разные классы
Избегать проверок внутри объекта страницы
Методы возвращают объекты других страниц
Слайд 51

Пример организации простого фреймворка

Пример организации простого фреймворка

Слайд 52

Разное

Разное

Слайд 53

Проблемы тестирования асинхронных приложений Проблема: в AJAX-ориентированных приложениях данные, передаваемые сервером,

Проблемы тестирования асинхронных приложений

Проблема: в AJAX-ориентированных приложениях данные, передаваемые сервером, затем

отображаются на странице без ее перезагрузки, обновляется только ее часть или же непосредственно измененный элемент.
Решение: активно использовать ожидания. При необходимости писать обертки. Не использовать тупо слипы, а ждать каких-то событий (видимости элемента, исчезновения элемента и т.п.)
Слайд 54

Итоговое задание Автоматизировать 5 тесткейсов: Клик по мозаичному шару «ВикипедиЯ» возвращает

Итоговое задание

Автоматизировать 5 тесткейсов:
Клик по мозаичному шару «ВикипедиЯ» возвращает на главную

страницу
Максимальное количество предложений предикативного ввода в поиске составляет 10 значений (проверить на примере ввода «а»)
Содержимое предложений предикативного ввода в поиске при вводе «аур» включает (могут быть и другие, но надо проверить, что есть хотя бы эти): Аур, Аура, Аурих, Аурано, Ауриго, Ауро, Ауреа
Слайд 55

Полезные сылки http://selenium2.ru/docs/selenium-ide.html http://docs.seleniumhq.org/docs/03_webdriver.jsp http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp http://automated-testing.info/knowledgebase/article/webdriver-osnovnye-komandy https://code.google.com/p/selenium/wiki/PageObjects

Полезные сылки

http://selenium2.ru/docs/selenium-ide.html
http://docs.seleniumhq.org/docs/03_webdriver.jsp
http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp
http://automated-testing.info/knowledgebase/article/webdriver-osnovnye-komandy
https://code.google.com/p/selenium/wiki/PageObjects