Como selecionar / obter a opção suspensa no Selenium 2


96

Estou convertendo meu código de selênio 1 em selênio 2 e não consigo encontrar uma maneira fácil de selecionar um rótulo em um menu suspenso ou obter o valor selecionado de um menu suspenso. Você sabe como fazer isso no Selenium 2?

Aqui estão duas declarações que funcionam no Selenium 1, mas não no 2:

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

Você tentou localizá-lo usando o Firebug? Usar o xpath gerado com Firebug / xpather pode tornar isso mais fácil.

1
A questão não é localizar ou encontrar o dropdown. Trata-se de selecionar um rótulo nesse menu suspenso. Consigo localizar o menu suspenso, mas não sei qual método chamar no Selenium 2, pois select () e getSelectedValue () ou getSelectedLabel () não funcionam no Selenium 2.
user786045

Respostas:


184

Dê uma olhada na seção sobre preenchimento de formulários usando webdriver na documentação do selenium e o javadoc para a classe Select .

Para selecionar uma opção com base no rótulo:

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

Para obter o primeiro valor selecionado:

WebElement option = select.getFirstSelectedOption()

By.xpath ("// path_to_drop_down"). Eu substituiria isso por um localizador como By.name e assim por diante.
Daniel,

2
deselectAll lançará uma UnsupportedOperationException se a seleção não suportar várias seleções
Tom Hartwell

4
Em C #, use a classe SelectElement, então:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee

Fyi, este código não foi capaz de selecionar uma lista suspensa até que comentei esta linha: //select.deselectAll (); Então começou a funcionar. Sua milhagem pode variar.
gorbysbm

1
Observe que deselectAllsó é válido para multisseleção: 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();

boa sorte


4

em rubi para usar constantemente, adicione a seguir:

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 você poderá selecionar o valor:

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

3

Tente usar:

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

ou

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

0

Uma opção semelhante ao que foi postado acima por janderson seria simplesmente usar o método .GetAttribute no selênio 2. Usando isso, você pode pegar qualquer item que tenha um valor ou rótulo específico que você está procurando. Isso pode ser usado para determinar se um elemento tem um rótulo, estilo, valor, etc. Uma maneira comum de fazer isso é percorrer os itens no menu suspenso até encontrar aquele que deseja e selecioná-lo. Em 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

você pode fazer assim:

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 retornará o valor selecionado para o menu suspenso,

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

Entretanto

String textval = Selector.getFirstSelectedOption ();

element.getText ();

Retornará todos os elementos no menu suspenso.


-2

Este é o código para selecionar o valor no menu suspenso

O valor para selectlocator será o xpath ou nome da caixa suspensa, e para optionLocator terá o valor a ser selecionado na caixa suspensa.

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

Obrigado,

Rekha.


4
-1 Muito complicada e usando métodos obsoletos (RenderedWebElement)
Ardesco
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.