web-dev-qa-db-fra.com

sélénium webdriver sélection élément

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. 

9
ducati1212

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);
22
Pavel Janicek

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);
2
Ajith Moni

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

1
Satish