Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

pageObject. Поиск наличия элемента по тексту в List<WebElement> при проверке (assertThat)

matchers
assert
locators
page-object
webdriver
Теги: #<Tag:0x00007f7b644b28c8> #<Tag:0x00007f7b644b2710> #<Tag:0x00007f7b644b2580> #<Tag:0x00007f7b644b23c8> #<Tag:0x00007f7b644b2210>

(mipan) #1

Здравствуйте.
Есть DOM:

<div class="foo">XXX</div>
<div class="foo">YYY</div>

по @FindAll(@FindBy(xpath = "//div[@class="foo"]")) получаю список из WebElement.
Необходимо проверить наличие на странице элемента с нужным текстом (например “YYY”).

Т.к. таких проверок много, хотелось бы избежать лишних преобразований массива и обойтись одним assertThat на проверку.

На данный момент не понимаю, как проверить в списке вебэлементов наличие какого-либо с нужным текстом .

Изначально пытался обойтись конструкцией:

@FindAll(@FindBy(xpath = "//div[@class="foo"]/text()"))
 public static List<WebElement> elements;

assertThat(elements, contains("YYY");

но массив в итоге пустой и вообще, похоже, с text() так не получится.

Может кто из более опытных коллег знает правильную конструкцию матчера для этого?
Натыкался на что-то связанное с hasProperty, но пока не осознал, как правильно с ним работать.


(Константин) #2

Ну если не хочется заморачиваться с перебором элементов в коллекции, то постройте xpath который точно найдет нужны вам элемент
что-то вроде такого: //div[contains(@class,'foo') and contains(text(), 'YYY')]


(Maksim Smolyakov) #3
@FindAll(@FindBy(xpath = "//div[@class='foo']"))
 public List<WebElement> elements;
import static org.hamcrest.Matchers.hasItem;
import static ru.yandex.qatools.htmlelements.matchers.WebElementMatchers.hasText;

// ...

assertThat("В списке элементов есть элемент 'YYY'", elements, hasItem(hasText("YYY")));

(mipan) #4

искомый текст зависит от контекста, а FindBy не принимает параметров.
так что такой способ не подойдет.


(mipan) #5

import static ru.yandex.qatools.htmlelements.matchers.WebElementMatchers.hasText;

То что нужно. Не смотрел в сторону наработок Яндекса. Думал обычными средствами уже решено.
Спасибо!