【发布时间】:2019-05-02 04:17:42
【问题描述】:
我已将产品添加到我的购物篮并在列表中列出了它们的 URL,并希望根据给定的 String[] 产品验证这些产品 这些项目向后存储在 z String[] 中,因此这里的最后一项是 List 中的第一项 .. 项目数为 3,下面的代码适用于 2 个项目,并在第三项的 assert 方法中引发调用程序异常
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");
}
【问题讨论】:
-
并在第三项的 assert 方法中引发调用程序异常 ...请分享堆栈跟踪和引发异常的行的详细信息
-
首先,我认为你应该在循环之前检查数量。其次,您可以使用
list.contains()。第三,如果你只是想知道一切是否正确,可以将数组转换为列表,然后对两者进行排序,使用equals()。 -
顺便说一句,在前三行之后,您的代码可以很好地优化可读性,如
List<String> actualItems = listItems.stream() .map(listItem -> listItem.getAttribute("href")) .collect(Collectors.toList()); IntStream.range(0, goods.length).forEach(i -> assertEquals(goods[goods.length - i - 1], actualItems.get(i))); assertEquals(listItems.size(), goods.length, "Assert Number of Items in the Bag");
标签: java selenium automation