Java 如何获取Selenium XPath结果的计数

Java 如何获取Selenium XPath结果的计数,java,selenium,xpath,selenium-webdriver,web-scraping,Java,Selenium,Xpath,Selenium Webdriver,Web Scraping,到目前为止,我正在使用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.f

到目前为止,我正在使用
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);
看来我得做这样的事

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

但是右侧返回类型为
By

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

通过
findelelements()
+
size()
进行计算的方法是如何使用selenium webdriver计算元素。

正如alex所说,
size()
是一种方法。不过,我有另一个建议给你。 即使找到元素计数的正确方法是根据我的知识使用
WebDriver
api with
findElements()
。另一种方法是使用
executeScript()
并使用适当的
脚本执行
javascript
。我不确定是否可以将
javascript
xpath
混合在一起来实现这一点,因为
xpath
通过
javascript
执行现在不是多浏览器。看见然而,我确实认为将
cssSelector
javascript
一起使用可以使实现变得更加容易。请参阅以下代码:

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);
打印

二十六


如果可能的话,你能向我提供你正在使用的网站的
url
。@Saifur:那么,你想在那里实现什么呢?只是想知道
xpath
返回多少匹配元素?好的@Saifur如果我可以将count与XPATH一起使用,它可以帮助我删除与此语句相关的处理。List listChanges=driver.findElements(getChanges);谢谢我也会检查上面的脚本并标记答案。@Zack正如我说的,
listChanges=driver.findElements(getChanges);listChanges.size()是正确的方法。但是上面的脚本执行相同的操作,
cssSelector
被编写来替换您正在使用的
xpath
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);