com.codeborne.selenide.SelenideElement [src]
Класс SelenideElement - обёртка вокруг Selenium WebElement, которая добавляет несколько весьма полезных методов.
Cам объект SelenideElement, который возвращается методом $
- является прокси-элементом. В момент создания с помощью $
реальный элемент на странице не ищется. Зато потом при любой попытке совершить с прокси-элементом какое-то действие или проверку - прокси-элемент получает последнюю актуальную "версию" реального элемента со страницы (типа WebElement) и "проксирует" ей указанное действие или проверку.
Во-первых, это позволяет с помощью Selenide эффективно автоматизировать тестирование современных динамических веб приложений.
Во-вторых, с помощью таких прокси-элементов, можно конструировать объекты страниц в соответствии с шаблоном PageObject. За счет того, что элемент не ищется сразу в момент создания обьекта SelenideElement, мы можем сохранить его в поле обьекта PageObject еще до открытия страници:
Для SelenideElement определенны методы следующего типа:
методы поиска внутренних элементов
а точнее методы создания прокси-элементов представляющих элементы внутри данного
методы-проверки состояния элемента - assertions
методы-действия над элементом
методы получения статусов элементов и значений их атрибутов
другие
Все они имеют дополнительные встроенные особенности для их более удобного использования. Большинство из них имеют встроенные неявные ожидания. Это позволяет просто работать с динамически загружаемыми элементами не опускаясь до уровня техничских деталей настройки дополнительных явных ожиданий.
Методы поиска внутренних элементов
find(String cssSelector) | $(String cssSelector)
find(By) | $(By)
findAll(String cssSelector) | $$(String cssSelector)
findAll(By) | $$(By)
Здесь $ и $$ просто лаконичные "алиасы" (синонимы) для соответствующих команд.
Все эти методы возвращают "прокси-элементы", то есть не ищут реальные элементы до тех пор пока не будет вызвано какое то действие над элементом (например .click()
)
Таким образом, можно пошагово уточнять - какой внутренний элемент необходимо получить внутри внешнего элемента, строя цепочку последовательних вызовов, например:
И при этом можно сохранить "цепочку поиска" любой длины в переменную, независимо от того, загружена ли страница на момент инициализации переменной, или даже открыт ли браузер, например:
Методы-проверки состояния элемента - assertions
Методы-проверки - assertions - инициируют для прокси-элемента поиск актуальной версии элемента на странице, совершают проверку по предикату ("условию" - объекту-кондишену класса Condition), и возвращают объекты SelenideElement, позволяя использовать цепочки вызовов.
should(Condition) | shouldBe(Condition) | shouldHave(Condition)
shouldNot(Condition) | shouldNotBe(Condition) | shouldNotHave(Condition)
Рекомендуется выбирать такой метод, чтобы строка кода легко воспринималась, как обычная фраза, e.g. :
Проверки играют роль явных ожиданий (explicit waits) в Selenide. Они ждут до удовлетворения условия (visible, enabled, text("some text")) пока не истечет таймаут (значение Configuration.timeout
, которое установлено по умолчанию в 4000 миллисекунд).
Можно использовать проверки явно - с целью ожиданий нужного состояния у элементов перед действием, e.g. $("#submit").shouldBe(enabled).click();
Есть версии явных ожиданий с указанием таймаута:
waitUntil(Condition, milliseconds)
waitWhile(Condition, milliseconds)
Методы-действия над элементом
Действия над элементами
click()
doubleClick()
contextClick()
hover()
setValue(String) | val(String)
pressEnter()
pressEscape()
pressTab()
selectRadio(String value)
selectOption(String)
append(String)
dragAndDropTo(String)
...
инициируют для прокси-элемента поиск актуальной версии элемента на странице, и совершают соответствующее действие.
Действия имеют встроенные неявные ожидания (implicit waits) до видимости элемента пока не истечет таймаут (значение Configuration.timeout
, которое установлено по умолчанию в 4000 миллисекунд).
Следовательно код $("#submit").shouldBe(visible).click()
избыточен и будет достаточно $("#submit").click()
.
Большинство действий также возвращают обьект SelenideElement, позволяя использовать цепочки вызовов, e.g. $("#edit").setValue("text").pressEnter();
.
Методы получения статусов элементов и значений их атрибутов
Инициируют для прокси-элемента поиск актуальной версии элемента на странице и имеют разную логику неявных ожиданий в зависимости от контекста:
Выполняется ожидание до появления элемента в DOM:
getValue() | val()
data()
attr(String)
text() // возвращает "видимый текст на странице"
innerText() // возвращает "текст элемента в DOM"
getSelectedOption()
getSelectedText()
getSelectedValue()
Нет ожидания :
isDisplayed() //возвращает false, если элемент либо невидимый, либо его нет в DOM
exists() //возвращает true, если элемент есть в DOM, иначе - false
Другие полезные команды
uploadFromClasspath(String fileName)
download()
toWebElement()
uploadFile(File...)
Last updated
Was this helpful?