需要帮助创建XPATH选择器,这取决于元素的名称

时间:2012-04-12 21:40:27

标签: xpath

我想知道是否有人可以帮助我。我有一个应用程序,用户单击文件夹图标打开/关闭它(类似于我们在Windows资源管理器树中导航/浏览文件的方式) - 当我在selenium IDE中记录我的测试时,这里是生成的代码:

<tr>
    <td>click</td>
    <td>//ul[@id='analysisTree']/li[3]/p</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>//ul[@id='analysisTree']/li[4]/p</td>
    <td></td>
</tr>

以下是与应用程序折叠状态相对应的应用程序源代码片段。

<li class="folder collapsed" data-nodecode="RentalValues">
<p>Rental Values</p>
<ul>
</li>
<li class="folder collapsed" data-nodecode="Affordability">
<p>Affordability</p>
<ul>
</li>

当前默认元素xpath定位器的问题是,如果几个月后我们在树上引入了另一个文件夹,它可能会将文件夹位置向上或向下移动树,这将导致错误的文件夹被打开。因此,有人可以帮我整理一个XPath,它会更健壮,不依赖于树中文件夹的确切位置,而是文件夹的名称是唯一的吗?

干杯

1 个答案:

答案 0 :(得分:1)

您可以根据data-nodecode属性进行选择:

<tr> 
  <td>click</td> 
  <td>//ul[@id='analysisTree']/li[@data-nodecode='RentalValues']/p</td> 
  <td></td> 
</tr> 
. . . 

或文件夹名称:

<tr> 
  <td>click</td> 
  <td>//ul[@id='analysisTree']/li[normalize-space(.)='Rental Values']/p</td> 
  <td></td> 
</tr> 
. . . 

normalize-space(.)获取当前元素(本例中为li)中包含的完整文本,并删除了额外的空格。