2011-08-29 15 views
36

Se si desidera selezionare un'opzione di una casella a discesa, ci sono diversi modi per farlo. Ho sempre usato:Selenium WebDriver e DropDown Boxes

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

Ma che non ha funzionato ogni volta. A volte è stata selezionata un'altra opzione. Così ho cercato su google un po 'e ho trovato questo pezzo di codice che funziona ogni volta:

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

Ma che funziona davvero molto lento. Se ho una lunga lista con molti elementi, ci vuole davvero troppo tempo. Quindi la mia domanda è, c'è una soluzione che funziona ogni volta ed è veloce?

risposta

46

Si potrebbe provare questo:

IWebElement dropDownListBox = driver.findElement(By.Id("selection")); 
SelectElement clickThis = new SelectElement(dropDownListBox); 
clickThis.SelectByText("Germany"); 
+24

Credo che questo sia un po 'di codice C# o qualcosa del genere? Ma mi ha aiutato a capire il seguente codice: WebElement dropDownListBox = driver.findElement (By.id ("selection")); \t \t Selezionare clickThis = new Select (dropDownListBox); \t \t clickThis.selectByValue ("Germania"); Molto più veloce! Grazie! – tester

+2

Quale pacchetto deve essere importato per IWebElement e SelectElement? –

+0

grazie tester, quel codice funziona per selenio2. –

3

provare il Select classe helper e vedere se questo fa alcuna differenza?

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

sry, questo è lento come la mia soluzione. – tester

23

Provare quanto segue:

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

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

Sì, il codice sopra riportato funziona bene per me –

+0

Qual è l'implementazione di scala di esso? Grazie – Way

0

devo lottare per trovare come raggiungere particolare coloro che sono nuovi a questo strumento (come me)

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

spero che questo aiuti gli altri!

2

Per qualche strana ragione lo SelectElement per il webdriver (versione 2.25.1.0) non funziona correttamente con firefoxdriver (Firefox 15). A volte potrebbe non selezionare un'opzione da un elenco a discesa. Sembra, tuttavia, che funzioni con il chromedriver ... This è un link al chromedriver ... basta lasciarlo nella directory del cestino.

0
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
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

Funziona perfettamente. – Emebet

0

Esempio per selezionare un'opzione dal menu a tendina:

Cliccare sulla discesa utilizzando l'ID o csspath o XPath o il nome. Ho usato l'id qui.

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. 
-2

È possibile utilizzare questo

(new SelectElement(driver.FindElement(By.Id(""))).SelectByText(""); 
0

Basta avvolgere la WebElement in Seleziona oggetto come illustrato di seguito

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

Una volta fatto questo è possibile selezionare il valore desiderato in 3 modi.Si consideri un file HTML come questo

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

Ora per identificare discesa non

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

Per selezionare l'opzione di dire 'Programmatore' si può fare

dropdown.selectByVisibleText("Programmer "); 

o

dropdown.selectByIndex(1); 

o

dropdown.selectByValue("prog"); 

Felice Coding :)

Problemi correlati