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

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

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

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


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

3

Spróbuj użyć:

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

lub

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

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

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
}

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.


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


4
-1
Zbyt
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.