Selenium
Что это
Selenium – инструмент для автоматизируемого управления браузера(драйвер браузера).
Основные разделы
Selenium WebDriver
Selenium RC
Selenium Server
Selenium Grid
Selenium IDE
Общая информация
Webelement - абстракция над, веб элементом.
By - абстракция над, локатором веб элементом.
Ожидания
- implicit(не явные):
manage.timeouts().pageLoadTimeout(60, TimeUnit.Second() - ожидание загрузки страницы.
manage.timeouts().setScriptTimeout() - ожидание выполнения Java Script команд.
manage.timeouts().implicitWait() - ожидание загрузки элемента.
- explicit(явные) - через объект WebDriverWait
WaitWebDriver wait = new WebDriverWait(driver, 5).withMessage("")
wait.until(ExpectedConditions.visibilityof(driver.findElement(By.id("table"))));
- частные
Web driver
- get(String) - получить и открыть страницу.
- getTitle() - получить название вкладки.
- getCurrentUrl() - получить URL.
- findElement
- findElements
- close()
- quite()
- getWindowHandle()
- switchTo - переключение между окнами.
XPath
XPath (XML Path Language) — язык запросов к элементам XML или XHTML документа, реализующий навигацию по DOM.
Если вы выстраиваете поисковые запросы в цепочку, то используйте «.//» для того, чтобы ограничить поиск
среди потомков элемента.
* — обозначает любое имя или набор символов
/html/body/*/span
«/» - Абсолютный путь
«//» - Относительный путь
Оси - основа запросов XPath и их обязательная часть.
Предикаты — это необязательная часть, заключаемая в квадратные скобки, в которой могут содержаться оси,
условия проверки, функции и операторы.
Оси
- ancestor:: — возвращает множество предков.
- ancestor-or-self:: — возвращает множество предков и текущий элемент.
- attribute:: — возвращает множество атрибутов текущего элемента.
- child:: — возвращает множество потомков на один уровень ниже.
- descendant:: — возвращает полное множество потомков.
- descendant-or-self:: — возвращает полное множество потомков и текущий элемент.
- following:: — возвращает необработанное множество, ниже текущего элемента.
- following-sibling:: — возвращает множество элементов на том же уровне, следующих за текущим.
- namespace:: — возвращает множество имеющее пространство имён (то есть присутствует атрибут xmlns).
- parent:: — возвращает предка на один уровень назад.
- preceding:: — возвращает множество обработанных элементов исключая множество предков.
- preceding-sibling:: — возвращает множество элементов на том же уровне, предшествующих текущему.
- self:: — возвращает текущий элемент.
Сокращения
- attribute:: — можно заменить на «@»
- child:: — часто просто опускают
- descendant:: — можно заменить на «.//»
- parent:: — можно заменить на «..»
- 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] |