当所有 svg 元素具有相同的属性和值时,在 selenium-java 中处理 Svg 元素而不使用索引位置

问题描述 投票:0回答:1

在我的应用程序中,我有 200 个具有相同属性和值的 svg 元素 (//*[name()='svg'][@class='tree-node-icon'])
但是当我定位一个 svg 元素时,它被定位,因为我使用了这样的索引位置 (//*[name()='svg'][@class='tree-node-icon'])[3] (因为它有所有 svg elemnet 的属性值相同)
但这里的问题是,当我在 UI 中添加新的 Svg 元素(即在我们的应用程序中添加文件夹,它将创建新的 svg 元素)时,所选的 xpath 索引值发生了更改,我的意思是位置号 3 更改为 4
如何处理这种情况?

这里是 Html Dom

<div class="tree-branch" xpath="1">
 <div draggable="false" class="tree-node has-child-nodes">
  <svg width="12" height="12" class="tree-node-icon">
   <path d="M2 1 L10 6 L2 11 Z" class="svg-icon"></path>
  </svg> 
  <span class="tree-node-label">
   <i class="label-icon fas fas fa-folder" aria-hidden="true"></i> 
   <span>Public</span>
  </span>
</div> 

对于所有具有相同html Dom结构的svg元素,如何在没有索引位置的情况下处理这个问题

我可以从中找到 svg 元素吗

<span>Public</span> to svg

我需要在不使用索引位置的情况下处理 svg 元素

html selenium-webdriver svg xpath relative-locators
1个回答
0
投票

这个 xpath 表达式以跨度为谓词来定位显示的 svg

//*[name()="svg" and following-sibling::span/span[.="Public"]]

在开发控制台上进行了测试

$x('//*[name()="svg" and following-sibling::span/span[.="Public"]]')
© www.soinside.com 2019 - 2024. All rights reserved.