Добавление второго элемента в список, кажется, перекрывает первый элемент, который я добавил - PullRequest
0 голосов
/ 25 марта 2019

Итак, я пытаюсь добавить 2 объекта Item в список, просматривая его, но каким-то образом 2-й элемент переопределяет первый. Извините, что прошло много времени с тех пор, как я написал код, поэтому мне сложно понять, что я сделал неправильно, так как я ожидаю, что названия для этих предметов разные. : 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>

1 Ответ

1 голос
/ 25 марта 2019

Поскольку вы вызвали цикл и хотите получить доступ к элементу через 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()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...