Cómo seleccionar / obtener la opción desplegable en Selenium 2

96

Estoy convirtiendo mi código de selenio 1 a selenio 2 y no puedo encontrar una manera fácil de seleccionar una etiqueta en un menú desplegable u obtener el valor seleccionado de un menú desplegable. ¿Sabes cómo hacer eso en Selenium 2?

Aquí hay dos declaraciones que funcionan en Selenium 1 pero no en 2:

browser.select("//path_to_drop_down", "Value1");
browser.getSelectedValue("//path_to_drop_down");
user786045
fuente
¿Ha intentado localizarlo usando Firebug? Usar el xpath generado con Firebug / xpather puede hacerlo más fácil.
1
La pregunta no se trata de localizar o encontrar el menú desplegable. Se trata de seleccionar una etiqueta en ese menú desplegable. Puedo ubicar el menú desplegable pero no sé a qué método llamar en Selenium 2 ya que select () y getSelectedValue () o getSelectedLabel () no funcionan en Selenium 2.
user786045
Solución en c #: stackoverflow.com/questions/5278281/…
steve cook

Respuestas:

184

Eche un vistazo a la sección sobre cómo completar formularios usando webdriver en la documentación de selenium y el javadoc para la clase Select .

Para seleccionar una opción basada en la etiqueta:

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

Para obtener el primer valor seleccionado:

WebElement option = select.getFirstSelectedOption()
janderssn
fuente
By.xpath ("// ruta_a_de_caída"). Reemplazaría esto con un localizador como By.name como así sucesivamente.
Daniel
2
deselectAll lanzará una UnsupportedOperationException si la selección no admite selecciones múltiples
Tom Hartwell
4
En C #, use la clase SelectElement, así:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee
Fyi, este código no pudo seleccionar un menú desplegable hasta que comenté esta línea: //select.deselectAll (); Entonces empezó a funcionar. Su experiencia puede ser diferente.
gorbysbm
1
Tenga en cuenta que deselectAllsolo es válido para selección múltiple: 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();

buena suerte

thrasher
fuente
4

en ruby ​​para usar constantemente, agregue lo siguiente:

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

y podrá seleccionar valor:

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

Intente usar:

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

o

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

Una opción similar a lo que janderson publicó anteriormente sería simplemente usar el método .GetAttribute en selenium 2. Con esto, puede tomar cualquier elemento que tenga un valor o etiqueta específica que esté buscando. Esto se puede usar para determinar si un elemento tiene una etiqueta, estilo, valor, etc. Una forma común de hacer esto es recorrer los elementos en el menú desplegable hasta encontrar el que desea y seleccionarlo. 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
    }
}
Ben
fuente
0

puedes hacer así:

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
}
Praveen
fuente
0

Este método devolverá el valor seleccionado para el menú desplegable,

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

mientras tanto

String textval = Selector.getFirstSelectedOption ();

element.getText ();

Devolverá todos los elementos del menú desplegable.

Jophin P. John
fuente
-2

Este es el código para seleccionar el valor del menú desplegable

El valor de selectlocator será el xpath o el nombre del cuadro desplegable, y para optionLocator tendrá el valor que se seleccionará en el cuadro desplegable.

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

Gracias,

Rekha.

Kartmcad
fuente
4
-1 Forma demasiado complicada y con métodos obsoletos (RenderedWebElement)
Ardesco