com.codeborne.selenide.ElementsCollection [src]
Объект этого класса также является прокси точно также как SelenideElement. Его можно получить с помощью вызова метода $$
, и он представляет список веб-элементов на странице.
Для ElementsCollection определенны методы следующего типа:
- методы выборки внутренних элементов
- а точнее методы создания прокси-элементов представляющих выбранные элементы из данной коллекции
- методы-проверки состояния коллекции элементов - assertions
- методы получения статусов и значений коллекции элементов
Assertions
инициируют для прокси-коллекции поиск актуальных версий элементов коллекции на странице, совершают проверку по предикату ("условию" - объекту-кондишену класса CollectionCondition), и возвращают объекты ElementsCollection, позволяя использовать цепочки вызовов.
shouldBe
- e.g.$$(".errors").shouldBe(empty)
shouldHave
- e.g.$$("#mytable tbody tr").shouldHave(size(2))
Также играют роль явных ожиданий (explicit waits). Они ждут до удовлетворения условия (size, empty) пока не истечет таймаут (значение Configuration.collectionsTimeout
, которое установлено по умолчанию в 6000 миллисекунд).
Методы получения статусов и значений коллекции элементов
Инициируют для прокси-коллекции поиск актуальных версий элементов коллекции на странице, и возращают соответствуюе значение:
- size()
- isEmpty()
- getTexts() // возвращает массив видимых текстов, e.g. для элементов
<li>a</li><li hidden>b</li><li>c</li>
вернет массив вида ["a", "", "c"]
Эти методы - не имеют встроенных неявных ожиданий.
Методы выборки внутренних элементов
Дополнительная фильтрация - возвращает обьект прокси-коллекции представляющий отфильтрованные элементы оригинальной коллекции на странице, не имеет встроенных ожиданий.
filterBy(Condition)
возвращает коллекцию (как ElementsCollection) из только тех элементов оригинальной коллекции, которые удовлетворяют условию - e.g.$$("#multirowTable tr").filterBy(text("Norris"))
excludeWith(Condition)
- e.g.$$("#multirowTable tr").excludeWith(text("Chuck"))
Дополнительный поиск элементов - возвращает обьект прокси-элемента представляющий найденный элемент оригинальной коллекции на странице, не имеет встроенных ожиданий.
get(int) - возвращает n-ый элемент как
SelenideElement`; при попытке действий над элементом сработает неявное ожидание до существования и видимости n-го элемента в оригинальной коллекцииfindBy(Condition)
- возвращает элемент коллекции какSelenideElement
который удовлетворяет условию , при попытке действий над элементом сработает неявное ожидание до появления в оригинальной коллекции соответствующего элемента
Дополнительная фильтрация и поиск позволяют почти полностью отказаться от менее читабельных xpath локаторов:
$$("#list li").filterBy(cssClass("enabled")).findBy(exactText("foo")).find(".remove").click();
// вместо
$(By.xpath("//*[@id='list']//li[@class='enabled' and .//text()='foo']//*[@class='remove']")).click();