Comment sélectionner / obtenir l'option déroulante dans Selenium 2


96

Je convertis mon code de sélénium 1 en sélénium 2 et je ne trouve pas de moyen facile de sélectionner une étiquette 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");

Avez-vous essayé de le localiser à l'aide de Firebug? L'utilisation du xpath généré avec Firebug / xpather peut faciliter les choses.

1
La question n'est pas de localiser ou de trouver la liste déroulante. Il s'agit de sélectionner 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 car select () et getSelectedValue () ou getSelectedLabel () ne fonctionnent pas dans Selenium 2.
user786045

Réponses:


184

Jetez un œil à la section sur le remplissage de formulaires à l' aide de webdriver dans la documentation de sélénium et le javadoc pour la classe Select .

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()

By.xpath ("// chemin_pour_drop_down"). Je remplacerais cela par un localisateur comme By.name, etc.
Daniel

2
deselectAll lancera une exception UnsupportedOperationException si la sélection ne prend pas en charge plusieurs sélections
Tom Hartwell

4
En C #, utilisez la classe SelectElement, donc:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee

Pour info, ce code n'a pas pu sélectionner une liste déroulante jusqu'à ce que je commente cette ligne: //select.deselectAll (); Ensuite, cela a commencé à fonctionner. Votre kilométrage peut varier.
gorbysbm

1
Notez que ce deselectAlln'est valable que pour la sélection multiple: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/… .
user1205577

5
driver.findElement(By.id("id_dropdown_menu")).click();
driver.findElement(By.xpath("xpath_from_seleniumIDE")).click();

bonne chance


4

en rubis pour une utilisation constante, ajoutez suit:

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")

3

Essayez d'utiliser:

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

ou

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

0

Une option similaire à ce qui a été publié ci-dessus par janderson serait d'utiliser simplement la méthode .GetAttribute dans le sélénium 2. En utilisant cela, vous pouvez récupérer n'importe quel é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 le faire est de parcourir les éléments de la liste déroulante jusqu'à ce que vous trouviez celui que vous voulez et 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
    }
}

0

vous pouvez faire comme ceci:

public void selectDropDownValue(String ValueToSelect) 
{

    webelement findDropDownValue=driver.findElements(By.id("id1"))    //this will find that dropdown 

    wait.until(ExpectedConditions.visibilityOf(findDropDownValue));    // wait till that dropdown appear

    super.highlightElement(findDropDownValue);   // highlight that dropdown     

    new Select(findDropDownValue).selectByValue(ValueToSelect);    //select that option which u had passed as argument
}

0

Cette méthode renverra la valeur sélectionnée pour la liste déroulante,

public static String getSelected_visibleText(WebDriver driver, String elementType, String value)
  {
    WebElement element = Webelement_Finder.webElement_Finder(driver, elementType, value);
   Select Selector = new Select(element);
    Selector.getFirstSelectedOption();
    String textval=Selector.getFirstSelectedOption().getText();
    return textval;
  }

pendant ce temps

String textval = Selector.getFirstSelectedOption ();

element.getText ();

Renvoie tous les éléments de la liste déroulante.


-2

Ceci est le code pour sélectionner la valeur dans la liste déroulante

La valeur de selectlocator sera le xpath ou le nom de la liste déroulante, et pour optionLocator aura la valeur à sélectionner dans la liste déroulante.

public static boolean select(final String selectLocator,
        final String optionLocator) {
    try {
        element(selectLocator).clear();
        element(selectLocator).sendKeys(Keys.PAGE_UP);
        for (int k = 0; k <= new Select(element(selectLocator))
                .getOptions().size() - 1; k++) {
            combo1.add(element(selectLocator).getValue());
            element(selectLocator).sendKeys(Keys.ARROW_DOWN);
        }
        if (combo1.contains(optionLocator)) {
            element(selectLocator).clear();
            new Select(element(selectLocator)).selectByValue(optionLocator);
            combocheck = element(selectLocator).getValue();
            combo = "";

            return true;
        } else {
            element(selectLocator).clear();
            combo = "The Value " + optionLocator
                    + " Does Not Exist In The Combobox";
            return false;
        }
    } catch (Exception e) {
        e.printStackTrace();
        errorcontrol.add(e.getMessage());
        return false;
    }
}



private static RenderedWebElement element(final String locator) {
    try {

        return (RenderedWebElement) drivers.findElement(by(locator));
    } catch (Exception e) {
        errorcontrol.add(e.getMessage());
        return (RenderedWebElement) drivers.findElement(by(locator));
    }
}

Merci,

Rekha.


4
-1 Manière trop compliquée et utilisant des méthodes obsolètes (RenderedWebElement)
Ardesco
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.