在Selenium中使用文本和位置getattribute()

时间:2012-11-12 11:53:19

标签: java html xpath selenium

我正在尝试使用Selenium为具有ADF生成树的网站构建测试框架。树最终以

的结构结束
<table>
<tr>
 <td>
  <div>
   <span>
    <a id="AN_ID" title="Expand" onclick="return false" href="#"></a>
   </span>
   <img>
   <img>
   <span>SOME_TEXT</ span>
  </div>
 </td>
</tr>
<tr></tr>
<tr></tr>
</table>

我希望有一个XPath函数可以使用文本来查找锚的id,如下所示:

selenium.getAttribute("xpath=//span[text()='"+text+"']/preceding-sibling::span[1]/child::a@id");

在调用函数时将文本输入到函数中。当字符串不唯一时会出现问题。所以我试着在函数中添加一个位置,如下所示:

selenium.getAttribute("xpath=//span[text()='"+text+"']["+occurrence+"]/preceding-sibling::span[1]/child::a@id");

因此该函数调用文本和字符串树中的出现。这是为了找到第一次出现的id,但是找不到给定字符串第二次出现的id。

我也尝试过使用

[text()= "" and position()= ""] 

但这根本不起作用。

每个锚点都会生成一个新表格,其中包含子级别的所有表格行(与上面相同的结构),因此您最终会得到树的每个子级别的新表格。

2 个答案:

答案 0 :(得分:1)

我相信事情应该在最后:

selenium.getAttribute("xpath=(//span[text()='"+text+"']/preceding-sibling::span[1]/child::a)["+occurrence+"]@id");

答案 1 :(得分:0)

此HTML结构是否严格且完全无法更改?我建议你为这两个跨度添加一个id或类。这不会解决所有问题......?

另一个解决方案是选择//table/tr/td/div/span[1]/a之类的两个跨度中的第一个。