2012-06-27 38 views
0

使用HtmlUnit,我應該如何獲取隱藏div(style =「display:none」)下的元素?如何獲取顯示下的元素:使用htmlunit的無div

在這種情況下,我試圖獲取表中顯示的字段的值。第一個單元格是字段名稱,第二個單元格是值。我正在使用「for」屬性來查找關聯的值。

HTML:

<div style="display: none;" id="tab-doc-div"> 
<div class="tab-container" align="center"> 
    <table class="datatable"> 
     <tbody> 
      <tr> 
       <th rowspan="1" colspan="1"> 
        &nbsp;<label for="doc.change.stat"> 
        <font color="">*&nbsp;</font>Action</label> 
       </th> 
       <td colspan="2"> 
        Data Change (DTA) 
       </td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

的Java /我的HtmlUnit正在使用代碼:

public static String getTextForProperty(HtmlPage page, String property) throws Exception { 
    List<HtmlLabel> labels = (List<HtmlLabel>)page.getByXPath("//label[@for='" + property + "']"); 

    if (labels.isEmpty()) { 
     return null; 
    } else { 
     return labels.get(0).getParentNode().getNextSibling().asText(); 
    } 
} 
String myValue = getTextForProperty(myPageObject, "doc.change.stat"); //returns null 

回答

0

鑑於您的樣本HTML文件和對方回答您的評論:

在我的例子我想要得到的「數據變更(DTA)」作爲結果

這就是你需要:

HtmlTableCell td = page.<HtmlTableCell> 
        getFirstByXPath("//label[@for='doc.change.stat']/../../td"); 
System.out.println(td.getTextContent().trim()); 
+0

謝謝,這工作!重點在於使用getTextContent()而不是使用asText()。 – Saeed

0

我會使用的getAttribute(字符串的attributeName)http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/html/DomElement.html#getAttribute(java.lang.String

例子:

for (HtmlLabel label : labels) { 
if (!label.getAttribute("for").isEmpty()) { 
myValue = label.getAttribute("for"); 
} 
+0

也許我不太清楚。在我的例子中,我想獲得「數據更改(DTA)」作爲結果。 – Saeed

+0

我不好,我讀得太快了。順便說一下,它隱藏在div中的事實無關緊要,它解析了節點。對於你的問題,只需使用'return labels.get(0).getParentNode()。getNextSibling()。getNextSibling()。asText();' – maxmax

+0

在隱藏div下是很重要的。嘗試看看在一些隱藏的東西的頁面上做foo.asText()的結果,它們不會顯示出來。 – Saeed