java - 向列表中添加第二项似乎会覆盖我添加的第一个元素
问题描述
所以我试图通过循环将 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>
解决方案
由于您已经引发了循环并且您希望通过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()));
推荐阅读
- javascript - PHP MYSQL 上传图片和其他数据
- sql - PostgreSQL SUM CASE 表达式与 THEN 1 THEN 0 ELSE 0
- firefox-addon - 永久安装自定义 firefox 网络扩展 - 没有 mozilla 帐户或 Firefox 不稳定版本
- python - 函数输出为整数(TypeError:必须是 str,而不是 int)
- r - 如何加快我的功能,特别是 ggplot 命令?
- tableau-api - Tableau 自动调整大小正在将仪表板的内容扔到各处
- c# - 使用 C# 将许多文档插入到 Mongodb 的最快方法
- c# - C# - 如何在 Windows 窗体中向 GeckoFX 嵌入式浏览器添加 WebP 支持?
- python - 如何将文本附加到第一行的末尾
- android - 使用折叠工具栏滚动到 recyclerview 的最后一项