Come selezionare / ottenere l'opzione a discesa in Selenium 2


96

Sto convertendo il mio codice selenio 1 in selenio 2 e non riesco a trovare un modo semplice per selezionare un'etichetta in un menu a discesa o ottenere il valore selezionato di un menu a discesa. Sai come farlo in Selenium 2?

Ecco due affermazioni che funzionano in Selenium 1 ma non in 2:

browser.select("//path_to_drop_down", "Value1");
browser.getSelectedValue("//path_to_drop_down");

Hai provato a individuarlo utilizzando Firebug? Usare l'xpath generato con Firebug / xpather può renderlo più semplice.

1
La domanda non è individuare o trovare il menu a discesa. Si tratta di selezionare un'etichetta in quel menu a discesa. Riesco a individuare l'elenco a discesa ma non so quale metodo chiamare in Selenium 2 poiché select () e getSelectedValue () o getSelectedLabel () non funzionano in Selenium 2.
user786045

Risposte:


184

Dai un'occhiata alla sezione sulla compilazione dei moduli utilizzando webdriver nella documentazione di selenium e javadoc per la classe Select .

Per selezionare un'opzione basata sull'etichetta:

Select select = new Select(driver.findElement(By.xpath("//path_to_drop_down")));
select.deselectAll();
select.selectByVisibleText("Value1");

Per ottenere il primo valore selezionato:

WebElement option = select.getFirstSelectedOption()

By.xpath ("// path_to_drop_down"). Lo sostituirei con un localizzatore come By.name come così via.
Daniel

2
deselectAll genererà un'eccezione UnsupportedOperationException se la selezione non supporta selezioni multiple
Tom Hartwell

4
In C #, usa la classe SelectElement, quindi:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee

Fyi questo codice non è stato in grado di selezionare un menu a discesa fino a quando non ho commentato questa riga: //select.deselectAll (); Poi ha iniziato a funzionare. Il tuo chilometraggio può variare.
gorbysbm

1
Nota che deselectAllè valido solo per la selezione multipla: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/… .
user1205577

5
driver.findElement(By.id("id_dropdown_menu")).click();
driver.findElement(By.xpath("xpath_from_seleniumIDE")).click();

in bocca al lupo


4

in rubino per un utilizzo costante, aggiungi follow:

module Selenium
  module WebDriver
    class Element
      def select(value)
        self.find_elements(:tag_name => "option").find do |option|
          if option.text == value
            option.click
              return
           end
       end
    end
  end
end

e potrai selezionare il valore:

browser.find_element(:xpath, ".//xpath").select("Value")

3

Prova a usare:

selenium.select("id=items","label=engineering")

o

selenium.select("id=items","index=3")

0

Un'opzione simile a quanto pubblicato sopra da janderson sarebbe quindi utilizzare semplicemente il metodo .GetAttribute in selenio 2. Usandolo, puoi prendere qualsiasi oggetto che abbia un valore o un'etichetta specifici che stai cercando. Questo può essere utilizzato per determinare se un elemento ha un'etichetta, uno stile, un valore, ecc. Un modo comune per farlo è scorrere gli elementi nell'elenco a discesa fino a trovare quello desiderato e selezionarlo. In C #

int items = driver.FindElement(By.XPath("//path_to_drop_Down")).Count(); 
for(int i = 1; i <= items; i++)
{
    string value = driver.FindElement(By.XPath("//path_to_drop_Down/option["+i+"]")).GetAttribute("Value1");
    if(value.Conatains("Label_I_am_Looking_for"))
    {
        driver.FindElement(By.XPath("//path_to_drop_Down/option["+i+"]")).Click(); 
        //Clicked on the index of the that has your label / value
    }
}

0

puoi fare così:

public void selectDropDownValue(String ValueToSelect) 
{

    webelement findDropDownValue=driver.findElements(By.id("id1"))    //this will find that dropdown 

    wait.until(ExpectedConditions.visibilityOf(findDropDownValue));    // wait till that dropdown appear

    super.highlightElement(findDropDownValue);   // highlight that dropdown     

    new Select(findDropDownValue).selectByValue(ValueToSelect);    //select that option which u had passed as argument
}

0

Questo metodo restituirà il valore selezionato per l'elenco a discesa,

public static String getSelected_visibleText(WebDriver driver, String elementType, String value)
  {
    WebElement element = Webelement_Finder.webElement_Finder(driver, elementType, value);
   Select Selector = new Select(element);
    Selector.getFirstSelectedOption();
    String textval=Selector.getFirstSelectedOption().getText();
    return textval;
  }

Nel frattempo

String textval = Selector.getFirstSelectedOption ();

element.getText ();

Restituirà tutti gli elementi nel menu a discesa.


-2

Questo è il codice per selezionare il valore dal menu a discesa

Il valore per selectlocator sarà xpath o il nome della casella a discesa e per optionLocator avrà il valore da selezionare dalla casella a discesa.

public static boolean select(final String selectLocator,
        final String optionLocator) {
    try {
        element(selectLocator).clear();
        element(selectLocator).sendKeys(Keys.PAGE_UP);
        for (int k = 0; k <= new Select(element(selectLocator))
                .getOptions().size() - 1; k++) {
            combo1.add(element(selectLocator).getValue());
            element(selectLocator).sendKeys(Keys.ARROW_DOWN);
        }
        if (combo1.contains(optionLocator)) {
            element(selectLocator).clear();
            new Select(element(selectLocator)).selectByValue(optionLocator);
            combocheck = element(selectLocator).getValue();
            combo = "";

            return true;
        } else {
            element(selectLocator).clear();
            combo = "The Value " + optionLocator
                    + " Does Not Exist In The Combobox";
            return false;
        }
    } catch (Exception e) {
        e.printStackTrace();
        errorcontrol.add(e.getMessage());
        return false;
    }
}



private static RenderedWebElement element(final String locator) {
    try {

        return (RenderedWebElement) drivers.findElement(by(locator));
    } catch (Exception e) {
        errorcontrol.add(e.getMessage());
        return (RenderedWebElement) drivers.findElement(by(locator));
    }
}

Grazie,

Rekha.


4
-1 Way overcomplicated and using deprecated methods (RenderedWebElement)
Ardesco
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.