Selenium проверяет наличие элемента при использовании аннотации FindBy - PullRequest
0 голосов
/ 18 февраля 2020

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

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 18 февраля 2020

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

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

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

...