Wie wähle ich mit Selenium WebDriver C # eine Option aus der Dropdown-Liste aus?


86

Ich habe versucht, für meinen Webtest eine Option auszuwählen. Ein Beispiel finden Sie hier: http://www.tizag.com/phpT/examples/formex.php

Alles funktioniert gut, bis auf die Auswahl eines Optionsteils. Wie wähle ich eine Option nach Wert oder Bezeichnung aus?

Mein Code:

using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;
using System.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices;

class GoogleSuggest
{
    static void Main()
    {
        IWebDriver driver = new FirefoxDriver();

        //Notice navigation is slightly different than the Java version
        //This is because 'get' is a keyword in C#
        driver.Navigate().GoToUrl("http://www.tizag.com/phpT/examples/formex.php");
        IWebElement query = driver.FindElement(By.Name("Fname"));
        query.SendKeys("John");
        driver.FindElement(By.Name("Lname")).SendKeys("Doe");
        driver.FindElement(By.XPath("//input[@name='gender' and @value='Male']")).Click();
        driver.FindElement(By.XPath("//input[@name='food[]' and @value='Chicken']")).Click();
        driver.FindElement(By.Name("quote")).Clear();
        driver.FindElement(By.Name("quote")).SendKeys("Be Present!");
        driver.FindElement(By.Name("education")).SendKeys(Keys.Down + Keys.Enter); // working but that's not what i was looking for
        // driver.FindElement(By.XPath("//option[@value='HighSchool']")).Click(); not working
        //  driver.FindElement(By.XPath("/html/body/table[2]/tbody/tr/td[2]/table/tbody/tr/td/div[5]/form/select/option[2]")).Click(); not working
        // driver.FindElement(By.XPath("id('examp')/x:form/x:select[1]/x:option[2]")).Click(); not working

        }
}

Antworten:


180

Sie müssen ein Auswahlelementobjekt aus der Dropdown-Liste erstellen.

 using OpenQA.Selenium.Support.UI;

 // select the drop down list
 var education = driver.FindElement(By.Name("education"));
 //create select element object 
 var selectElement = new SelectElement(education);

 //select by value
 selectElement.SelectByValue("Jr.High"); 
 // select by text
 selectElement.SelectByText("HighSchool");

Mehr Infos hier


funktioniert wie ein Zauber danke! das macht die Dinge für meine Tests schneller!
Mirza

Es gibt einen Fehler. var selectElement = new SelectElement(education);Sollte sein:var selectElement = new SelectElement(element);
Greg Gauthier

51
Zu Ihrer Information: Um ein Select-Element zu verwenden, müssen Sie das Selenium Webdriver-Support-Paket einschließen, das ein anderes NuGet-Paket als der Selenium WebDriver ist. Fügen Sie den Namespace OpenQA.Selenium.Support.UI ein.
James Lawruk

Ich verwende den Firefox-Treiber, Selenium Version 2.53.1 und die Support-Bibliothek 2.53. Der SelectByText scheint nicht zu funktionieren. Ich kann alle Optionen sehen. Selbst wenn ich die Optionen iteriere und den richtigen Wert einstelle, wird der Wert nicht eingestellt. Jede Hilfe wäre großartig
Viswas Menon

3
Haben Sie andere Treiber oder nur Firefox ausprobiert? Außerdem lautet der technische Name des Pakets derzeit Selenium.Support.
Dan Csharpster

13

Ich habe einen Punkt hinzugefügt: Ich bin auf ein Problem gestoßen, dass der OpenQA.Selenium.Support.UI-Namespace nach der Installation der Selenium.NET-Bindung im C # -Projekt nicht verfügbar war. Später stellte sich heraus, dass wir die neueste Version der Selenium WebDriver-Supportklassen problemlos installieren können, indem wir den folgenden Befehl ausführen:

Install-Package Selenium.Support

in der NuGet Package Manager-Konsole oder installieren Sie Selenium.Support über NuGet Manager.


