WebDriver SelectElement似乎无法正常工作

问题描述:

我是Selenium的新手,并试图处理下拉列表。我无法使.SelectBy方法工作,所以我想我会回到基础知识,并使用SelectElement.Options方法列出下拉列表的内容。WebDriver SelectElement似乎无法正常工作

我有一个网页作为国家的下拉菜单下面的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); 
} 

当我询问选项变量时,它包含预期选项数的列表。但是,当您查看列表中每个选项的“文本”属性时,它是空白的!为什么?

补充问题我怎么会列出价值指数每个选项的性质,因为只有似乎是文本财产?

我希望一旦这是解释我会知道为什么以下不起作用,以选择列表中的项目。

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

叫你想

selectItem.SelectByText

你要了解的东西,是<select>的使用价值来确定文本。然而,硒对待这些不同。借此,例如:

<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 
+0

感谢您指出我在正确的方向。我可以使用 - Debug.WriteLine(option.GetAttribute(“value”)+“:”+ option.GetAttribute(“index”)+“:”+ option.GetAttribute(“text”)列出选项属性。 ; – Cooldudescrib

+0

@sircafpsalot,但是当我尝试使用SelectByText方法在下拉列表中选择一个项目时,它失败了。 var dropdown = driver.FindElement(By.Id(“ddl_Country”));找到选择。下一行var selectItem = new SelectElement(dropdown);失败。最终抛出异常“元素当前不可见并且可能不被操纵”。 – Cooldudescrib

+0

我刚刚看了一下代码(不是我的),我注意到** select **有一个style =“display:none”,这可以解释为什么它不可见被操纵。这是否会成为SelectElement(下拉)失败的正当理由?编码器已经使用了另一个下拉实现,我现在需要弄清楚! – Cooldudescrib