2012-06-27 2 views
0

Использование HtmlUnit Как я могу захватить элемент, находящийся под скрытым div (style = "display: none")?Как получить элемент под дисплеем: none div с помощью htmlunit

В этом случае я пытаюсь получить значение поля, представленного в таблице. первая ячейка - это имя поля, а вторая - значение. Я использую атрибут «для», чтобы найти связанное значение.

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 и комментарий на другой ответ:

В моем примере я хочу, чтобы получить «Change Data (ДТА)» в результате

Это все, что вам нужно:

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

Смежные вопросы