如何使用Selenium WebDriver C#从下拉列表中选择一个选项?


86

我正在尝试选择一个选项进行网络测试。可以在此处找到一个示例:http : //www.tizag.com/phpT/examples/formex.php

除了选择选项以外,其他所有功能都很好。如何通过值或标签选择选项?

我的代码:

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

        }
}

Answers:


184

您必须从下拉列表中创建一个选择元素对象。

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

更多信息在这里


就像一个魅力谢谢!这使我的测试变得更快!
mirza 2011年

有一个错误。var selectElement = new SelectElement(education);应该是:var selectElement = new SelectElement(element);
Greg Gauthier

51
仅供参考:要使用Select Element,您需要包括Selenium Webdriver Support软件包,该软件包与Selenium WebDriver不同,是NuGet软件包。包括名称空间OpenQA.Selenium.Support.UI。
詹姆斯·劳鲁克

我正在使用firefox驱动程序,硒版本2.53.1和支持库2.53,但SelectByText似乎不起作用。我能够看到所有选项。即使我重复的选项和设置正确的值,该值是没有得到set..Any帮助将是巨大的
Viswas梅农

3
您尝试其他驱动程序还是仅尝试Firefox?另外,该软件包的技术名称当前为Selenium.Support。
Dan Csharpster,

13

补充一点-我遇到了一个问题,在将Selenium.NET绑定安装到C#项目中之后,OpenQA.Selenium.Support.UI命名空间不可用。后来发现,通过运行以下命令,我们可以轻松安装最新版本的Selenium WebDriver支持类:

Install-Package Selenium.Support

在NuGet软件包管理器控制台中,或从NuGet Manager安装Selenium.Support。


9

其他方式可能是这样的:

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

并且您可以更改option [x]中的索引,从而根据要选择的元素数来更改x。

我不知道这是否是最好的方法,但希望对您有所帮助。


我不确定这是否一直有效。有人以这种方式做到了,但没有成功,我最终不得不将代码更改为Matthew Lock建议的代码
Fractal

3

通过文本选择选项;

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

通过值选择选项:

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

3

Selenium WebDriver C#代码,用于从下拉菜单中选择项目:

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

有3种选择下拉项的方法:i)按文本选择ii)按索引选择iii)按值选择

按文字选择:

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

按索引选择:

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

按值选择:

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

2

您只需要传递值并输入密钥:

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

如果下拉列表包含多个具有相似文本的选项,则可能会失败。
Antti

1

这就是它的工作方式(按ID选择控件,按文本选择选项):

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

使用:

clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester");

0

如果您仅从下拉框中查找任何选择,我也会发现“按索引选择”方法非常有用。

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
请在您的代码中添加一个解释:为什么它是对问题的答案?与先前给出的答案有何不同
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");
    }
}

适用于下拉列表选项
james
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.