截至目前,我正在使用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')])");
但是右侧会返回By
答案 0 :(得分:2)
您无法使用XPath
获取计数,因为selenium 中的xpath表达式必须与页面上的实际元素相对应。
您通过findElements()
+ size()
执行此操作的方式是使用selenium webdriver计算元素的方式。
答案 1 :(得分:2)
正如亚历克斯所说,size()
是要走的路。不过我确实有另一个建议。
尽管根据我的知识,找到元素计数的正确方法是使用WebDriver
api和findElements()
。另一种方法是使用javascript
和正确的executeScript()
来执行script
。我不确定javascript
和xpath
是否可以混合在一起以实现此目的,因为xpath
通过javascript
执行现在不是多浏览器。见this。但是,我认为将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);
打印强>
26