8

How can I get all elements from a drop down list? I used the code below:

List<WebElement> elements = driver.findElements(By.id("s"));

But I am always getting the first element only.

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
Namitha
  • 255
  • 3
  • 9
  • 16
  • can you paste html code of it – Omkar May 27 '13 at 07:31
  • This might be useful to you. [http://stackoverflow.com/questions/9562853/how-to-get-all-options-in-a-drop-down-list-by-selenium-webdriver-c][1] [1]: http://stackoverflow.com/questions/9562853/how-to-get-all-options-in-a-drop-down-list-by-selenium-webdriver-c – Learner May 27 '13 at 07:36

12 Answers12

11

There is a class designed for this in the bindigs.

You are looking for the Select class:

https://code.google.com/p/selenium/source/browse/java/client/src/org/openqa/selenium/support/ui/Select.java

You would need to 'find' the actual select element, not the individual options. Find that select element, and let Selenium & the Select class do the rest of the work for you.

You'd be looking for something like (s being the actual select element):

WebElement selectElement = driver.findElement(By.id("s");
Select select = new Select(selectElement);

The Select class has a handy getOptions() method. This will do exactly what you think it does.

List<WebElement> allOptions = select.getOptions();

Now you can do what you want with allOptions.

Arran
  • 24,648
  • 6
  • 68
  • 78
9

This will help to list all the elements from the dropdown:

    Select dropdown = new Select(driver.findElement(By.id("id")));

    //Get all options
    List<WebElement> dd = dropdown.getOptions();

    //Get the length
    System.out.println(dd.size());

    // Loop to print one by one
    for (int j = 0; j < dd.size(); j++) {
        System.out.println(dd.get(j).getText());

    }
ISGovind
  • 123
  • 1
  • 6
0

Namita,

with below code you will get list of options available in select box and you click on one.

List options = select.findElements(By.tagName("option"));

    for(WebElement option : options){
        if(option.getText().equals("male")) {
            option.click();
            break;
        }
    }
Kapil
  • 1,790
  • 1
  • 16
  • 32
0

Use this hope it will helpful to you.

List WebElement allSuggestions = driver.findElements(By.xpath("Your Xpath"));      
        for (WebElement suggestion : allSuggestions)
     {
        System.out.println(suggestion.getText());

        }
Naveen Chhaniwal
  • 704
  • 3
  • 6
  • 24
Chetan
  • 2,360
  • 3
  • 18
  • 33
0
List<WebElement> featureList;

featureList = Locate your Element;

for (WebElement i : featureList) {              
System.out.println("\n**********************  " + i.getText());
}
  • Why should the OP ___try this___? **Good answers** will always have an explanation of what was done and why it was done that way, not only for the OP but for future visitors to SO that may find this question and be reading your answer. – RiggsFolly Sep 19 '17 at 12:31
0
WebElement ele=driver.findElement(By.xpath(".//*[@id='month']"));
        List<WebElement> x = ele.findElements(By.tagName("option"));
        for(WebElement ele1:x) {
            String y=ele1.getAttribute("innerHTML");
            System.out.println(y);
        }
  • 2
    While this code may answer the question, providing additional context regarding why and/or how this code answers the question improves its long-term value. – rollstuhlfahrer Feb 21 '18 at 07:20
0
String [] ex = {"A","b","c","d"};

List<WebElement> Str  = driver.findElements(By.xpath("//*[@id=\"institutionName\"]/option"));

for (int i = 0; i < ex.length; i++) {
    System.out.println(Str.get(i).getText());  
    Assert.assertEquals(ex[i], Str.get(i).getText());
}
Andrew Regan
  • 5,087
  • 6
  • 37
  • 73
0
Select drop = new Select(driver.findElement(By.id("id")));

List<WebElement> dd = drop.getOptions();

System.out.println(dd.size());

for (int j = 0; j < dd.size(); j++) {
    System.out.println(dd.get(j).getText());

}
0

Here is a method to get all dropdowns and return in list.

    public List getDropDownList(String Xpath) {
    WebElement dropdowns = driver.findElement(By.xpath(Xpath));
    Select select = new Select(dropdowns);
    List<String> dropdown = new ArrayList<String>();
    List<WebElement> allOptions = select.getAllSelectedOptions();
    Iterator<WebElement> itr = allOptions.iterator();
    while (itr.hasNext()) {
        String st = itr.next().getText();
        dropdown.add(st);
     }
    return dropdown;
   }

Hope it will help you.

Ajeet Yadawa
  • 135
  • 3
  • 16
0

I took Facebook's registration page as an example it may help to understand.

Here is a code to get all month's names option as a list from the month's dropdown list.

List<WebElement> option = driver.findElements((By.xpath("//[@id='month']/option")));

ArrayList a = new ArrayList();

        for (WebElement str: option)
        {
           String s =  str.getText();
           if(!s.equals("Month")) {
               a.add(s);
         }
           else {
               continue;
           }
        }

System.out.println("The Output is: "+ a);

Explanation of the above code is,

  1. Storing all the elements in a list.
  2. Declaring an empty Array list for storing options.
  3. By using for each loop to extract all the options one by one and store into the ArrayList.
  4. Printing all options as a list.

Hope this will help you.! Best Luck.!!

sanjeev
  • 1,664
  • 19
  • 35
0

There are multiple approaches to print the texts from the option elements of a . Ideally while interacting with a element you need to use the Select Class. Further to interact with the <option> tags you need to use getOptions() method.


Demonstration

As an example to print the texts from the Day, Month and Year option elements within landing page https://www.facebook.com/ you need to induce WebDriverWait for the elementToBeClickable() and you can use the following Locator Strategies.


Options from Day Dropdown

Using id attribute:

  • Code Block:

    WebElement dayElement = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.id("day")));
    Select selectDay = new Select(dayElement);
    List<WebElement> dayList = selectDay.getOptions();
    for (int i=0; i<dayList.size(); i++)
        System.out.println(dayList.get(i).getText());
    

Options from Month Dropdown

Using and stream() and map():

  • Code Block:

    Select selectMonth = new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//select[@id='month']"))));
    List<String> myMonths = selectMonth.getOptions().stream().map(element->element.getText()).collect(Collectors.toList());
    System.out.println(myMonths);
    
  • Console Output:

    [Month, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sept, Oct, Nov, Dec]
    

Options from Year Dropdown using a single line of code

Using [tag:css_selectors] and stream() and map() in a single line of code:

  • Line of code:

    System.out.println(new Select(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("select#year")))).getOptions().stream().map(element->element.getText()).collect(Collectors.toList()));
    
  • Console Output:

    [Year, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995, 1994, 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986, 1985, 1984, 1983, 1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975, 1974, 1973, 1972, 1971, 1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959, 1958, 1957, 1956, 1955, 1954, 1953, 1952, 1951, 1950, 1949, 1948, 1947, 1946, 1945, 1944, 1943, 1942, 1941, 1940, 1939, 1938, 1937, 1936, 1935, 1934, 1933, 1932, 1931, 1930, 1929, 1928, 1927, 1926, 1925, 1924, 1923, 1922, 1921, 1920, 1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912, 1911, 1910, 1909, 1908, 1907, 1906, 1905]
    
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
0

//Identify the dropdown

Select sel = new Select(driver.findElement(By.xpath("//div/input"));

//Get list of all options in the dropdown

List lst = sel.getOptions();

//To get text value of all dropdown values

List textValues = sel.getOptions().stream().map(WebElement::getText).collect(Collectors.toList());