我试图仅从子元素获取文本。见下文:
<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。
答案 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;
}
};