Estoy escribiendo pruebas para mi sitio utilizando Selenium IDE y estoy teniendo problemas con tener selenio haga clic en un botón utilizando precedente-hermano
<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>
Mi ruta
xpath=//button[contains(.,'Arcade Reader')]/../preceding-sibling::button[@name='settings']
También me gusta construir localizadores de arriba a abajo como:
//div[contains(@class,'btn-group')][./button[contains(.,'Arcade Reader')]]/button[@name='settings']
Es bastante sencillo, ya que sólo buscamos btn-group
con button[contains(.,'Arcade Reader')]
y obtenemos su button[@name='settings']
.
Esta es otra opción para construir localizadores xPath
Cuál es el beneficio de buscar el elemento wrapper: puedes devolverlo por método (ejemplo en java) y simplemente construir construcciones selenium como:
getGroupByName("Arcade Reader").find("button[name='settings']");
getGroupByName("Arcade Reader").find("button[name='delete']");
o incluso simplificar más
getGroupButton("Arcade Reader", "delete").click();