2014-05-08 11 views
21

Ich bin Tests für meine Website mit Selenium IDE schreiben und Ich habe Probleme mit auf einem Knopf Selen Klick mit mit preceding-siblingSo verwenden XPath preceding-sibling richtig

<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> 

Mein Weg

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

Antwort

30

Sie brauchen nicht Ebene bis gehen und .. verwenden, da alle Tasten auf der gleichen Ebene sind:

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

Ich mag auch wie Locators von oben nach unten bauen:

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

es ist ziemlich einfach, wie wir btn-group mit button[contains(.,'Arcade Reader')] nur die Suche und bekommt es button[@name='settings']

ist das nur eine weitere Option ist XPath)

zu bauen

was ist der Gewinn Wrapperelement der Suche: Sie können es nach dem Verfahren (zB in Java) zurückkehren können und bauen nur Selen Konstruktionen wie:

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

oder noch mehr vereinfachen

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