HtmlUnit 是否应该返回具有 "display: none;" 的 html 元素的值

Should the values of html elements with "display: none;" be returned by HtmlUnit

给定以下 table,每隔一行的 display 值设置为 none

    <table>
        <thead>
        <tr><th>Expand</th><th>Some Id</th><th>Some Attribute</th><th>Another Attribute</th></tr>
        </thead>
        <tbody>
            <tr><td><a href="#" onclick="expandRow('101')">V</a></td><td>101</td><td>fast</td><td>1/1/1</td></tr>
            <tr style="display: none"><td>1</td><td>0</td><td>1</td><td>A Hidden Value 1011</td></tr>
            <tr><td><a href="#" onclick="expandRow('102')">V</a></td><td>102</td><td>fast</td><td>2/2/2</td></tr>
            <tr style="display: none"><td>1</td><td>0</td><td>2</td><td>A Hidden Value 1022</td></tr>
            <tr><td><a href="#" onclick="expandRow('103')">V</a></td><td>103</td><td>fast</td><td>3/3/3</td></tr>
            <tr style="display: none"><td>1</td><td>0</td><td>3</td><td>A Hidden Value 1033</td></tr>
            <tr><td><a href="#" onclick="expandRow('104')">V</a></td><td>104</td><td>fast</td><td>4/4/4</td></tr>
            <tr style="display: none"><td>1</td><td>0</td><td>4</td><td>A Hidden Value 1044</td></tr>
        </tbody>
    </table>

当我使用带有 xPath 表达式的 HtmlUnit 检索所有行时:

   HtmlPage page = webClient.getPage("http://localhost:4567/Home.html");
   List<HtmlTableRow> rowsByXPath = page.getByXPath("//tbody/tr");

检索所有行,但是即使检索了 display 值设置为 none 的行,使用 [=23= 时它们的单元格值不可用].

例如,如果我尝试使用以下代码打印每行中最后一个单元格的值:

cells.forEach(cell -> System.err.print("[" + cell.asText() + "]"));

输出为:

[1/1/1][][2/2/2][][3/3/3][][4/4/4][]

但是当我使用 asXml:

cells.forEach(cell -> System.err.print("[" + cell.asXml() + "]"));

获得以下输出(为便于阅读而修改):

[<td>1/1/1</td>][<td>A Hidden Value 1011</td>]
[<td>2/2/2</td>][<td>A Hidden Value 1022</td>]
[<td>3/3/3</td>][<td>A Hidden Value 1033</td>]
[<td>4/4/4</td>][<td>A Hidden Value 1044</td>]

这是预期的行为吗?

我预计在单元格上使用 asText 的输出是:

[1/1/1][A Hidden Value 1011][2/2/2][A Hidden Value 1022][3/3/3][A Hidden Value 1033][4/4/4][A Hidden Value 1044]

XPath 是一项 XML 功能,无需任何 HTML 语义即可工作。这意味着样式属性没有隐藏树中的任何元素。

或者反过来 - 使用 XPath 时找到(隐藏)元素是正确的。

另一方面,像 DomNode.asText() 这样的方法正在 HTML 上下文中的 DOM 树上工作 - asText 将 return 一个空字符串,如果节点不可见。