9

Ein anderer Weg könnte dieser sein:

driver.FindElement(By.XPath(".//*[@id='examp']/form/select[1]/option[3]")).Click();

und Sie können den Index in Option [x] ändern, indem Sie x um die Anzahl der Elemente ändern, die Sie auswählen möchten.

Ich weiß nicht, ob es der beste Weg ist, aber ich hoffe, das hilft dir.


Ich bin mir nicht sicher, ob das die ganze Zeit funktioniert. Jemand hat es so gemacht und es hat nicht funktioniert und ich musste schließlich den Code auf den von Matthew Lock
Fractal am

3

So wählen Sie eine Option über Text aus;

(new SelectElement(driver.FindElement(By.XPath(""))).SelectByText("");

So wählen Sie eine Option über Wert aus:

 (new SelectElement(driver.FindElement(By.XPath(""))).SelectByValue("");

2

Sie müssen nur den Wert übergeben und den Schlüssel eingeben:

driver.FindElement(By.Name("education")).SendKeys("Jr.High"+Keys.Enter);

Wird wahrscheinlich fehlschlagen, wenn das Dropdown-Menü mehrere Optionen mit ähnlichen Texten enthält.
Antti

1

So funktioniert es bei mir (Auswahl der Steuerung nach ID und Option nach Text):

protected void clickOptionInList(string listControlId, string optionText)
{
     driver.FindElement(By.XPath("//select[@id='"+ listControlId + "']/option[contains(.,'"+ optionText +"')]")).Click();
}

verwenden:

clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester");

1

Selenium WebDriver C # -Code zum Auswählen eines Elements aus der Dropdown-Liste:

IWebElement EducationDropDownElement = driver.FindElement(By.Name("education"));
SelectElement SelectAnEducation = new SelectElement(EducationDropDownElement);

Es gibt drei Möglichkeiten, ein Dropdown-Element auszuwählen: i) Nach Text auswählen ii) Nach Index auswählen iii) Nach Wert auswählen

Nach Text auswählen:

SelectAnEducation.SelectByText("College");//There are 3 items - Jr.High, HighSchool, College

Nach Index auswählen:

SelectAnEducation.SelectByIndex(2);//Index starts from 0. so, 0 = Jr.High 1 = HighSchool 2 = College

Nach Wert auswählen:

SelectAnEducation.SelectByValue("College");//There are 3 values - Jr.High, HighSchool, College

0

Wenn Sie nur nach einer Auswahl aus dem Dropdown-Feld suchen, finde ich auch die Methode "Nach Index auswählen" sehr nützlich.

if (IsElementPresent(By.XPath("//select[@id='Q43_0']")))
{
    new SelectElement(driver.FindElement(By.Id("Q43_0")))**.SelectByIndex(1);** // This is selecting first value of the drop-down list
    WaitForAjax();
    Thread.Sleep(3000);
}
else
{
     Console.WriteLine("Your comment here);
}

0
 var select = new SelectElement(elementX);
 select.MoveToElement(elementX).Build().Perform();

  var click = (
       from sel in select
       let value = "College"
       select value
       );

4
Bitte fügen Sie Ihrem Code eine Erklärung hinzu: Warum ist es eine Antwort auf die Frage und was unterscheidet sie von den zuvor gegebenen Antworten?
Nander Speerstra

0
IWebElement element = _browserInstance.Driver.FindElement(By.XPath("//Select"));
IList<IWebElement> AllDropDownList = element.FindElements(By.XPath("//option"));
int DpListCount = AllDropDownList.Count;
for (int i = 0; i < DpListCount; i++)
{
    if (AllDropDownList[i].Text == "nnnnnnnnnnn")
    {
        AllDropDownList[i].Click();
        _browserInstance.ScreenCapture("nnnnnnnnnnnnnnnnnnnnnn");
    }
}

Funktioniert mit Dropdown-Listenauswahl
James
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.