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

mir*_*rza 78 c# webdriver selenium-webdriver

我正在尝试选择一个选项进行网络测试.可以在此处找到一个示例: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

        }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*lly 161

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

 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");
Run Code Online (Sandbox Code Playgroud)

更多信息在这里

  • 仅供参考:要使用选择元素,您需要包含Selenium Webdriver支持包,它是与Selenium WebDriver不同的NuGet包.包含命名空间OpenQA.Selenium.Support.UI. (48认同)
  • 您是否尝试过其他驱动程序或只是 Firefox?此外,该软件包的技术名称目前为 Selenium.Support。 (3认同)

小智 9

其他方式可能是这个:

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

并且您可以更改选项[x]中的索引,将x更改为您要选择的元素数.

我不知道这是不是最好的方式,但我希望能帮到你.


小智 7

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

Install-Package Selenium.Support
Run Code Online (Sandbox Code Playgroud)

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


Rip*_*sim 5

用于从下拉列表中选择项目的 Selenium WebDriver C# 代码:

IWebElement EducationDropDownElement = driver.FindElement(By.Name("education"));
SelectElement SelectAnEducation = new SelectElement(EducationDropDownElement);
Run Code Online (Sandbox Code Playgroud)

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

按文本选择:

SelectAnEducation.SelectByText("College");//There are 3 items - Jr.High, HighSchool, College
Run Code Online (Sandbox Code Playgroud)

按索引选择:

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

按值选择:

SelectAnEducation.SelectByValue("College");//There are 3 values - Jr.High, HighSchool, College
Run Code Online (Sandbox Code Playgroud)