首页 > 解决方案 > 向列表中添加第二项似乎会覆盖我添加的第一个元素

问题描述

所以我试图通过循环将 2 个 Item 对象添加到列表中,但不知何故,第二个项目覆盖了第一个。抱歉,自从我编码以来已经有一段时间了,所以我很难弄清楚我做错了什么,因为我希望这些项目的名称不同。:D

public static List<Item> buyList = new ArrayList<Item>();
int qty=2;

public static void buyItems(int qty)
{
    for(int i=1; i<=qty; i++)
    {
        Item thisItem = new Item();
        thisItem.setName(driver.findElement("//xpathOfName["+i+"]").getText()));
        thisItem.setPrice(driver.findElement("//xpathOfPrice["+i+"]").getText()));

//      System.out.println("this item is >>>>>>>>" +thisItem.getName());

        buyList.add(thisItem);

//      System.out.println("item at 0 is >>>>>>>>" +buyList.get(0).getName());
    }
}

在将“thisItem”添加到 buyList 之前,它会打印正确的名称。但是当我在循环之外打印它时,它会打印第二个项目两次(我注释掉的那些)。我还尝试通过直接添加名称和价格作为参数的新项目,但它似乎仍然会覆盖先前添加到列表中的项目。

我试图简化下面的html代码:

<ul>
   <li id="item-1">
      <div>
         <h4>First Item</h4>
      </div>
   </li>
   <li id="item-2">
      <div>
         <h4>Second Item</h4>
      </div>
   </li>
</ul>

标签: javaseleniumselenium-webdriverindexingwebdriver

解决方案


由于您已经引发了循环并且您希望通过index访问元素,因此您需要替换以下行:

thisItem.setName(driver.findElement("//xpathOfName["+i+"]").getText()));
thisItem.setPrice(driver.findElement("//xpathOfPrice["+i+"]").getText()));

和:

thisItem.setName(driver.findElements("//xpathOfName").get(i).getText()));
thisItem.setPrice(driver.findElements("//xpathOfPrice").get(i).getText()));

推荐阅读