我很难用WebDriver的C#绑定从下拉菜单中选择值。我过去既没有使用C#也没有使用WebDriver。我正在使用WebDriver - Selenium-dotnet2.0b3和Visual Studio C#2010 Express版。 我已将WebDriver.Common,WebDriver.Firefox和WebDriver.Remote添加到我的解决方案中。我试过用这个 -
IWebElement dateOfBirth = webdriver.FindElement(By.Id("join_birth_day"));
List<IWebElement> dateOfBirthOptions = (List<IWebElement>)dateOfBirth.FindElement(By.TagName("option"));
foreach(IWebElement dateOfBirthOption in dateOfBirthOptions)
{
if (dateOfBirthOption.Equals("3"))
{
dateOfBirthOption.Select();
}
}
但是在NUnit中运行我的解决方案时看到了错误
LiveCams.CreateAccount.createAccount:
System.InvalidCastException : Unable to cast object of type 'OpenQA.Selenium.Firefox.FirefoxWebElement' to type 'System.Collections.Generic.List`1[OpenQA.Selenium.IWebElement]'.
如果我不投,那么甚至无法构建解决方案。 我想我在这里错过了一些微不足道的事情。谁能指导我在这里? 在Selenium 1.0中,下拉选择过于简单: - /
答案 0 :(得分:9)
要从下拉列表中选择选项,请使用以下代码
根据文本
选择值new SelectElement(driver.FindElement(By.XPath(""))).SelectByText("");
根据值
选择值new SelectElement(driver.FindElement(By.XPath(""))).SelectByValue("");
根据索引选择值
new SelectElement(driver.FindElement(By.XPath(""))).SelectByIndex(0);
答案 1 :(得分:7)
1)使用已注释的SelectElement - How to select an option from drop down using Selenium WebDriver C#? SelectElement属于 OpenQA.Selenium.Support.UI 命名空间。
2)你也可以用css选择器做这样的事情:
WebElement dateOfBirth = webdriver.FindElement(By.Id("join_birth_day"))
.FindElement(By.CssSelector("option[value='3']")).Select();
答案 2 :(得分:4)
使用OpenQA.Selenium.Support.UI命名空间中定义的以下类SelectElement,在C#中已经使用了单词Select
,这就是为什么它的实现被更改并且类的命名方式不同。
// Summary:
// Initializes a new instance of the SelectElement class.
//
// Parameters: element - The element to be wrapped
//
public SelectElement(IWebElement element);
创建此类的对象,并且可以根据索引,文本和值进行选择。
// Summary:
// Select the option by the index, as determined by the "index" attribute of
// the element.
//
// Parameters:
// index:
// The value of the index attribute of the option to be selected.
public void SelectByIndex(int index);
// Summary:
// Select all options by the text displayed.
//
// Parameters:
// text:
// The text of the option to be selected. If an exact match is not found, this
// method will perform a substring match.
// Remarks:
// When given "Bar" this method would select an option like:
// <option value="foo">Bar</option>
public void SelectByText(string text);
// Summary:
// Select an option by the value.
//
// Parameters:
// value:
// The value of the option to be selected.
// Remarks:
// When given "foo" this method will select an option like:
// <option value="foo">Bar</option>
public void SelectByValue(string value);
答案 3 :(得分:0)
using System;
using System.Collections.Generic;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
namespace SeleniumTests {
class DropDownListSelection {
static void Main(string[] args) {
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://YourDDListpageURL.html");
IWebElement element = driver.FindElement(By.XPath("//Select"));
//You can locate the element by using the ID / Name as well IList
AllDropDownList = element.FindElements(By.XPath("//option"));
int DpListCount = AllDropDownList.Count;
for (int i = 0; i < DpListCount; i++) {
if (AllDropDownList[i].Text == "Coffee") {
AllDropDownList[i].Click();
}
}
Console.WriteLine(DpListCount);
Console.ReadLine();
}
}
}