Ik schrijf tests voor mijn site met behulp van Selenium IDE en ik heb problemen met het hebben van selenium op een knop met behulp van de voorafgaande broer-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>
Mijn pad
xpath=//button[contains(.,'Arcade Reader')]/../preceding-sibling::button[@name='settings']
Antwoord 1, Autoriteit 100%
U hoeft niet op niveau omhoog te gaan en te gebruiken ..
Aangezien alle knoppen op hetzelfde niveau staan:
//button[contains(.,'Arcade Reader')]/preceding-sibling::button[@name='settings']
Antwoord 2
Ik hou ook van locators bouwen van maximaal naar beneden als:
//div[contains(@class,'btn-group')][./button[contains(.,'Arcade Reader')]]/button[@name='settings']
Het is vrij eenvoudig, zoals we gewoon zoeken btn-group
met button[contains(.,'Arcade Reader')]
en ontvang het button[@name='settings']
Dat is gewoon een andere optie om XPath-locators
te bouwen
Wat is de winst van het zoeken naar het wrapper-element: je kunt het per methode retourneren (voorbeeld in java) en gewoon seleniumconstructies bouwen zoals:
getGroupByName("Arcade Reader").find("button[name='settings']");
getGroupByName("Arcade Reader").find("button[name='delete']");
of zelfs meer vereenvoudigen
getGroupButton("Arcade Reader", "delete").click();