编辑:一个评论者正确地指出,实际上,我正在使用的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] 举报,一经查实,本站将立刻删除。