Как гласит заголовок. У меня есть кусок кода, где такая техника оправдана ИМО.
У меня есть страница с таблицей , и каждая строка содержит, среди прочего, название продукта, идентификатор которого зависит от номера строки:
<table>
<tr><td>...</td><td name ="product1">i fon</td></tr>
<tr><td name ="product2">TV</td></tr>
</table>
Я нахожу строки с аннотацией PageFactory:
@FindBy(How= blablabla)
List<WebElement> rows;
Только тогда я знаю, сколько товаров на странице, поэтому я нахожу каждый товар:
List<String> productNames = new Vector<>();
Iterator<WebElement> itemRowsIter = rows.iterator();
int rowIndex = 0;
while (itemRowsIter.hasNext()) {
By itemLocator = By.name("product" + rowIndex);
WebElement link = quietlyFindElement(driver, itemLocator, itemRowsIter.next());
Optional<String> text = Optional.ofNullable(link)
.map(WebElement::getText);
text.ifPresent(productNames::add);
rowIndex++;
}
quietlyFindElement ищет элемент в Selenium, перехватывает NoSuchElementException и TimeoutException и возвращает ноль, если они выброшены.
Является ли такое решение чистым ?