Nous utilisons Selenium WebDriver et JBehave pour exécuter des tests "d'intégration" sur notre application Web. J'ai une méthode qui entrera une valeur dans une entrée de formulaire.
@When("I enter $elementId value $value")
public void enterElementText(final String elementId, final String value) {
final WebElement webElement = webdriver.findElement(By.id(elementId));
webElement.clear();
webElement.sendKeys(value);
}
Mais lorsque j'essaie de l'utiliser pour sélectionner un élément dans une liste déroulante, il (sans surprise) échoue
Java.lang.UnsupportedOperationException: vous ne pouvez définir que la valeur des éléments qui sont des éléments d'entrée
Comment sélectionner une valeur dans le combo?
Voici comment faire:
@When("I select $elementId value $value")
public void selectComboValue(final String elementId, final String value) {
final Select selectBox = new Select(web.findElement(By.id(elementId)));
selectBox.selectByValue(value);
}
Le pack d'assistance de Selenium contient tout ce dont vous avez besoin:
using OpenQA.Selenium.Support.UI;
SelectElement select = new SelectElement(driver.findElement( By.id( elementId ) ));
select.SelectByText("Option3");
select.Submit();
Vous pouvez l'importer via NuGet en tant que package séparé: http://nuget.org/packages/Selenium.Support
En utilisant ext js combobox typeAhead pour rendre les valeurs visibles dans l'interface utilisateur.
var theCombo = new Ext.form.ComboBox({
...
id: combo_id,
typeAhead: true,
...
});
driver.findElement(By.id("combo_id-inputEl")).clear();
driver.findElement(By.id("combo_id-inputEl")).sendKeys("The Value you need");
driver.findElement(By.id("combo_id-inputEl")).sendKeys(Keys.ARROW_DOWN);
driver.findElement(By.id("combo_id-inputEl")).sendKeys(Keys.ENTER);
Si cela ne fonctionne pas, cela vaut également la peine d'essayer
driver.findElement(By.id("combo_id-inputEl")).sendKeys("The Value you need");
driver.findElement(By.className("x-boundlist-item")).click();
Le paradigme du sélénium est que vous êtes censé simuler ce qu'un utilisateur ferait dans la vie réelle. Ce serait donc un clic ou une touche de navigation.
Actions builder = new Actions( driver );
Action action = builder.click( driver.findElement( By.id( elementId ) ) ).build();
action.perform();
Tant que vous obtenez un sélecteur qui fonctionne dans findElement, vous ne devriez pas avoir de problème avec lui. J'ai trouvé que les sélecteurs CSS étaient un meilleur pari pour les choses impliquant plusieurs éléments. Avez-vous un exemple de page?