如何从xhtml

时间:2017-10-04 21:05:15

标签: html selenium selenium-webdriver xhtml



<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>
&#13;
&#13;
&#13;

我必须从屏幕的上述部分信息部分获取文本。 我尝试getText()并返回空白行,尝试getAttribute("innerText")并返回N / A,尝试getAttribute("innerHTML")并返回N / A

我不确定如何获得完整的文字或单个测试,例如部分名称 应该返回文本Section&#34; RR&#34;我正在使用的Xpath是正确的。 任何帮助都非常感谢。 Fyi,我正在使用下面的Xpath来获取文本。

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

我的Xpath是正确的,因为我可以在Selenium IDE使用它时突出显示本节的完整文本。

1 个答案:

答案 0 :(得分:1)

分离这些字段非常困难,因为它们位于同一个span节点下。我可以看到两个解决方法 1.使用<font>节点的索引作为锚点。

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


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

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