Xpath无法找到文本

时间:2017-03-23 11:18:49

标签: java xpath selenium-webdriver

HTML CODE

<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>

Xpath我试过

.//*[@id='filterInfo']/div
.//*[@id='filterInfo']/div/text()

我想获取文字显示323个产品,但我的xpath不会返回给我。由于这篇文章没有特别的 div ,我很难得到它。

我试过的硒代码

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

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

获取异常:无效选择器

3 个答案:

答案 0 :(得分:1)

您可以使用//div/text() 显示323个产品。 基本上它会返回未包含在标签中的文本。 请参阅此example

所以在你的情况下:

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

http://www.xpathtester.com/xpath/d06b22fb023db960d8fc619485759127

答案 1 :(得分:0)

尝试使用Chrome中的开发者工具查找&#34; filterInfo&#34;首先通过xpath组件,看看是否有效。

答案 2 :(得分:0)

只有当您的第二个Selenium打算返回文本节点时,XPath webelement表达式才会返回XPath。这就是为什么你得到Invalid Selector例外。

此外,我在提供的div示例中看到id="filterInfo"没有HTML。如果您需要获取"Showing 323 products",请尝试以下代码:

driver.findElement(By.xpath("//div[@class="filterInfoContainer"]/div[1]")).getText();

考虑更新的HTML示例,这是另一种方法,当您需要获取不包含子元素文本的文本时:

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