Selenium проверяет наличие элемента при использовании аннотации FindBy

Пытаясь использовать аннотацию @FindBy, я чувствую, что нет идеального способа проверить наличие элемента.

Подобные обсуждения есть здесь или здесь, но я вижу только обходные пути и ничего подобного

@FindBy (id = "abc")
private WebElement TestElement;

if (TestElement.isPresent) {...};

Я нашел решения с @FindBys, но таким образом мне нужно реализовать дополнительный @FindBys для каждого элемента, наличие которого я бы проверял в DOM? Не очень приятно.

Каждое альтернативное решение с ExpectedConditions.presenceOf... или что-либо, использующее FindElement, нуждается в локаторе в качестве параметра вместо WebElement, верно?

Конечно, я могу создавать обходные пути, используя, например. ExpectedConditions.elementToBeClickable(WebElement) внутри try/catch и поднять org.junit.jupiter.api.Assertions.fail, но это не настоящая проверка DOM.

Мне кажется, что я более гибок с классическими By определениями объектов страницы (например, private By searchInput = By.xpath("\\input[@class='input_search']");) вместо использования @FindBy. Используя @FindBy, я всегда имею дело с самим WebElement и нет возможности проверить наличие раньше, верно?

Каковы наилучшие практические решения для проверки наличия элементов DOM в контексте объектов страницы с использованием @FindBy? Или я должен остаться с By, чтобы быть в безопасности.


person Rainer    schedule 18.02.2020    source источник
comment
Я не знаю, почему ExpectedConditions.presenceOf... не работает. В любом случае вам нужен локатор для элемента, который вы проверяете. Я знаю, что что-то упускаю, но вопрос не ясен.   -  person pdrersin    schedule 18.02.2020


Ответы (1)


Это может быть не лучшее решение, но вы можете использовать findBy и вернуть список:

List<WebElement> TestElement = driver.findElements(By.id(...));

и каждый раз проверяйте размер элемента списка (в цикле while), чтобы убедиться, что он не пуст.

person pdrersin    schedule 18.02.2020
comment
конечно, но для этого снова мне нужно удостоверение личности. Мой вопрос заключался в том, могу ли я работать с FindBy, следовательно, без идентификатора или xpath в качестве локатора в любом месте. - person Rainer; 18.02.2020
comment
без какого-либо локатора, что вы должны найти? - person pdrersin; 18.02.2020
comment
.. главный вопрос: можно ли работать без локаторов (кроме того, что внутри объявления FindBy) и без лишнего кода в плане проверки наличия элементов. - person Rainer; 18.02.2020