首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何仅从子元素- Webdriver - Java获取文本

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

Stack Overflow用户
提问于 2014-04-14 19:23:16
回答 3查看 8.7K关注 0票数 2

我试图仅从子元素获取文本。如下所示:

代码语言:javascript
复制
<strong class="EnvMain">
  <strong id="currentClock">11:19</strong>
  GMT
</strong>

我只想得到GMT文本。

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

提前谢谢。

HTML的更新:

代码语言:javascript
复制
<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。

EN

回答 3

Stack Overflow用户

发布于 2014-04-14 21:37:04

您要搜索的xpath是:

代码语言:javascript
复制
//strong[@class='EnvMain']/text()

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

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

代码语言:javascript
复制
driver.findElement(By.xpath("//strong[@class='EnvMain']")).getText();

似乎getText函数不会只返回GMT。但我们可以在获得文本后解析如下字符串:

代码语言:javascript
复制
    String s = driver.findElement(By.xpath("//strong[@class='EnvMain']/strong[id='currentClock']/..")).getText();
    s = s.substring(s.lastIndexOf(' ') + 1);
票数 0
EN

Stack Overflow用户

发布于 2014-04-14 22:35:49

使用以下xpath查找该元素:

代码语言:javascript
复制
//strong[@class='EnvMain']/strong[@id='currentClock']/..

此xpath的作用是查找具有类EnvMain的<strong>元素,该元素有一个id为currentClock的子<strong>。(末尾的..沿dom返回到父元素)。

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

代码语言:javascript
复制
   String gmt = driver
        .getElement(By.xpath("//strong[@class='EnvMain']/strong[id='currentClock']/.."))
        .getText();

然后,如果您想忽略内部<strong>元素中的文本而只获取时区("GMT")...使用xpath没有一个很好的方法来做到这一点。您必须在Java中使用正则表达式来删除不需要的部分:

代码语言:javascript
复制
gmt = gmt.replaceAll("[\\d][\\d]?:[\\d][\\d]\\s*", "");
票数 0
EN

Stack Overflow用户

发布于 2016-04-13 19:40:07

在本例中,getText()返回null,因为在列表项中有锚标记,然后锚tag.So的文本使用getAttribute("innerHTML")。但您将无法选择列表中的项目。

代码语言:javascript
复制
WebElement e1 = driver.findElement(By.xpath("//ul[@class='EnvContainer']"));

List<WebElement> list = e1.findElements(By.tagName("li"));
for(WebElement item: list)
 {
    String s = item.getAttribute("innerHTML");
    System.out.println(item.getAttribute("innerHTML"));
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23058789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档