2017-10-04 258 views
-1
获取文本

如何从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"> \t Yes  </font> 
 
     Status: 
 
     <font style="font-weight:normal"> 
 
     Section: 
 
     <font style="font-weight:normal">Section Condition</font> 
 
     <br> 
 
    </span> 
 
    </fieldset> 
 
</div>

我得从屏幕上面的部分信息部分的文本。 我试图getText()并返回空白行,试图getAttribute("innerText")并返回N/A,试图getAttribute("innerHTML")并返回N/A

不知道我怎样才能得到完整的文本或单项测试如部分名称 应返回文本部分“RR”等。我使用的Xpath是正确的。 任何帮助真的很感激。 Fyi,我正在使用下面的Xpath来获取文本。

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

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

+0

在HTML中没有只读元素。请全部显示陈述 – mplungjan

+0

你传递给'getText()'的是什么?什么是你的'xpath'选择器? –

+0

我希望这会帮助你https://www.w3schools.com/xml/dom_element.asp – Anand

回答

1

因为它们位于同一跨度节点下,所以分离这些字段相当困难。我可以看到两种解决方法。
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; 
} 
+0

第一种解决方法对我来说非常合适。 Thnx Buaban。 – reena