Selenium Webdriver для Java автоматизаторов
  • Introduction
  • Selenium Webdriver. Введение
    • WebDriver. Обзор и принцип работы
    • Основные методы Selenium Webdriver API
    • Типы локаторов
    • Ожидания
    • Пример использования Webdriver API
  • Selenium WebDriver. Сложные вопросы.
    • Локаторы. CSS, XPATH, JQUERY.
    • WebDriver API. Сложные взаимодействия.
    • Контроль за ходом теста. Кастомные ожидания, попапы, алерты, Iframes.
    • DDT подход
  • Page Object Pattern. Архитектура тестового проекта.
    • Использование паттерна Page Object.
    • Альтернативные Page Object подходы.
    • Вспомогательные инструменты.
    • Уровни абстракции. Создание кастомных элементов.
    • Архитектура. Основные элементы.
  • Selenium Grid и "headless" браузеры
    • Использование HtmlUnit драйвера в автотестировании
    • "Headless" тестирование с PhantomJS и SlimerJS
    • Grid. Настройка и использование.
  • Selenium Webdriver. Проблемные моменты
    • Вспомогательные инструменты
    • Basic Authentification Window
    • Загрузка файла
    • Отправление файла (upload)
    • Логгирование в Selenium Webdriver
    • Скриншоты элементов и работа с изображением
  • Selenium Webdriver. Тестирование HTML5 веб приложений
    • Автоматизация Canvas элементов.
    • Автоматизация видео плеера.
    • Работа с web storage.
  • Selenium Webdriver. Расширение инструмента
    • Selenium "обертки" и расширения
    • Thucydides
    • Geb
    • Selenide
    • Репортинг
  • Selenium Webdriver. Тестирование клиентской производительности
    • Navigation timing API
    • Browser Mob Proxy
    • DynaTrace
    • HttpWatch
  • Selenium Webdriver. Behavior-Driven Development.
    • Обзор методологии и инструментов на Java.
    • Cucumber JVM + Selenium Webdriver.
    • JBehave + Selenium Webdriver.
  • Selenium Webdriver. Тестирование на мобильных браузерах
    • Обзор инструментов
    • Установка и настройка Appium. Принципы и основы работы с инструментом
    • Запуск тестов на десктоп и мобильных браузерах
  • Облачные сервисы.
    • Обзор рынка облачных сервисов для тестирования.
    • SauceLabs. Услуги и планы.
    • Настройка тестов для запуска в SauceLabs.
    • Использование Sauce Connect и Travis CI.
  • Continuous Integration
    • Что такое Continuous Integration
    • Распространенные CI-серверы
    • Jenkins - установка и настройка
Powered by GitBook
On this page
  • CSS локаторы
  • XPath локаторы
  • jQuery локаторы
  1. Selenium WebDriver. Сложные вопросы.

Локаторы. CSS, XPATH, JQUERY.

Ранее мы уже изучали локаторы, с помощью которых можно идентифицировать элементы на web странице. В этой главе мы пристальнее рассморим наиболее сложные из них, а именно CSS, Xpath и jQuery локаторы.

CSS локаторы

Многие браузеры реализуют CSS движок, чтобы разработчики смогли применять CSS таблицы в своих проектах. Что позволяет разделить между собой контент страницы с её оформлением. В CSS есть паттерны, согласно которым стили, создаваемые разработчиком, применяются к элементам страницы (DOM). Эти паттерны называются локаторы (selectors). Selenium WebDriver использует тот же принцип для нахождения элементов. И он намного быстрее, чем поиск элементов на основе XPath, который мы рассмотрим чуть позже.

Давайте рассморим несколько базовых локаторов с использованием CSS:

Абсолютный путь:

WebElement userName = driver.findElement(By.cssSelector("html body div div form input"));

Относительный путь:

WebElement userName = driver.findElement(By.cssSelector("input"));

Поиск непосредственного дочернего элемента:

WebElement userName = driver.findElement(By.cssSelector("div>a"));

