Jak wybrać / uzyskać rozwijaną opcję w Selenium 2

96

Konwertuję mój kod selenu 1 na selen 2 i nie mogę znaleźć łatwego sposobu na wybranie etykiety z menu rozwijanego lub uzyskanie wybranej wartości z listy rozwijanej. Czy wiesz, jak to zrobić w Selenium 2?

Oto dwa stwierdzenia, które działają w Selenium 1, ale nie w 2:

browser.select("//path_to_drop_down", "Value1");
browser.getSelectedValue("//path_to_drop_down");
user786045
źródło
Czy próbowałeś go zlokalizować za pomocą Firebuga? Korzystanie z xpath wygenerowanego za pomocą Firebug / xpather może to ułatwić.
1
Nie chodzi o zlokalizowanie ani znalezienie listy rozwijanej. Chodzi o wybranie etykiety z tego menu. Mogę zlokalizować listę rozwijaną, ale nie wiem, którą metodę wywołać w Selenium 2, ponieważ select () i getSelectedValue () lub getSelectedLabel () nie działają w Selenium 2.
user786045
Rozwiązanie w C #: stackoverflow.com/questions/5278281/ ...
steve Cook

Odpowiedzi:

184

Zapoznaj się z sekcją dotyczącą wypełniania formularzy za pomocą webdrivera w dokumentacji selenu oraz javadoc dla klasy Select .

Aby wybrać opcję na podstawie etykiety:

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

Aby uzyskać pierwszą wybraną wartość:

WebElement option = select.getFirstSelectedOption()
janderssn
źródło
By.xpath ("// ścieżka_do_drop_down"). Zastąpiłbym to lokalizatorem takim jak By.name, tak dalej.
Daniel
2
deselectAll zgłosi wyjątek UnsupportedOperationException, jeśli wybór nie obsługuje wielu wyborów
Tom Hartwell
4
W języku C # użyj klasy SelectElement, więc:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee
Fyi ten kod nie był w stanie wybrać listy rozwijanej, dopóki nie zakomentowałem tej linii: //select.deselectAll (); Potem zaczęło działać. Twój przebieg może się różnić.
gorbysbm
1
Zauważ, że dotyczy deselectAllto tylko wyboru wielokrotnego: 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();

powodzenia

śmieciarz
źródło
4

w ruby ​​do ciągłego używania, dodaj następujące:

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

i będziesz mógł wybrać wartość:

browser.find_element(:xpath, ".//xpath").select("Value")
AlekseiPetrovski
źródło
3

Spróbuj użyć:

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

lub

selenium.select("id=items","index=3")
coolcub
źródło
0

Podobną opcją do tego, co zostało opublikowane powyżej przez jandersona, byłoby po prostu użycie metody .GetAttribute w selenie 2. Używając jej, możesz pobrać dowolny element, który ma określoną wartość lub etykietę, której szukasz. Można to wykorzystać do określenia, czy element ma etykietę, styl, wartość itp. Powszechnym sposobem na to jest zapętlenie elementów w menu rozwijanym, aż znajdziesz ten, który chcesz i wybierzesz. W 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
źródło
0

możesz to zrobić:

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
źródło
0

Ta metoda zwróci wybraną wartość do listy rozwijanej,

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

W międzyczasie

String textval = Selector.getFirstSelectedOption ();

element.getText ();

Zwróci wszystkie elementy z listy rozwijanej.

Jophin P. John
źródło
-2

To jest kod do wyboru wartości z listy rozwijanej

Wartością selectlocator będzie ścieżka xpath lub nazwa pola rozwijanego, a dla optionLocator wartość do wybrania z pola rozwijanego.

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

Dzięki,

Rekha.

Kartmcad
źródło
4
-1
Zbyt