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

¿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

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

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


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

3

Intente usar:

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

o

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

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

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
}

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.


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


4
-1 Forma demasiado complicada y con métodos obsoletos (RenderedWebElement)
Ardesco
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.