如何从下拉列表中获取所有元素?

时间:2013-05-27 07:28:56

标签: selenium selenium-webdriver

如何从下拉列表中获取所有元素?我用过:

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

但我总是只获得第一个元素。

11 个答案:

答案 0 :(得分:7)

在bindigs中有一个为此设计的类。

您正在寻找Select班级:

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

您需要“找到”实际的select元素,而不是单个选项。找到select元素,让Selenium&amp; Select班为你完成剩下的工作。

您正在寻找类似(s是实际select元素)的内容:

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

Select类有一个方便的getOptions()方法。这将完全符合您的想法。

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

现在,您可以使用allOptions执行所需操作。

答案 1 :(得分:6)

这将有助于列出下拉列表中的所有元素:

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

    }

答案 2 :(得分:1)

Namita,

使用以下代码,您将获得选择框中可用的选项列表,然后单击一个。

列出选项= select.findElements(By.tagName(“option”));

    for(WebElement option : options){
        if(option.getText().equals("male")) {
            option.click();
            break;
        }
    }

答案 3 :(得分:1)

使用此希望它对您有所帮助。

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

        }

答案 4 :(得分:0)

List<WebElement> featureList;

featureList = Locate your Element;

for (WebElement i : featureList) {              
System.out.println("\n**********************  " + i.getText());
}

答案 5 :(得分: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);
        }

答案 6 :(得分: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());
}

答案 7 :(得分: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());

}

答案 8 :(得分:0)

这是一种获取所有下拉列表并返回列表的方法。

    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;
   }

希望它会对您有所帮助。

答案 9 :(得分:0)

我以Facebook的注册页面为例,它可能有助于您理解。

这是一个代码,用于从月份的下拉列表中获取所有月份的名称选项。

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

上面的代码的解释是

  1. 将所有元素存储在列表中。
  2. 声明一个空的数组列表以存储选项。
  3. 通过每个循环使用一次来提取所有选项并存储到ArrayList中。
  4. 将所有选项打印为列表。

希望这对您有帮助。 祝你好运!!

答案 10 :(得分:0)

有多种方法可以打印 option 元素中的文本。理想情况下,在与元素进行交互时,您需要使用Select类。要与<option>标签进行交互,您需要使用getOptions()方法。


演示

例如,打印中的 Day Month Year option元素中的文本着陆页https://www.facebook.com/,您需要为elementToBeClickable()引入WebDriverWait,然后可以使用以下Locator Strategies


“日期”下拉菜单中的选项

使用id属性:

  • 代码块:

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

“月份”下拉菜单中的选项

使用 stream()map()

  • 代码块:

    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);
    
  • 控制台输出:

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

“年份”下拉菜单中的选项使用一行代码

在一行代码中使用[tag:css_selectors]和 stream()map()

  • 代码行:

    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()));
    
  • 控制台输出:

    [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]