如何计算Selenium XPath结果

时间:2015-02-17 01:47:09

标签: 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.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

类型的对象

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

正如亚历克斯所说,size()是要走的路。不过我确实有另一个建议。 尽管根据我的知识,找到元素计数的正确方法是使用WebDriver api和findElements()。另一种方法是使用javascript和正确的executeScript()来执行script。我不确定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