微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-findElements(By.xpath(“ .// g”)在标记内不起作用

编辑:一个评论者正确地指出,实际上,我正在使用的HTML代码都在标记内,这似乎对这种特殊情况具有决定性的影响.

我试图在任何级别检索元素内的所有元素.实际上,我也需要进行一些其他检查,因此我需要使用By.xpath,而不是By.tagName.但是即使没有检查,By.xpath也不可行. (当然,其他检查也会失败-我只是提供了最小的示例).

我的代码

log.info(eventGroup.getAttribute("outerHTML"))
alerts = eventGroup.findElements(By.xpath(".//g"));
log.info(alerts.size());

第一行用于调试,以确保获得正确的元素.这是它的输出

 <g class="event-group">
    <line x1="-105" x2="927.4000244140625" y1="0" y2="0" class="events-bar"/>
    <line x1="-105" x2="927.4000244140625" y1="45" y2="45" class="events-bar"/>
    <line id="markLine" x1="0" x2="0" y1="0" y2="0" y1save="22.5" y2save="537"/>
    <text x="-30" y="26.5" text-anchor="end">Alerts</text><g clip-path="url(#event-clip)">
        <g class="one-event">
            <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#9warning" class="event warning" x="240.04638877275397" y="17.5" width="10" height="10" data-id="58fe7efa97d469000d047594_2017-04-24T22:40:37.679Z"/>
            <rect class="event-overlay" x="235.04638877275397" y="12.5" width="20" height="20"/>
        </g><g class="one-event">
            <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#9warning" class="event warning" x="-4.624127036138464" y="17.5" width="10" height="10" data-id="58fe238d97d469000d0450b3_2017-04-24T16:10:37.710Z"/>
            <rect class="event-overlay" x="-9.624127036138464" y="12.5" width="20" height="20"/>
        </g>
    </g>
</g>

因此,有很多元素可以找到.但是,警报的结果大小为0.

如何修复我的xpath,以便在任何级别下找到该元素下的所有g元素? “ // g”将无法正常工作,因为它会找到整个文档中的所有g元素(我之前曾被它打过).

当然,我可以不用xpath,只需按标记名称搜索,然后循环搜索结果以过滤它们即可.但是xpath可能比大循环更快地工作? (我不在此测试用例中使用MSIE).

解决方法:

.//g表达式找不到所需的g元素的原因是由于namespaces.您的svg元素的名称空间定义为:

xmlns="http://www.w3.org/2000/svg"

这意味着g个子元素实际上具有svg:g名称.

您可以考虑名称空间:

.//svg:g

或者,忽略带有local-name()名称空间:

.//*[local-name() = 'g']

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