代码之家  ›  专栏  ›  技术社区  ›  curiousToKnow

如何从xhtml获取文本

  •  -1
  • curiousToKnow  · 技术社区  · 7 年前

    <div>
      <fieldset>
        <legend class="lheader">Section Information:</legend>
        <span id="lblSectionInfo">
            Name:
            <font style="font-weight:normal">rr</font>
            <br>
            Type:
            <font style="font-weight:normal">Section Type     </font>
            Section List:
            <font style="font-weight:normal">	Yes       </font>
            Status:
            <font style="font-weight:normal">
            Section:
            <font style="font-weight:normal">Section Condition</font>
            <br>
        </span>
      </fieldset>
    </div>

    我试过了 getText() 返回空白行,尝试 getAttribute("innerText") 它返回不适用,已尝试 getAttribute("innerHTML") 返回不适用

    不确定如何获取完整文本或单个测试,例如部分名称 应该返回文本部分“RR”等。我使用的Xpath是正确的。 非常感谢您的帮助。

    //div[@id = 'TestView5']//span[@id = 'lblSectionInfo']
    

    我的Xpath是正确的,因为当Selenium IDE使用它时,我能够突出显示本节中的完整文本。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Buaban    7 年前

    很难分离这些字段,因为它们位于同一个跨度节点下。我可以看到两种变通方法。
    1、使用索引 <font> 节点作为锚点。

    Name: "//span[@id='lblSectionInfo']/font[1]"
    Type: "//span[@id='lblSectionInfo']/font[2]"
    Section List: "//span[@id='lblSectionInfo']/font[3]"
    


    2.使用JavaScript查找文本节点以获取字段名,然后使用Selenium查找 <字体(>); 节点以获取其值。最后,将它们映射到一起。

    function getTextNode(rootNode) {
        var nodes = rootNode.childNodes;
        var fieldNames = [];
        var count=0;
        for (var i = 0; i < nodes.length; i++) {
            if ((nodes[i].nodeType == Node.TEXT_NODE)) {
                if(nodes[i].textContent.trim().indexOf(':')>0) {
                    let text = nodes[i].textContent.trim();
                    fieldNames[count] = text.substring(0,text.length-1);
                }           
            }
        }
        return fieldNames;
    }