web-dev-qa-db-ja.com

XPathの前の兄弟を正しく使用する方法

Selenium IDEを使用してサイトのテストを作成していますが、Seleniumが前の兄弟を使用してボタンをクリックするのに問題があります

<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']
37
jquerynoob

すべてのボタンが同じレベルにあるため、レベルを上げて..を使用する必要はありません。

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

ロケーターを下から次のように構築することも好きです。

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

btn-groupbutton[contains(.,'Arcade Reader')]で検索してbutton[@name='settings']を取得するだけなので、非常に簡単です。

これは、xPathロケーターを構築するためのもう1つのオプションです

ラッパー要素を検索する利点は何ですか:メソッド(Javaの例)で返すことができ、次のようなSelenium構造を構築できます。

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

またはさらに簡素化

getGroupButton("Arcade Reader", "delete").click();
2