Selenium WebDriver没有使用nodePath / text()方法找到正确的元素

时间:2017-07-10 21:33:55

标签: java css selenium xpath

我试图在网络应用上获取特定的文字元素。我无法分享Html,但相关部分看起来像这样:

<div id ="user">
    <div class="large columns">         
                <label for="object.disabled" class="readOnlyClass  hide-label">
                    Text1
                </label>
                <div id="123x435q" class="readOnlyClass  hide">
                    <input class="disabled-field" id="123x435qs" type="text" value="07/20/2017" disabled="">
                </div>
    <div class="class1">
      <div>Text2</div>
    "

    07/10/2017
    "
    </div>
</div>

当我尝试通过xpath // * [@ id =&#39; user&#39;] / div [2]

找到element.getText()。trim()时

我得到结果:Text2 2017年7月10日

我试图获得07/10/20的文字。所以我尝试了// * [@ id =&#39; user&#39;] / div [2] / text()[2]

的xpath

当我在Chrome控制台中运行时:$ x(// * [@ id =&#39; user&#39;] / div [2] / text()[2])我的文本节点是2017年10月7日的文字属性(我期待)。但是,通过Selenium运行时得到的是:Text1。

所以有两个问题: 1.为什么path / text()在Selenium中返回Text1但在Chrome控制台中没有? 2.如何获取一个元素只返回class1 div节点中的日期文本而不返回Text2文本?

1 个答案:

答案 0 :(得分:0)

1 - Selenium不支持TextNode。您可以获取'Text1',因为它是元素'Label'的文本,而'Text2'是'Div'元素内的TextNode。

2 - 您必须使用其他解决方案来获取日期文本。请参阅下面的示例。

String outerText = driver.findElement(by.cssSelector("#user > div.class1")).getText();
String innerText = driver.findElement(by.cssSelector("#user > div.class1 > div")).getText();
String dateText = outerText.replace(innerText,"");