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");
user786045
la source
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
Solution en c #: stackoverflow.com/questions/5278281/…
Steve Cook

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()
janderssn
la source
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

thrasher
la source
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")
AlekseiPetrovski
la source
3

Essayez d'utiliser:

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

ou

selenium.select("id=items","index=3")
coolcub
la source
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
    }
}
Ben
la source
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
}
Praveen
la source
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.

Jophin P John
la source
-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.

Kartmcad
la source
4
-1 Manière trop compliquée et utilisant des méthodes obsolètes (RenderedWebElement)
Ardesco