2014-03-26 116 views
1

有没有办法在Selenium Webdriver中进一步点击兄弟姐妹?例如,这里的HTML:Selenium兄弟姐妹

<tr class="rich-table-row xx-datalist-even" onmouseover="Element.addClassName(this, 'xx-datalist-mouseover')" onmouseout="Element.removeClassName(this, 'xx-datalist-mouseover')"> 
    <td class="rich-table-cell xx-datalist " id="userTableForm01:usersTableData:264:j_id102" style="text-align:center; width:20px;"> 
     <img src="/static/images/graphics/status1.gif" title="Disabled" /> 
    </td> 
    <td id="userTableForm01:usersTableData:264:col1" class="rich-table-cell xx-datalist"> 
     <span id="userTableForm01:usersTableData:264:author_id">2377</span> 
    </td> 
    <td id="userTableForm01:usersTableData:264:col2" class="rich-table-cell xx-datalist">seleniumtest2312</td> 
    <td id="userTableForm01:usersTableData:264:col3" class="rich-table-cell xx-datalist"> 
     <span style="margin-right:3px">Test2312</span> 
     Selenium 
    </td> 
    <td class="rich-table-cell xx-datalist " id="userTableForm01:usersTableData:264:col4" style="text-align:center;"> 
     <input type="checkbox" name="userTableForm01:usersTableData:264:j_id111" onclick="A4J.AJAX.Submit('userTableForm01',event,{'similarityGroupingId':'userTableForm01:usersTableData:264:j_id112','parameters':{'userTableForm01:usersTableData:264:j_id112':'userTableForm01:usersTableData:264:j_id112'} })" /> 
    </td> 
    <td id="userTableForm01:usersTableData:264:col6" class="rich-table-cell xx-datalist"> 
     <a id="userTableForm01:usersTableData:264:enable_link" href="#" style="margin-right:5px" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('userTableForm01'),{'userTableForm01:usersTableData:264:enable_link':'userTableForm01:usersTableData:264:enable_link'},'');}return false"> 
      <span id="userTableForm01:usersTableData:264:enable_link_text" class="xx-datalist">Enable</span> 
     </a> 
     <a id="userTableForm01:usersTableData:264:edit_link" href="#" style="margin-right:5px" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('userTableForm01'),{'userTableForm01:usersTableData:264:edit_link':'userTableForm01:usersTableData:264:edit_link'},'');}return false"> 
      <span id="userTableForm01:usersTableData:264:edit_link_text" class="xx-datalist">Edit</span> 
     </a> 
     <a id="userTableForm01:usersTableData:264:remove_link" href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('userTableForm01'),{'userTableForm01:usersTableData:264:remove_link':'userTableForm01:usersTableData:264:remove_link'},'');}return false"> 
      <span id="userTableForm01:usersTableData:264:remove_link_text" class="xx-datalist">Delete</span> 
     </a> 
    </td> 
</tr> 

现在,这是一个更大的表比所示,所以有很多TR与更多的用户。这些ID都是自动生成的,每次都会有所不同,我试图点击'Enable'链接,尽管我可以使用的唯一同一行唯一的东西是用户名seleniumtest2312,它给我带来了:

driver.findElement(By.xpath("//td[text()='seleniumtest2312']/following-sibling::td[3]/span[text()='Enable']")).click(); 

但它只是不会工作(没有这样的元素)。

如果有更好的方法来解决这个问题,我会很乐意尝试。

回答

0

您的XPath的最后一部分是有点过:

following-sibling::td[3]/span[text()='Enable'] 

因为<span>你要找的是不是<td>直接孩子。你可以试试这个XPath,而不是:

//td[.='seleniumtest2312']/following-sibling::td[3]/a/span[.='Enable'] 
+0

...我是一个耻辱,autoamted测试,但非常感谢发现错误:-) – Odecif

+0

没有问题,第二双眼睛是有用的,有时 – har07