Selenium WebDriver e DropDown Boxes

Se voglio selezionare un’opzione di una casella a discesa, ci sono diversi modi per farlo. Ho sempre usato:

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

Ma 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 options = select.findElements(By.tagName("option")); for (WebElement option : options) { if("Germany".equals(option.getText())) option.click(); } 

Ma funziona davvero molto lentamente. 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?

Potresti provare questo:

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

Prova quanto segue:

 import org.openqa.selenium.support.ui.Select; Select droplist = new Select(driver.findElement(By.Id("selection"))); droplist.selectByVisibleText("Germany"); 

Prova la class Select helper e vedi se questo fa qualche 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 Options = dropDown.getOptions(); for(WebElement option:Options){ if(option.getText().equals(valueToSelect)){ option.click(); } } 

Per qualche strana ragione il 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. Tuttavia, sembra funzionare con il chromedriver … Questo è un link al chromedriver … basta lasciarlo nella directory del cestino.

Esempio per selezionare un’opzione dall’elenco a discesa:

Fare clic sull’elenco a discesa usando id o csspath o xpath o 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. 

Devo faticare per scoprire come ottenere in particolare coloro che sono nuovi in ​​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!

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

Basta avvolgere il tuo WebElement in Select Object come mostrato di seguito

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

Una volta eseguita questa operazione, è ansible selezionare il valore desiderato in 3 modi. Considera un file HTML come questo

      

Ora per identificare il menu a discesa fare

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

Per selezionare la sua opzione, puoi dire “Programmatore”

 dropdown.selectByVisibleText("Programmer "); 

o

  dropdown.selectByIndex(1); 

o

  dropdown.selectByValue("prog"); 

Happy Coding 🙂

Puoi usare questo

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