How to select an option from drop down using Selenium WebDriver C#?
Asked Answered
B

11

103

I was trying for my web test selecting an option. An example can be found here: http://www.tizag.com/phpT/examples/formex.php

Everything works great except the selecting an option part. How to selecting an option by value or by label?

My 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

        }
}
Bequest answered 11/3, 2011 at 20:58 Comment(0)
D
215

You must create a select element object from the drop down list.

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

More info here

Decembrist answered 14/3, 2011 at 8:37 Comment(5)
There is a bug. var selectElement = new SelectElement(education); Should be: var selectElement = new SelectElement(element);Exploiter
FYI: To use a Select Element, you need to include the Selenium Webdriver Support package which is a different NuGet package than the Selenium WebDriver. Include the namespace OpenQA.Selenium.Support.UI.Bridgers
I'm using the firefox driver , selenium version 2.53.1 and support library 2.53 , The SelectByText doesnt seem to be working. Im able to see all the options . Even if i iterate the options and set the correct value, The value is not getting set..Any help would be greatHouseleek
Did you try other drivers or just Firefox? Also, the package's technical name is currently Selenium.Support.Dolphin
This worked great for me, had to add the Selenium.Support NuGet as well.Erleena
A
17

Adding a point to this- I came across a problem that OpenQA.Selenium.Support.UI namespace was not available after installing Selenium.NET binding into the C# project. Later found out that we can easily install latest version of Selenium WebDriver Support Classes by running the command:

Install-Package Selenium.Support

in NuGet Package Manager Console, or install Selenium.Support from NuGet Manager.

Acne answered 21/2, 2015 at 4:50 Comment(0)
R
11

Other way could be this one:

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

and you can change the index in option[x] changing x by the number of element that you want to select.

I don't know if it is the best way but I hope that help you.

Rationalize answered 25/5, 2012 at 23:13 Comment(1)
I'm not sure this works all the time. Someone did it this way and it didn't work and I ended up having to change to code to the code suggested by Matthew LockDolhenty
B
5

Selenium WebDriver C# code for selecting item from Drop Down:

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

There are 3 ways to select drop down item: i)Select by Text ii) Select by Index iii) Select by Value

Select by Text:

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

Select by Index:

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

Select by Value:

SelectAnEducation.SelectByValue("College");//There are 3 values - Jr.High, HighSchool, College
Bandur answered 23/5, 2017 at 13:34 Comment(0)
P
4

To Select an Option Via Text;

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

To Select an Option via Value:

 (new SelectElement(driver.FindElement(By.XPath(""))).SelectByValue("");
Prepuce answered 27/4, 2015 at 12:13 Comment(1)
The Selenium.Support NuGet Package should be installed to use these solutions, but its working pretty well for me.Inorganic
B
3

You just need to pass the value and enter key:

driver.FindElement(By.Name("education")).SendKeys("Jr.High"+Keys.Enter);
Barbaraanne answered 30/7, 2014 at 7:21 Comment(1)
Will likely fail if dropdown contains multiple options with similar texts.Shf
S
1

This is how it works for me (selecting control by ID and option by text):

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

use:

clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester");
Sphalerite answered 5/3, 2013 at 22:44 Comment(0)
S
0

If you are looking for just any selection from the drop-down box, I also find "select by index" method very useful.

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);
}
Springlet answered 1/12, 2016 at 23:53 Comment(0)
C
0
 var select = new SelectElement(elementX);
 select.MoveToElement(elementX).Build().Perform();

  var click = (
       from sel in select
       let value = "College"
       select value
       );
Chaves answered 20/9, 2017 at 9:6 Comment(1)
Please add an explanation to your code: why is it an answer to the question and what makes it different from the earlier given answers?Andrey
K
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");
    }
}
Karleenkarlen answered 15/3, 2018 at 20:1 Comment(1)
Works with dropdownlist selectionsKarleenkarlen
E
0

If you don't want to install an extra Nuget package ("Selenium Support") you can just execute JavaScript on the page

((IJavaScriptExecutor)driver)
    .ExecuteScript("document.getElementById('mySelect').value=123;");
Exobiology answered 9/3 at 16:44 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.