【问题标题】:How to find duplicate text/records in webpage/table using selenium webdriver?如何使用 selenium webdriver 在网页/表格中查找重复的文本/记录?
【发布时间】:2016-06-01 09:14:16
【问题描述】:

我正在使用此代码查找匹配的文本,我想查找重复记录

WebElement body = driver.findElement(By.tagName("body"));
String bodyText = body.getText();

// count occurrences of the string
int count = 0;

// search for the String within the text
while (bodyText.contains("VIM LIQUID MARATHI")){

// when match is found, increment the count
count++;

// continue searching from where you left off
bodyText = bodyText.substring(bodyText.indexOf("VIM LIQUID MARATHI") + "VIM LIQUID MARATHI".length());

}

【问题讨论】:

  • 这对我来说很清楚,但是我的 qyuestoin 是,现在我正在指向一个网页,它包含 n 个文本,我怎么能找到该网页包含重复的文本,,,,说将显示/列出的文本(Zebra)翻页 2 次,它应该发现 zebra 是重复的,就像我想要上述场景的脚本一样

标签: javascript java selenium


【解决方案1】:

这将为您提供包含您的搜索文本的 WebElement 的所有文本:

String searchString = "VIM LIQUID MARATHI";
List<WebElement> elements = driver.findElements(By.xpath("//*[text() = '" + searchString + "']"));

for(WebElement we:elements){
   System.out.println(we.getText());
}

【讨论】:

  • 这对我来说很清楚,但是我的 qyuestoin 是,现在我正在指向一个网页,它包含 n 个文本,我怎么能找到该网页包含重复的文本,,,,说将显示/列出的文本(Zebra)翻页 2 次,它应该发现 zebra 是重复的,就像我想要上述场景的脚本一样
  • 到目前为止,您只要求查找重复项 :-)。之后你想做什么?是否有链接到文本,图像?找到文字后告诉你要做什么
  • 如果网页有上千条文本,我只需要找到重复的记录,我不能单独搜索吗? .....我只想打印重复的记录就是这样
  • 您想获取包含您正在搜索的关键字的文本/句子/WebElement(每次出现)?
  • 我相应地改变了我的答案
【解决方案2】:

您可以使用 findElements 和 xpath 来查找与定位器匹配的所有元素。这将返回一个您可以获得大小的列表,这将自动成为您的重复计数。

String textToFindDuplicatesOf = "VIM LIQUID MARATHI";
List<WebElement> elements = driver.findElements(By.xpath("//*[text() = '" + textToFindDuplicatesOf + "']"))
int count = elements.size();

现在if(count &gt; 1) 表示您有重复记录。

现在,如果您想将其重新用于其他文本,只需将其添加到方法中:

public boolean isDuplicateFound(String textToFindDuplicatesOf) {

    List<WebElement> elements = driver.findElements(By.xpath("//*[text() = '" + textToFindDuplicatesOf + "']"))
    return elements.size() > 2;
}

尝试这样的方法来查找页面上的所有重复项。我没有测试这个可能有一些错误:

List<WebElement> elements = driver.findElements(By.xpath("//*[text()]"));
Map<String, Integer> textCounts = new HashMap<>();

for (WebElement element : elements) {

    String text = element.getText();
        if (textCounts.containsKey(text)) {

            textCounts.put(text, textCounts.get(text) + 1);
        } else {

        textCounts.put(text, 1);
    }
}

要将其打印到控制台...:

for (Map.Entry<String, Integer> entry : textCounts.entrySet()) {
    System.out.println(entry.getKey()+" : "+entry.getValue());
}

【讨论】:

  • 这对我来说很清楚,但是我的 qyuestoin 是,现在我正在指向一个网页,它包含 n 个文本,我怎么能找到该网页包含重复的文本,,,,说将显示/列出的文本(Zebra)翻页 2 次,它应该发现 zebra 是重复的,就像我想要上述场景的脚本一样
  • 只需将 xpath 中的文本更改为 Zebra?让我更改我的示例以使其更易于查看。
  • 在那个网页上说,它有成千上万的文本,我只需要找到重复的记录,我不能单独搜索吗?
  • 也许如果你告诉我错误是什么,我可以帮助你。但实际上,我已经向您展示了这么多,您不能使用我给您的东西来获得有效的解决方案吗?
  • 说真的??您有 HashMap textCount,其中包含重复条目及其重复次数。只需将 HashMap 内容打印到控制台???
猜你喜欢
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 2021-09-26
  • 2016-05-30
  • 1970-01-01
相关资源
最近更新 更多