如何仅从子元素获取文本 - Webdriver - Java

时间:2014-04-14 11:23:16

标签: java selenium xpath webdriver element

我试图仅从子元素获取文本。见下文:

<strong class="EnvMain">
  <strong id="currentClock">11:19</strong>
  GMT
</strong>

我只想获得GMT文字。

我尝试编写xpath,如:.//*[@id='userEnvironmentInfo']/div[2]/a/strong/text()],但这样就找不到元素了。

提前致谢。

更新HTML:

<div class="DateTime">
 <a class="EnvPicker" title="Change your timezone" href="javascript:void(0);">
  <span class="EnvDD">▾</span>
  <span class="EnvIcon DateTimeIcon">The time is:</span>
  <strong class="EnvMain">
    <strong id="currentClock">17:34</strong>
    GMT
    </strong>
  <span id="currentDay" class="EnvMore">Monday</span>
  <span id="currentDate" class="EnvMore">14.04.2014</span>
 </a>
 <div class="EnvContainer">
   <ol id="timeZoneOptions" class="EnvList">
      <li class="EnvItem">
         <a class="EnvOption" title="Set the timezone to GMT-12" onclick="return false;" rel="-12" href="javascript:void(0);">
             <strong class="EnvMain">GMT-12</strong>
             <span class="EnvMore">Current time:01:25</span>
         </a>
      </li>
      <li class="EnvItem">
         <a class="EnvOption" title="Set the timezone to GMT-11" onclick="return false;" rel="-11" href="javascript:void(0);">

这里的元素将一直持续到GMT +12。

3 个答案:

答案 0 :(得分:0)

您要搜索的xpath是:

//strong[@class='EnvMain']/text()

此xpath返回文本,而不是web元素。

如果您想使用selenium + java获取文本,可以尝试以下方法:

driver.findElement(By.xpath("//strong[@class='EnvMain']")).getText();

似乎getText函数不会仅返回GMT。但是我们可以在获取文本后解析这样的字符串:

    String s = driver.findElement(By.xpath("//strong[@class='EnvMain']/strong[id='currentClock']/..")).getText();
    s = s.substring(s.lastIndexOf(' ') + 1);

答案 1 :(得分:0)

使用以下xpath查找元素:

//strong[@class='EnvMain']/strong[@id='currentClock']/..

此xpath的作用是找到具有类EnvMain的<strong>元素,该元素具有id为currentClock的子<strong>。 (最后的..会将dom返回到父元素。)

然后使用getText()方法提取文本:

   String gmt = driver
        .getElement(By.xpath("//strong[@class='EnvMain']/strong[id='currentClock']/.."))
        .getText();

然后,如果你想忽略内部<strong>元素中的文字并且只获得时区(&#34; GMT&#34;)......这不是一个好方法这与xpath。您必须在Java中使用正则表达式来删除您不想要的部分:

gmt = gmt.replaceAll("[\\d][\\d]?:[\\d][\\d]\\s*", "");

答案 2 :(得分:0)

getText()在您的情况下返回null,因为在列表项中有锚标记,然后是锚标记的文本。因此使用getAttribute(“innerHTML”)。但您将无法选择列表中的项目。

$scope.opts = {
    dirSelectable: false,
    multiSelection: true,
    injectClasses: {
      "li": "injectedTreeLi"
    },
    isSelectable: function(node) {
      // I want to disable 'Info' and 'Debug'
      return node.label.indexOf("Info") !== 0;
    }
};