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

t3irkdon  于 2023-02-02  发布在  Java
关注(0)|答案(3)|浏览(89)

我尝试只从子元素中获取文本。请参见以下内容:

<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);">

这里的天气将持续到格林尼治时间+12。

w3nuxt5m

w3nuxt5m1#

您正在搜索的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);
km0tfn4u

km0tfn4u2#

使用以下xpath查找元素:

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

这个xpath所做的是找到类EnvMain的<strong>元素,该类EnvMain有一个id为currentClock的子元素<strong>(最后的..沿着dom返回父元素)。
然后使用getText()方法提取文本:

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

然后,如果你想忽略内部<strong>元素中的文本,只获取时区(“GMT”)...没有一个好方法可以用xpath来实现这一点,你必须使用Java中的正则表达式来移除你不想要的部分:

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

hpcdzsge3#

getText()在你的例子中返回null,因为在列表项中有锚标签,然后是锚点标签的文本。所以使用getAttribute(“innerHTML”)。但是你将不能选择列表中的项。

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"));
    }

相关问题