web-dev-qa-db-fra.com

Selenium WebDriver et DropDown Boxes

Si je veux sélectionner une option d'une liste déroulante, il y a plusieurs façons de le faire. J'ai toujours utilisé:

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

Mais cela n'a pas fonctionné à chaque fois. Parfois, une autre option était sélectionnée. Alors j'ai googlé un peu et trouvé ce morceau de code qui marche à chaque fois:

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

Mais cela fonctionne vraiment très lentement. Si j'ai une longue liste avec de nombreux éléments, cela prend vraiment trop de temps. Ma question est donc la suivante: existe-t-il une solution qui fonctionne à chaque fois et est rapide?

37
tester

Vous pouvez essayer ceci:

IWebElement dropDownListBox = driver.findElement(By.Id("selection"));
SelectElement clickThis = new SelectElement(dropDownListBox);
clickThis.SelectByText("Germany");
46
Michael Bautista

Essayez ce qui suit:

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

Select droplist = new Select(driver.findElement(By.Id("selection")));   
droplist.selectByVisibleText("Germany");
24
StatusQuo

Essayez la classe d’appel de sélection et voyez si cela fait une différence?

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();  
  }
}
3
nilesh

Pour une raison étrange, la SelectElement pour webdriver (version 2.25.1.0) ne fonctionne pas correctement avec le firefoxdriver (Firefox 15). Parfois, il peut ne pas sélectionner une option dans une liste déroulante. Cela semble cependant fonctionner avec le chromedriver ... Ceci est un lien vers le chromedriver ... il suffit de le déposer dans le répertoire bin.

2
Skynet

Exemple pour sélectionner une option dans la liste déroulante:

Cliquez sur la liste déroulante en utilisant id ou csspath, xpath ou name. J'ai utilisé id ici.

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.
1
Murali

Enroulez simplement votre WebElement dans Select Object comme indiqué ci-dessous

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

Une fois cela fait, vous pouvez sélectionner la valeur requise de 3 manières. Considérons un fichier HTML comme celui-ci

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

Maintenant, pour identifier la liste déroulante

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

Pour sélectionner son option, dites 'Programmeur', vous pouvez le faire

dropdown.selectByVisibleText("Programmer ");

ou

 dropdown.selectByIndex(1);

ou

 dropdown.selectByValue("prog");

Bonne codage :)

0
Abhishek Singh

Je dois lutter pour trouver comment atteindre spécialement ceux qui sont nouveaux dans cet outil (comme moi)

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

espérons que cela aide les autres!

0
Nick Kahn
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
Emebet
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