WebDriver SelectElement似乎无法正常工作

时间:2016-02-25 16:44:29

标签: c# selenium webdriver

我是Selenium的新手并试图掌握操作下拉列表。我无法使用.SelectBy方法工作,所以我想我会回到基础并使用SelectElement.Options方法列出下拉列表的内容。

我有以下html页面作为国家/地区的下拉列表,

<select name="ddlCountry" id=" ddlCountry>
<option selected="selected" value="0">Please select ...</option>
<option value="231">United Kingdom</option>
<option value="1">Afghanistan</option>
<option value="2">Albania</option>
...
<option value="246">Zimbabwe</option>
</select>

然后我有以下代码列出每个选项的文本。

var dropdown = driver.FindElement(By.Id("phMainContent_EmployeeAdd1_ddlCountry"));
var selectItem = new SelectElement(dropdown);
var options = selectItem.Options;
foreach (var option in options)
{
    Debug.WriteLine(option.Text); 
}

当我查询选项变量时,它会保留预期数量的选项列表。但是,当您查看列表中每个选项的“text”属性时,它是空白的!为什么呢?

补充问题我如何列出每个选项的索引属性,因为只有文字属性?< / p>

我希望一旦解释,我就会知道为什么以下内容无法选择列表中的项目。

/// <summary>
/// WebDriver: Select an element in a dropdown
/// </summary>
/// <param name="driver">WebDriver object</param>
/// <param name="dropdownlist">Name of dropdown (by ID)</param>
/// <param name="text">Text of item to be selected</param>
/// <returns>None</returns>
public static void SelectItemInDropdownByIdByText(IWebDriver driver, string dropdownlist, string text)
{
    var dropdown = driver.FindElement(By.Id(dropdownlist));
    var selectItem = new SelectElement(dropdown);
    selectItem.SelectByValue(text);
}

调用
SelectItemInDropdownByIdByText(driver, "ddlCountry", "United Kingdom");

1 个答案:

答案 0 :(得分:0)

你想要

selectItem.SelectByText

您必须了解的事项是<select>使用值来确定文本。然而,Selenium对待这些不同。以此为例:

<select id="test">
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>

test = <select id="test">

test.SelectByValue("2") // selects <option value="2">
test.SelectByText("Three") // selects <option value="3">
test.Options[1].Text // the Text is actually the `textContent` of the node, which is "Two"
text.Options[0].GetAttribute("value") // 1