2014-05-08 10 views
21

sto scrivendo test per il mio sito utilizzando selenio IDE e sto avendo difficoltà di avere il selenio clic su un pulsante utilizzando preceding-siblingCome usare XPath preceding-sibling correttamente

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

Il mio percorso

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

risposta

30

non è necessario andare livello e utilizzare .. in quanto tutti i pulsanti sono sullo stesso livello:

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

Mi piace anche a costruire localizzatori da fino a fondo come:

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

è abbastanza semplice, come abbiamo appena cerchiamo btn-group con button[contains(.,'Arcade Reader')] e ottiene è button[@name='settings']

che è solo un'altra opzione di costruire locatori XPath)

qual è il profitto di ricerca dell'elemento avvolgitore: si può tornare con il metodo (ad esempio in Java) e solo costruire costruzioni selenio come:

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

o anche semplificare più

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