How can I get all elements from a drop down list? I used the code below:
List elements = driver.findElements(By.id(\"s\"));
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);
}
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,
- Storing all the elements in a list.
- Declaring an empty Array list for storing options.
- By using for each loop to extract all the options one by one and store into the ArrayList.
- Printing all options as a list.
Hope this will help you.! Best Luck.!!
There are multiple approaches to print the texts from the option elements of a drop-down-menu. Ideally while interacting with a html-select element you need to use the Select Class. Further to interact with the <option>
tags you need to use getOptions() method.
As an example to print the texts from the Day, Month and Year option
elements within facebook landing page https://www.facebook.com/
you need to induce WebDriverWait for the elementToBeClickable()
and you can use the following Locator Strategies.
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());
Using xpath and java-8 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]
Using [tag:css_selectors] and java-8 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]
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;
}
}
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.
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());
}