Поиск дочернего элемента любого уровня:

WebElement userName = driver.findElement(By.cssSelector("div a"));

Поиск по ID элемента:

WebElement userName = driver.findElement(By.cssSelector("input#username"));

//или

WebElement userName = driver.findElement(By.cssSelector("#username"));

Поиск по классу:

WebElement userName = driver.findElement(By.cssSelector("input.classname"));

//или

WebElement userName = driver.findElement(By.cssSelector(".classname"));

Поиск по значениям атрибутов html тегов:

WebElement previousButton = driver.findElement(By.cssSelector("img[alt='Previous']"));

Поиск по названию атрибутов:

List<WebElement> imagesWithAlt = driver.findElements(By.cssSelector("img[alt]"));

Поиск по началу строки:

WebElement previousButton = driver.findElement(By.cssSelector("header[id^='page-']"));

Поиск по окончанию строки:

WebElement previousButton = driver.findElement(By.cssSelector("header[id$='page-']"));

Поиск по частичному совпадению строки:

WebElement previousButton = driver.findElement(By.cssSelector("header[id*='page-']"));

XPath локаторы

XPath (XML path) - это язык для нодов (nodes) в XML документе. Так как многие браузеры поддерживают XHTML, то мы можем использовать XPath для нахождения элементов на web страницах.

Важным различием между CSS и XPath локаторами является то, что, используя XPath, мы можем производить перемещение как в глубину DOM иерархии, так и возвращаться назад. Что же касается CSS, то тут мы можем двигаться только в глубину. Это значит, что с XPath можем найти родительский элемент, по дочернему.

Рассмотрим некоторые примеры:

Абсолютный путь:

WebElement userName = driver.findElement(By.xpath("html/body/div/div/form/input"));

Относительный путь:

WebElement userName = driver.findElement(By.xpath("//input"));

Поиск непосредственного дочернего элемента:

WebElement userName = driver.findElement(By.xpath("//div/a"));

Поиск дочернего элемента любого уровня:

WebElement userName = driver.findElement(By.xpath("//div//a"));

Поиск элемента по тексту:

WebElement userName = driver.findElement(By.xpath(".//*[text()='Первая ссылка']/.."));

Поиск по значениям атрибутов:

WebElement userName = driver.findElement(By.xpath("//input[@id='username']"));

Поиск по названию атрибутов:

List<WebElement> imagesWithAlt = driver.findElements(By.xpath ("img[@alt]"));

Поиск родительского элемента:

WebElement userName = driver.findElement(By.xpath("//input[@id='username']/.."));

jQuery локаторы

Мы можем находить элементы, используя jQuery локаторы. Они используются, когда CSS локаторы изначально не поддерживаются браузерами.

Первое, что нужно сделать для их использования - проверить, поддерживает ли приложение jQuery библиотеку. Если нет, то мы сами должны её добавить:

private static void addJQuery (JavascriptExecutor js) {

    String script = "";

    boolean needInjection = (Boolean)(js.executeScript("return this.$ === undefined;"));
    if(needInjection) {
        URL u = Resources.getResource("jquery.js");
        try {
            script = Resources.toString(u, Charsets.UTF_8);
        } catch(IOException e) {
            e.printStackTrace();
        }
        js.executeScript(script);
    }
}

Теперь нам нужен объект, с помощью которого мы смогли бы работать с JavaScript и, как следствие, с jQuery. Для этого мы будем использовать JavaScriptExecutor

WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();

JavascriptExecutor js = (JavascriptExecutor)driver;

Теперь всё готово, для того, чтобы мы могли использовать jQuery локаторы.

WebElement element = (WebElement) js.executeScript("return jQuery.find('#hplogo');");

А вот и сам локатор:

'#hplogo'

Так же мы можем использовать CSS локаторы внутри jQuery локаторов:

jQuery.find('input.someclass')
PreviousSelenium WebDriver. Сложные вопросы.NextWebDriver API. Сложные взаимодействия.

Last updated 6 years ago