在列表中选择可见的xpath

时间:2013-09-27 22:26:05

标签: xpath

我正试图从网站上获取页面的错误消息。该列表包含几个可能的错误,所以我无法通过id检查;但我知道带有display:list-item的那个是我想要的那个。这是我的规则,但似乎不起作用,它有什么问题?我想要返回的是元素中的错误文本。

//*[@id='errors']/ul/li[contains(@style,'display:list-item')]

示例dom元素:

<div id="errors" class="some class" style="display: block;">
<div class="some other class"></div>
<div class="some other class 2">
<span class="displayError">Please correct the errors listed in red below:</span>
<ul>
    <li style="display:none;" id="invalidId">Enter a valid id</li>
    <li style="display:list-item;" id="genericError">Something bad happened</li>
    <li style="display:none;" id="somethingBlah" ............ </li>
    ....
</ul>
</div>

1 个答案:

答案 0 :(得分:1)

正确的XPath应该是:

//*[@id='errors']//ul/li[contains(@style,'display:list-item')]

//*[@id='errors']之后,您需要额外的/,因为<ul>不在其下方。再次使用//扫描<ul>的所有基础元素。

如果你有能力不使用//,那就会更好,更快,更少消耗。