首页 > 解决方案 > 从 List 集合中删除一些单词

问题描述

我正在对一个网页进行硒测试,该网页返回一个表格,其中一些行和列显示支付数据。我正在尝试从我正在使用的 XPATH 的结果中删除一些字符/单词,因为在进行断言时我不需要该部分(检查表中的数据是否正确)。

通常,网页还会在标识号之前返回一个“下拉按钮”作为文本(有一个图标)(例如,如下所示的 168.3285.6021)。我使用的是 it.set(it.next().replaceAll("DropDown Arrow ","")); 因此 DropDown Arrow 文本被替换为任何内容,仅适用于第一行,但其他 2 行不会被替换。有小费吗?

    public void check_receivals() {

    // Check how many lines and assert the size (from xpath)
    List<WebElement> Receivals = driver.findElements(By.xpath("//*[@id='received-overview']//div[@class='bdpo-overview-table-row']/div[@class='claims']"));
    System.out.println(Receivals.size() + " receival lines found");
    assertEquals(7, Receivals.size());

    // Test data to compare against..aka expectedResultList
    List<String> expectedResultList = new ArrayList<>();
    expectedResultList.add ("168.3285.6021\n" + "Payment 2015\n" + "01-01-2015\n" + "€ 246");
    expectedResultList.add ("143.8407.8413\n" + "Payment 2015\n" + "01-01-2015\n" + "€ 233");
    expectedResultList.add ("154.2841.2407\n" + "Payment 2015\n" + "01-01-2015\n" + "€ 253");

    // Assert
    List<WebElement> ReceivalLines = driver.findElements(By.xpath("//*[@id='received-overview']//div[@class='bdpo-overview-table-row']/div[@class='claims']"));
    List<String> ReceivalLines_List = ReceivalLines.stream().map(WebElement::getText).collect(Collectors.toList());

    ListIterator<String> it = ReceivalLines_List.listIterator();
    while(it.hasNext()) {
        it.set(it.next().replaceAll("DropDown Arrow ",""));

    assertEquals(ReceivalLines_List, expectedResultList);

标签: javaselenium

解决方案


问题是您正在修改迭代器,因为您正在使用它。我建议使用 map 函数进行流操作的替换部分。

List<String> ReceivalLines_List = ReceivalLines.stream().map(WebElement::getText).map(s -> s.replaceAll("DropDown Arrow ","")).collect(Collectors.toList());

推荐阅读