如何计算 Selenium XPath 结果

How to get count of Selenium XPath results

截至目前,我正在使用 listChanges.size() 计算匹配结果的数量。如何在列表中不加载 getChanges 的情况下直接获取计数?

By getChanges = By.xpath("//td[contains(@class,'blob-code blob-code-addition') or contains(@class,'blob-code blob-code-deletion')]");

List<WebElement> listChanges = driver.findElements(getChanges);

我找到了这个(Count function in XPath),我尝试了下面的方法,但没有用!

Integer getCount = By.xpath(count("//td[contains(@class,'blob-code blob-code-addition') or contains(@class,'blob-code blob-code-deletion')]"));

看来我必须做这样的事情了。

Integer getCount = By.xpath("count(//td[contains(@class,'blob-code blob-code-addition') or contains(@class,'blob-code blob-code-deletion')])");

但是右侧 returns 类型的对象 By

您无法使用 XPath 获取计数,因为 selenium 中的 xpath 表达式必须对应于页面上的实际元素

您通过 findElements() + size() 执行此操作的方式是您必须使用 selenium webdriver 计算元素的方式。

正如亚历克斯所说,size() 是必经之路。不过,我确实有另一个建议给你。 尽管根据我的知识,查找元素计数的正确方法是使用 WebDriver api 和 findElements()。另一种方法是通过使用 executeScript() 和适当的 script 来执行 javascript。我不确定 javascriptxpath 是否可以混合在一起来完成此操作,因为 xpath 通过 javascript 执行现在不是多浏览器。参见 this。但是,我确实认为使用 cssSelectorjavascript 可以使它更容易完成。请参阅以下代码:

String cssQuery = ".blob-code-addition, .blob-code-deletion";
String script = "return document.querySelectorAll('" + cssQuery + "').length;";
Object count = ((JavascriptExecutor)driver).executeScript(script);

System.out.println(count);

打印

26