I use to pick items from drop-down menus using `SelectElement` class in my automated tests and they worked just fine until I upgraded to Selenium 2.39 .
ALL (!) tests that use this class fail and I get error message: `"Element is not currently visible and so may not be interacted with".`
I presume there is a bug in 2.39. Tested on Firefox 26.0. Anyone knows how to fix this problem?
//Here's a piece of my HTML:
<select id="CodGender" class="ui-selectmenu-element" name="CodGender" data-val-required="Mandatory attribute" data-val="true" aria-disabled="false">
<option value=""></option>
<option value="M">Male</option>
<option value="Z">Female</option>
</select>
//and here's how I'd pick an item from the drop-down:
{ var dropDownList = driver.FindElement(By.XPath("[@id='CodGender']"));
var selectElement = new SelectElement(dropDownList);
selectElement.SelectByText("Male");
}
这是传递第二行代码后“dropDownList”的快速监视窗口结果: 显示为false 启用为true 地点{X = -1658 Y = 791} 选错 尺寸{宽度= 200高度= 30} TagName“选择” 文字“”
...这里是“selectElement”的一个: AllSelectedOptions计数= 1 IsMultiple错误 选项数= 3 [0] {OpenQA.Selenium.Firefox.FirefoxWebElement} [1] {OpenQA.Selenium.Firefox.FirefoxWebElement} [2] {OpenQA.Selenium.Firefox.FirefoxWebElement}
...然后选项2看起来像: [OpenQA.Selenium.Firefox.FirefoxWebElement] {OpenQA.Selenium.Firefox.FirefoxWebElement} 显示为false 启用为true 位置{X = -1656 Y = 851} 选错 尺寸{宽度= 197高度= 16} TagName“选项” 文字“” ...
答案 0 :(得分:0)
看起来您需要明确等待元素变为可见或启用。
你没有得到NoSuchElementException这一事实表明webdriver知道元素的存在。我建议添加等待下拉列表可见,为了安全起见,您还可以添加等待所需文本可见的等待。这将阻止webdriver在选项可用之前尝试选择该选项。
答案 1 :(得分:0)
这是来自Selenium团队的James的回答: 他彻底解释了上述问题并提供了一些指导如何修复......
” 好的,这里可能发生的是你的网站正在使用某种JavaScript UI小部件框架(可能是jQueryUI?),它通过使用和元素来模拟下拉列表,但是将实际数据存储在元素中。保存实际数据的元素不可见,可能由'ui-selectmenu-element'CSS类隐藏。
WebDriver无法与(点击,发送密钥等)隐藏元素进行交互,完全停止。您可能操纵以前版本的WebDriver中的不可见元素的事实是一个错误,现在已经修复了。
现在有三种选择。首先,您可以使用UI中实际可见的UI元素来选择适当的值。其次,您可以使用JavaScript以及您正在使用的任何JavaScript UI工具包的API,以编程方式操作“下拉”控件。对于这两个选项中的任何一个,您将无法使用SelectElement类来操作控件,因为您正在操作的元素将不是元素。最后,您可以以某种方式使实际元素变得可见,但是您需要弄清楚UI小部件框架的内部工作方式以操纵元素变得可见。 “