Auswählen / Abrufen der Dropdown-Option in Selen 2

96

Ich konvertiere meinen Selenium 1-Code in Selenium 2 und finde keine einfache Möglichkeit, eine Beschriftung in einem Dropdown-Menü auszuwählen oder den ausgewählten Wert eines Dropdown-Menüs abzurufen. Wissen Sie, wie das in Selen 2 geht?

Hier sind zwei Aussagen, die in Selen 1 funktionieren, aber nicht in 2:

browser.select("//path_to_drop_down", "Value1");
browser.getSelectedValue("//path_to_drop_down");
user786045
quelle
Haben Sie versucht, es mit Firebug zu finden? Die Verwendung des mit Firebug / xpather generierten xpath kann dies vereinfachen.
1
Bei der Frage geht es nicht darum, das Dropdown-Menü zu finden oder zu finden. Es geht darum, ein Etikett in dieser Dropdown-Liste auszuwählen. Ich kann die Dropdown-Liste finden, weiß aber nicht, welche Methode ich in Selenium 2 aufrufen soll, da select () und getSelectedValue () oder getSelectedLabel () in Selenium 2 nicht funktionieren.
user786045

Antworten:

184

Lesen Sie den Abschnitt zum Ausfüllen von Formularen mit dem Webdriver in der Selendokumentation und im Javadoc für die Select- Klasse.

So wählen Sie eine Option basierend auf dem Etikett aus:

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

So erhalten Sie den ersten ausgewählten Wert:

WebElement option = select.getFirstSelectedOption()
janderssn
quelle
By.xpath ("// path_to_drop_down"). Ich würde dies durch einen Locator wie By.name ersetzen.
Daniel
2
deselectAll löst eine UnsupportedOperationException aus, wenn die Auswahl keine Mehrfachauswahl unterstützt
Tom Hartwell
4
Verwenden Sie in C # die SelectElement-Klasse, also:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee
Zu Ihrer Information, dieser Code konnte kein Dropdown auswählen, bis ich diese Zeile auskommentiert habe: //select.deselectAll (); Dann fing es an zu arbeiten. Ihr Kilometerstand kann variieren.
Gorbysbm
1
Beachten Sie, dass dies deselectAllnur für Mehrfachauswahl gilt: 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();

Viel Glück

Thrasher
quelle
4

in rubin für die ständige verwendung, folge hinzufügen:

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

und Sie können den Wert auswählen:

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

Versuchen Sie es mit:

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

oder

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

Eine ähnliche Option wie oben von janderson wäre, einfach die .GetAttribute-Methode in Selen 2 zu verwenden. Mit dieser Option können Sie jedes Element mit einem bestimmten Wert oder einer bestimmten Bezeichnung abrufen, nach der Sie suchen. Dies kann verwendet werden, um festzustellen, ob ein Element eine Beschriftung, einen Stil, einen Wert usw. hat. Eine übliche Methode hierfür besteht darin, die Elemente in der Dropdown-Liste zu durchlaufen, bis Sie das gewünschte Element gefunden und ausgewählt haben. In 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
quelle
0

Sie können dies tun:

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
quelle
0

Diese Methode gibt den ausgewählten Wert für das Dropdown-Menü zurück.

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

inzwischen

String textval = Selector.getFirstSelectedOption ();

element.getText ();

Gibt alle Elemente in der Dropdown-Liste zurück.

Jophin P John
quelle
-2

Dies ist der Code zum Auswählen des Werts aus der Dropdown-Liste

Der Wert für selectlocator ist der x-Pfad oder der Name des Dropdown-Felds, und für optionLocator muss der Wert aus dem Dropdown-Feld ausgewählt werden.

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

Vielen Dank,

Rekha.

Kartmcad
quelle
4
-1 Weg überkompliziert und mit veralteten Methoden (RenderedWebElement)
Ardesco