Selenium 2.39中的SelectElement失败

时间:2014-01-24 12:42:07

标签: c# drop-down-menu selenium-webdriver

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“选项”     文字“” ...

2 个答案:

答案 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小部件框架的内部工作方式以操纵元素变得可见。 “