почему приведенный ниже код печатает только первое значение во всех итерациях?

#java #selenium #xpath

Вопрос:

 List<WebElement> listItems = driver.findElements(By.xpath("//div[@class='inventory_item']"));
System.out.println("Number of Items : "   listItems.size());
         
for(WebElement e : listItems ) 
{
 String sTextValue = e.findElement(By.xpath("//div[@class='inventory_item_name']")).getText();
 System.out.println(sTextValue);
}
 

Во время итерации он печатает только имя 1-го элемента для каждой итерации.

Ответ №1:

Чтобы найти элемент внутри другого элемента с помощью XPath, вы должны использовать точку . в начале внутреннего элемента XPath, как показано ниже.
Это должно сработать:

 List<WebElement> listItems = driver.findElements(By.xpath("//div[@class='inventory_item']"));
System.out.println("Number of Items : "   listItems.size());
         
for(WebElement e : listItems ) 
{
 String sTextValue = e.findElement(By.xpath(".//div[@class='inventory_item_name']")).getText();
 System.out.println(sTextValue);
}
 

Ответ №2:

Вы можете попробовать вот так :

 int i = 0;
for(WebElement e : listItems) 
{
    String sTextValue = e.findElement(By.xpath("(//div[@class='inventory_item']//div[@class='inventory_item_name'])['" i "']")).getText();
    i  ;
    System.out.println(sTextValue);
}