Java Xpath无法找到文本

Java Xpath无法找到文本,java,xpath,selenium-webdriver,Java,Xpath,Selenium Webdriver,HTML代码 <div class="filterInfoContainer"> <div class="result-header-right"> <div class="show-soldout"> <label for="soldout-switch">Display sold out products</label> <label class="switch xs">

HTML代码

<div class="filterInfoContainer">
    <div class="result-header-right">
      <div class="show-soldout">
        <label for="soldout-switch">Display sold out products</label>
        <label class="switch xs">
          <input type="checkbox" name="soldout-switch" id="soldout-switch">
          <div class="switch-slider"></div>
        </label>
      </div>
      <div class="sort-by">Sorted by:
        <select id="sortByDropdown">
          <option value="popularity">Popularity</option>
          <option value="price">Lowest price</option>
          <option value="discount">Highest discount</option>
          <option value="year">Latest release</option>
        </select>
      </div>
    </div>
      Showing 323 products
    <div class="clearfix"></div>

  </div>
我想获取显示323个产品的文本,但xpath没有返回我。由于这篇课文没有特别的div我很难理解

我尝试过的Selenium代码

.//*[@id='filterInfo']/div
.//*[@id='filterInfo']/div/text()
 driver.findElement(By.xpath(".//*[@id='filterInfo']/div"));

 driver.findElement(By.xpath(".//*[@id='filterInfo']/div/text()"));
获取异常:选择器无效


尝试使用Chrome中的开发人员工具,首先通过xpath查找“filterInfo”组件,看看是否有效。

您可以使用
/div/text()
查看323个产品。 基本上,它将返回未包装在标记中的文本。 请参考这个

因此,在你的情况下:

//div[@class='filterInfoContainer']/text()


Selenium
XPath
表达式中,只有当第二个
XPath
打算返回文本节点时,才应返回
webelement
。这就是为什么会出现
无效选择器
异常

另外,我在提供的
HTML
示例中没有看到带有
id=“filterInfo”
div
。如果您需要获取“显示323产品”,请尝试以下代码:

driver.findElement(By.xpath("//div[@class="filterInfoContainer"]/div[1]")).getText();
考虑到更新的
HTML
sample,当您需要获取不包含子元素文本的文本时,另一种方法是:

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("return document.evaluate('//div[@class=\"filterInfoContainer\"]/div/following-sibling::text()', document, null, XPathResult.ANY_TYPE, null).iterateNext().textContent;");

例如,如果id为“filterInfo”的组件位于一个表中,那么您可能必须这样编写:“table id:filterInfo”是否有可能通过代码更改将“Showing 323 products”移动到标记中?@Fey-没有可能更改代码:(谢谢你的回答。我刚刚更新了html代码,你能基于此更新答案吗。请尝试更新的答案,如果不起作用,请告诉我。你可能需要使用
trim()
删除不必要的空格
JavaScriptExecutor
不返回所需的值、不正确的值、不返回任何内容、异常?它不会通过任何错误或异常,也不会返回任何文本。提供的
HTML
示例是否与真实的
HTML
完全相同?可能您删除了一些节点?请尝试添加一些睡眠时间