如何正确使用XPath中的preceding-sibling?

57

我正在使用 Selenium IDE 为我的网站编写测试,但在使用 preceding-sibling 单击按钮时遇到了问题。

<td>
<div class="btn-group">
<button class="btn btn btn-danger block" title="Warning, Delete" name="delete" type="button">
<button class="btn btn btn-default block" title="View History" name="history" type="button">
<button class="btn btn btn-default block" title="View Settings" name="settings" type="button">
<button class="btn btn btn-default block" name="device" type="button">
<span class="glyphicon glyphicon-pencil"/>
 Arcade Reader
</button>
</div>
</td>

我的路径

xpath=//button[contains(.,'Arcade Reader')]/../preceding-sibling::button[@name='settings']
2个回答

85

你不需要升级并使用..,因为所有按钮都在同一级别:

//button[contains(.,'Arcade Reader')]/preceding-sibling::button[@name='settings']

3

我也喜欢从上到下构建定位器,例如:

//div[contains(@class,'btn-group')][./button[contains(.,'Arcade Reader')]]/button[@name='settings']

这很简单,我们只需要用 button[contains(.,'Arcade Reader')]btn-group 中搜索,并获取它的 button[@name='settings']

这只是构建xPath定位器的另一种选择

搜索包装元素的好处是:您可以通过方法(例如在Java中)返回它,并且只需构建类似于Selenium的结构:

getGroupByName("Arcade Reader").find("button[name='settings']");
getGroupByName("Arcade Reader").find("button[name='delete']");

甚至可以更简化
getGroupButton("Arcade Reader", "delete").click();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接