我已将产品添加到购物篮并在列表中列出了它们的URL,并希望根据给定的产品String []验证这些产品 这些项目向后存储在z String []中,因此这里的最后一个项目是列表中的第一项。.项目数为3,下面的代码适用于2个项目,并在第三个项目的assert方法中引发调用者异常< / p>
public void verifyBag(String[] goods) {
actions.clickOn(By.xpath(bagLocator));
Arrays.sort(goods);
List<WebElement> listItems = actions.driver.findElements(By.xpath(bagItems));
List <String> actualItems = new ArrayList<String>();
for(int i=0;i<listItems.size();i++)
{
actualItems.add(listItems.get(i).getAttribute("href"));
}
int j = goods.length-1;
for(int i=0;i<goods.length;i++)
{
String actualItem = actualItems.get(i);
String product = goods[j];
System.out.println(product);
//assertTrue(actualItems.get(i).contains(goods[j]));
assertTrue(actualItem.equals(product));
j--;
}
assertEquals(listItems.size(), goods.length,"Assert Number of Items in the Bag");
}
答案 0 :(得分:1)
如果您不在乎顺序,而在乎goods
和actualItems
提供的列表之间的匹配,则可以执行以下操作:
String[] goods
转换为某个集合,例如List
。让我们称之为goodsList
。从goodsList
中删除也在actualItems
中的所有项目。
goodsList
中的所有项目均为
也在actualItems
中。actualItems
与goodsList
相比缺少的项目列表您还可以执行相反的操作:从actualItems
中删除goodsList
中也包含的所有项目。这样可以为您提供所提供列表中不存在的项目列表。
代码:
public void verifyBag(String[] goods) {
actions.clickOn(By.xpath(bagLocator));
List<WebElement> listItems = actions.driver.findElements(By.xpath(bagItems));
List <String> actualItems = new ArrayList<String>();
for(int i=0;i<listItems.size();i++)
{
actualItems.add(listItems.get(i).getAttribute("href"));
}
List<String> goodsList = new ArrayList(Arrays.asList(goods));
goodsList.removeAll(actualItems);
if(goodsList.size() == 0) {
// All goods from provided goods list are also in actualItems
}
else {
// Some items didn't match
}
答案 1 :(得分:0)
在执行循环之前,您必须检查goods
和actualItems
的大小。确保数组和列表的大小相同,并且它们都不为null或为空。
函数listItems.get(i)
和getAttribute("href")
可以返回空值,请在添加到列表之前对其进行检查。