Получить все элементы названия продукта в одном списке:
@FindBy(xpath="//*[@class=\"product-name\"]")
protected List<WebElement> productNameElements;
Затем в своем методе тестирования вы можете перебирать элементы (вы можете использовать цикл for с индексом int, если хотите):
List<String> productsInCart = new ArrayList<>();
for (WebElement element : productNameElements) {
productsInCart.add(nameOfProductInCart(element));
}
Вы можете изменить свой метод проверки, чтобы взять WebElement
в качестве параметра:
public String nameOfProductInCart(WebElement element) {
wait.until(ExpectedConditions.visibilityOf(element));
return element.getText();
}
В качестве альтернативы, если это не работает (например, из-за списка продуктовтребуется время для заполнения), вы можете использовать экземпляр WebDriver
и программно выполнять каждую проверку:
List<String> productNames = new ArrayList<>();
for (int i = 2; i <= 10; i++) {
WebElement element = driver.findElement(By.xpath("(//*[@class=\"product-name\"])[" + i + "]"));
wait.until(ExpectedConditions.visibilityOf(element));
productNames.add(element.getText());
}
ОБНОВЛЕНИЕ : Если вы ответите на вопрос в своем комментарии, если выЕсли вам нужны элементы, а не их текст, вы можете хранить сами элементы в списке:
List<WebElement> productNameElements = new ArrayList<>();
for (int i = 2; i <= 10; i++) {
WebElement element = driver.findElement(By.xpath("(//*[@class=\"product-name\"])[" + i + "]"));
wait.until(ExpectedConditions.visibilityOf(element));
productNameElements.add(element);
}
Теперь вы можете получить доступ к элементам по отдельности, получив их по индексу из списка productNameElements
:
productNameElements.get(0); // First item
Это должно быть проще в управлении, чем наличие отдельной переменной для каждого элемента.