96 votes

Comment sélectionner/obtenir une option de liste déroulante dans Selenium 2 ?

Je suis en train de convertir mon code Selenium 1 en Selenium 2 et je ne trouve pas de moyen facile de sélectionner un label dans un menu déroulant ou d'obtenir la valeur sélectionnée d'un menu déroulant. Savez-vous comment faire cela dans Selenium 2 ?

Voici deux déclarations qui fonctionnent dans Selenium 1 mais pas dans 2 :

browser.select("//path_to_drop_down", "Value1");
browser.getSelectedValue("//path_to_drop_down");

0 votes

Avez-vous essayé de le localiser en utilisant Firebug ? L'utilisation du xpath généré avec Firebug/xpather peut vous faciliter la tâche.

1 votes

La question n'est pas de localiser ou de trouver la liste déroulante. Elle concerne la sélection d'une étiquette dans cette liste déroulante. Je peux localiser la liste déroulante mais je ne sais pas quelle méthode appeler dans Selenium 2 puisque select() et getSelectedValue() ou getSelectedLabel() ne fonctionnent pas dans Selenium 2.

0 votes

184voto

janderssn Points 914

Jetez un coup d'œil à la section sur remplir des formulaires à l'aide de webdriver dans la documentation de selenium et la javadoc pour l'interface de webdriver. Sélectionnez classe.

Pour sélectionner une option en fonction de l'étiquette :

Select select = new Select(driver.findElement(By.xpath("//path_to_drop_down")));
select.deselectAll();
select.selectByVisibleText("Value1");

Pour obtenir la première valeur sélectionnée :

WebElement option = select.getFirstSelectedOption()

0 votes

By.xpath("//path_to_drop_down"). Je remplacerais cela par un localisateur comme By.name et ainsi de suite.

2 votes

DeselectAll déclenchera une UnsupportedOperationException si la sélection ne prend pas en charge les sélections multiples.

4 votes

En C#, utilisez la classe SelectElement, ainsi : SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId"‌​)));

5voto

thrasher Points 11
driver.findElement(By.id("id_dropdown_menu")).click();
driver.findElement(By.xpath("xpath_from_seleniumIDE")).click();

bonne chance

4voto

user1515962 Points 113

En ruby pour une utilisation constante, ajoutez suivre :

module Selenium
  module WebDriver
    class Element
      def select(value)
        self.find_elements(:tag_name => "option").find do |option|
          if option.text == value
            option.click
              return
           end
       end
    end
  end
end

et vous pourrez sélectionner la valeur :

browser.find_element(:xpath, ".//xpath").select("Value")

3voto

coolcub Points 21

Essayez d'utiliser :

selenium.select("id=items","label=engineering")

ou

selenium.select("id=items","index=3")

0voto

Ben Points 154

Une option similaire à celle postée ci-dessus par janderson serait d'utiliser simplement la méthode .GetAttribute dans Selenium 2. En utilisant cette méthode, vous pouvez saisir tout élément qui a une valeur ou une étiquette spécifique que vous recherchez. Cela peut être utilisé pour déterminer si un élément a une étiquette, un style, une valeur, etc. Une façon courante de procéder consiste à parcourir en boucle les éléments de la liste déroulante jusqu'à ce que vous trouviez celui que vous voulez et que vous le sélectionniez. En C#

int items = driver.FindElement(By.XPath("//path_to_drop_Down")).Count(); 
for(int i = 1; i <= items; i++)
{
    string value = driver.FindElement(By.XPath("//path_to_drop_Down/option["+i+"]")).GetAttribute("Value1");
    if(value.Conatains("Label_I_am_Looking_for"))
    {
        driver.FindElement(By.XPath("//path_to_drop_Down/option["+i+"]")).Click(); 
        //Clicked on the index of the that has your label / value
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X