7

如何从下拉列表中获取所有元素?我使用了下面的代码:

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

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

4

11 回答 11

11

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

您正在寻找Select课程:

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

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

您会寻找类似(s作为实际select元素)的东西:

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

该类Select有一个方便的getOptions()方法。这将完全按照您的想法进行。

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

现在你可以用allOptions.

于 2013-05-27T19:26:38.863 回答
9

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

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

    }
于 2015-07-23T18:14:51.477 回答
0

使用这个希望对你有帮助。

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

        }
于 2013-05-28T10:37:27.527 回答
0

纳米塔,

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

列表选项 = select.findElements(By.tagName("option"));

    for(WebElement option : options){
        if(option.getText().equals("male")) {
            option.click();
            break;
        }
    }
于 2013-05-27T12:02:48.630 回答
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());
}
于 2019-09-17T06:21:33.020 回答
0

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


示范

例如,要在登录页面中打印来自DayMonthYear option元素的文本,您需要诱导WebDriverWait并且您可以使用以下Locator Strategieshttps://www.facebook.com/elementToBeClickable()


日下拉选项

使用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]
    

使用单行代码的 Year Dropdown 选项

使用 [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]
    
于 2020-07-25T21:20:49.630 回答
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;
   }

希望它会帮助你。

于 2019-11-28T13:37:35.760 回答
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());

}
于 2019-11-22T07:15:21.760 回答
0
List<WebElement> featureList;

featureList = Locate your Element;

for (WebElement i : featureList) {              
System.out.println("\n**********************  " + i.getText());
}
于 2017-09-19T09:43:51.473 回答
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);
        }
于 2018-02-21T05:55:29.370 回答
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. 通过使用 for each 循环将所有选项一一提取并存储到 ArrayList 中。
  4. 将所有选项打印为列表。

希望对你有帮助。!好运。!!

于 2020-02-03T09:48:19.410 回答