2

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

<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()= ""] 

但这根本不起作用。

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

4

2 回答 2

1

我相信事件应该在最后:

selenium.getAttribute("xpath=(//span[text()='"+text+"']/preceding-sibling::span[1]/child::a)["+occurrence+"]@id");
于 2012-11-12T18:11:39.257 回答
0

这种 HTML 结构是死板的,完全不可能改变吗?我建议你在这两个 span 中添加一个 id 或 class。这不就解决了一切吗...?

另一种解决方案是选择两个跨度中的第一个,例如//table/tr/td/div/span[1]/a.

于 2012-11-12T12:18:01.253 回答