J'ai un contrôle de sélection sur mon site. J'utilise des objets de page pour interagir avec la page. Si je le fais (avec les 2 premières lignes de ma classe et la selectByValue
dans ma méthode)
@FindBy(id="foo")
private Select foo;
foo.selectByValue("myValue");
Il échoue avec un pointeur nul. J'ai aussi essayé sans le @FindBy
.
Maintenant, si je fais cela dans ma méthode, tout fonctionne bien et sélectionne le bon élément
Select foo = new Select(sDriver.findElement(By.id("foo")));
foo.selectByValue("myValue");
Voici l'extrait Web réel pour ce contrôle (édité pour protéger l'innocent)
<select id="foo" name="service_name">
<option selected="selected" value="one">one</option>
<option value="two">two</option>
<option value="three">three</option>
</select>
Laissez-moi vous dire que j'ai un problème avec mon problème mais je ne comprends pas pourquoi le chemin " normal " ne fonctionne pas.
C'est parce que la classe Select
a ce constructeur:
Select(WebElement element)
Voir le Javadoc
Donc, si vous faites quelque chose comme ça:
@FindBy(id="foo")
private WebElement wannabeSelect;
Select realSelect = new Select(wannabeSelect);
realSelect.selectByValue("myValue");
Ça devrait marcher.
Au fait, j'utilise la même approche que vous dans la "solution de contournement" car je ne veux pas lancer un nouvel objet WebElement lorsque j'ai besoin de l'objet Select. Mais de toute façon, le
sDriver.findElement(By.id("foo"));
renvoie WebElement
, c’est pourquoi il fonctionne. Vous pouvez aussi faire ceci:
WebElement wannabeSelect = sDriver.findElement(By.id("foo"));
Select foo = new Select(wannabeSelect);
Il existe deux manières de sélectionner la valeur de l’option:
Un:
// Denotes option value - technical name
select.selectByValue(fieldValue);
Deux:
// Denotes option text that is actually visible to be selected
select.selectByVisibleText(fieldValue);
Une autre façon d’y parvenir est d’utiliser la méthode ci-dessous pour toutes mes boîtes de sélection déroulantes en ligne. Pass id et sélection et ça marche
public void onchangedropdownselection(String object, String value) {
driver.findElement(By.id(object)).sendKeys(value);
driver.findElement(By.id(object)).sendKeys(Keys.UP);
driver.findElement(By.id(object)).sendKeys(Keys.DOWN);
}
En faisant monter et descendre nous initialisons le script onchange .......