Selenium WebDriver и DropDown Boxes - PullRequest
       13

Selenium WebDriver и DropDown Boxes

41 голосов
/ 29 августа 2011

Если я хочу выбрать опцию из выпадающего списка, есть несколько способов сделать это. Я всегда использовал:

driver.findElement(By.id("selection")).sendKeys("Germany");

Но это не сработало каждый раз. Иногда был выбран другой вариант. Поэтому я немного погуглил и нашел этот фрагмент кода, который работает каждый раз:

WebElement select = driver.findElement(By.id("selection"));
    List<WebElement> options = select.findElements(By.tagName("option"));
    for (WebElement option : options) {
        if("Germany".equals(option.getText()))
            option.click();
    }

Но это работает очень медленно. Если у меня длинный список со многими предметами, это действительно займет слишком много времени. Поэтому мой вопрос: есть ли решение, которое работает каждый раз и быстро?

Ответы [ 10 ]

47 голосов
/ 29 августа 2011

Вы можете попробовать это:

IWebElement dropDownListBox = driver.findElement(By.Id("selection"));
SelectElement clickThis = new SelectElement(dropDownListBox);
clickThis.SelectByText("Germany");
25 голосов
/ 11 мая 2012

Попробуйте следующее:

import org.openqa.selenium.support.ui.Select;

Select droplist = new Select(driver.findElement(By.Id("selection")));   
droplist.selectByVisibleText("Germany");
4 голосов
/ 30 августа 2011

Попробуйте вспомогательный класс Select и посмотрите, имеет ли это какое-то значение?

String valueToSelect= "Germany";
WebElement select = driver.findElement(By.id("selection"));
Select dropDown = new Select(select);           
String selected = dropDown.getFirstSelectedOption().getText();
if(selected.equals(valueToSelect)) {//do stuff already selected}
List<WebElement> Options = dropDown.getOptions();
for(WebElement option:Options){
  if(option.getText().equals(valueToSelect)){
       option.click();  
  }
}
2 голосов
/ 13 сентября 2012

По какой-то странной причине SelectElement для веб-драйвера (версия 2.25.1.0) неправильно работает с firefoxdriver (Firefox 15).Иногда он может не выбрать опцию из выпадающего списка.Тем не менее, похоже, что он работает с chromedriver ... Этот является ссылкой на chromedriver ... просто поместите его в корзину.

1 голос
/ 11 декабря 2014

Пример выбора опции из выпадающего списка:

Нажмите на выпадающий список, используя id или csspath или xpath или имя.Я использовал идентификатор здесь.

driver.findElement(By.id("dropdownlistone")).click(); // To click on drop down list
driver.findElement(By.linkText("india")).click(); // To select a data from the drop down list.
0 голосов
/ 11 июля 2017

Просто оберните ваш WebElement в Select Object, как показано ниже

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

Как только это будет сделано, вы можете выбрать нужное значение тремя способами. Рассмотрим HTML-файл, подобный этому

<html>
<body>
<select id = "designation">
<option value = "MD">MD</option>
<option value = "prog"> Programmer </option>
<option value = "CEO"> CEO </option>
</option>
</select>
<body>
</html>

Теперь для определения выпадающего списка сделайте

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

Чтобы выбрать опцию, скажем, «Программист», вы можете сделать

dropdown.selectByVisibleText("Programmer ");

или

 dropdown.selectByIndex(1);

или

 dropdown.selectByValue("prog");

Happy Coding:)

0 голосов
/ 27 апреля 2015

Вы можете использовать это

(new SelectElement(driver.FindElement(By.Id(""))).SelectByText("");
0 голосов
/ 23 марта 2013
select = driver.FindElement(By.CssSelector("select[uniq id']"));
                selectElement = new SelectElement(select);
                var optionList =
                    driver.FindElements(By.CssSelector("select[uniq id']>option"));
                selectElement.SelectByText(optionList[GenerateRandomNumber(1, optionList.Count())].Text);
0 голосов
/ 20 марта 2013
public static void mulptiTransfer(WebDriver driver, By dropdownID, String text, By to)
{   
    String valuetext = null;
    WebElement element = locateElement(driver, dropdownID, 10);
    Select select = new Select(element);
    List<WebElement> options = element.findElements(By.tagName("option"));
    for (WebElement value: options) 
    {
        valuetext = value.getText();
        if (valuetext.equalsIgnoreCase(text))
        {
            try
            {
                select.selectByVisibleText(valuetext);
                locateElement(driver, to, 5).click();                           
                break;
            }
            catch (Exception e)
            {
                System.out.println(valuetext + "Value not found in Dropdown to Select");
            }       
        }
    }
}
0 голосов
/ 08 августа 2012

Я должен изо всех сил пытаться найти, как достичь особенно тех, кто плохо знаком с этим инструментом (как я)

C # код:

IWebElement ddl = ffDriver.FindElement(By.Id("ddlGoTo")); 
OpenQA.Selenium.Support.UI.SelectElement clickthis = new OpenQA.Selenium.Support.UI.SelectElement(ddl);
clickthis.SelectByText("Your Text");

надеюсь, что это поможет другим!

...