Selenium

Проработать

  1. Золотой Selenide. Мои лучшие практики по тестированию

Что это

Selenium – инструмент для автоматизируемого управления браузера(драйвер браузера).

Основные разделы

Selenium WebDriver

Selenium RC

Selenium Server

Selenium Grid

Selenium IDE

Общая информация

Webelement - абстракция над, веб элементом.

By - абстракция над, локатором веб элементом.

Ожидания

  1. implicit(не явные):
    manage.timeouts().pageLoadTimeout(60, TimeUnit.Second() - ожидание загрузки страницы.
    manage.timeouts().setScriptTimeout() - ожидание выполнения Java Script команд.
    manage.timeouts().implicitWait() - ожидание загрузки элемента.
  2. explicit(явные) - через объект WebDriverWait
    WaitWebDriver wait = new WebDriverWait(driver, 5).withMessage("")
    wait.until(ExpectedConditions.visibilityof(driver.findElement(By.id("table"))));
  3. частные

Web driver

  1. get(String) - получить и открыть страницу.
  2. getTitle() - получить название вкладки.
  3. getCurrentUrl() - получить URL.
  4. findElement
  5. findElements
  6. close()
  7. quite()
  8. getWindowHandle()
  9. switchTo - переключение между окнами.

XPath

XPath (XML Path Language) — язык запросов к элементам XML или XHTML документа, реализующий навигацию по DOM.

Если вы выстраиваете поисковые запросы в цепочку, то используйте «.//» для того, чтобы ограничить поиск среди потомков элемента.

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

/html/body/*/span

«/» - Абсолютный путь

«//» - Относительный путь

Оси - основа запросов XPath и их обязательная часть.

Предикаты — это необязательная часть, заключаемая в квадратные скобки, в которой могут содержаться оси, условия проверки, функции и операторы.

Оси

Сокращения

  1. attribute:: — можно заменить на «@»
  2. child:: — часто просто опускают
  3. descendant:: — можно заменить на «.//»
  4. parent:: — можно заменить на «..»
  5. self:: — можно заменить на «.»

Для приведенного выше примера /html/body/*/span

полный синтаксис будет иметь вид /child::html/child::body/child::*/child::span

XPath vs CSS path

Description XPath CSS path
Direct child //div/a div > a
Child or Sub Child //div//a div a
Id //div[@id='idValue']//a div#idValue a
Class //div[@class='classValue']//a div.classValue a
Attribute //form/input[@name='username'] form input[name='username']
Following sibling //li[@class='first']/following-sibling::li li.first + li
Multiple attributes //input[@name='continue' and @type='button'] input[name='continue'][type='button']
nth child //ul[@id='list']/li[4] ul#list li:nth-child(4)
First child //ul[@id='list']/li[1] ul#list li:first-child
Last child //ul[@id='list']/li[last()] ul#list li:last-child
Attribute contains //div[contains(@title,'Title')] div[title*="Title"]
Attribute starts with //input[starts-with(@name,'user')] input[name^="user"]
Attribute ends with //input[ends-with(@name,'name')] input[name$="name"]
With attribute //div[@title] div[title]