2011-08-29 18 views
36

Jeśli chcę wybrać opcję rozwijanego okna, istnieje kilka sposobów, aby to zrobić. I zawsze:Selenium WebDriver i DropDown Boxes

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

Ale to nie działa za każdym razem. Czasami wybrano inną opcję. Więc trochę googlełem i znalazłem ten kod, który działa za każdym razem:

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

Ale to działa naprawdę bardzo wolno. Jeśli mam długą listę z wieloma przedmiotami, to zajmuje to naprawdę dużo czasu. Moje pytanie brzmi: czy istnieje rozwiązanie, które działa za każdym razem i jest szybkie?

Odpowiedz

46

można spróbować to:

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

myślę, że to jest jakiś kod C# lub coś? Ale pomógł mi wymyślić następujący kod: WebElement dropDownListBox = driver.findElement (By.id ("selection")); \t \t Wybierz clickThis = new Select (dropDownListBox); \t \t clickThis.selectByValue ("Niemcy"); O wiele szybciej! Dzięki! – tester

+2

Który pakiet należy zaimportować do IWebElement i SelectElement? –

+0

dzięki testerowi, ten kod działa dla selenu2. –

3

Spróbuj Wybierz klasę pomocniczą i sprawdzić, czy to czyni żadnej różnicy?

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, to jest tak powolne jak moje rozwiązanie. – tester

23

Spróbuj wykonać następujące czynności:

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

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

Tak, powyższy kod działa dobrze dla mnie –

+0

Co to jest scala realizacji? Dzięki – Way

0

muszę walczyć, aby znaleźć sposób, aby osiągnąć szczególny tych, którzy są do tego nowego narzędzia (jak ja)

C# Kod:

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

nadzieję, że to pomoże innym!

2

Z jakiegoś dziwnego powodu SelectElement dla webdrivera (wersja 2.25.1.0) nie działa poprawnie z firefoxdriverem (Firefox 15). Czasami może nie wybrać opcji z listy rozwijanej. Wygląda jednak na to, że działa z chromedriver ... This jest łączem do chromedriver ... po prostu upuść go w katalogu bin.

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

To działa idealnie. – Emebet

0

Przykład wybierz opcję z listy rozwijanej:

Kliknij na rozwijanej listy przy użyciu ID lub csspath lub XPath lub nazwę. Użyłem tu id.

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

Można to wykorzystać

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

Wystarczy owinąć WebElement do Wybierz obiekt, jak pokazano poniżej

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

Po wykonaniu tych czynności można wybrać żądaną wartość na 3 sposoby.Rozważmy plik HTML jak ten

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

teraz zidentyfikować rozwijaną nie

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

Aby wybrać jego opcję powiedzieć 'Programmer' można zrobić

dropdown.selectByVisibleText("Programmer "); 

lub

dropdown.selectByIndex(1); 

lub

dropdown.selectByValue("prog"); 

Szczęśliwy Coding :)

Powiązane problemy