【问题标题】:Dropdown behaviour issue in FireFox using Selenium WebDriver使用 Selenium WebDriver 的 FireFox 中的下拉行为问题
【发布时间】:2013-10-11 07:47:24
【问题描述】:

当我尝试使用 Selenium WebDriver 在下拉列表中选择一个值时,我在 FireFox 中遇到了一些奇怪的行为。我正在尝试采取的步骤:

  • 点击打开选择元素
  • 点击我要选择的项目
  • 点击打开下一个选择元素

这在 Chrome 和 IE 中完美运行。但是,在Firefox中,单击SELECT打开(所示的项目显示),我想选择的项目是点击(按照所选项目突出显示),但选择了不同的选择元素并选择“选择项” '关闭',默认值一直显示在选择项中。当我在调试模式下单步执行这段代码时,它的工作方式就像它应该的那样!这表明也许答案可能在于步骤之间的时间,但尝试不同长度的 Sleep() 并没有得到任何结果。

总结一下:

我想要什么:

  • 点击打开选择元素
  • 点击我要选择的项目
  • 点击打开下一个选择元素

什么时候生效:

  • Chrome 中的运行场景
  • 在 Internet Explorer 中运行场景
  • 在 FireFox 中逐步浏览场景

什么时候不工作:

  • 在 FireFox 中运行场景

处理这部分场景的代码:

// GetRandomValue() is a simplified representation of the code that just gives me a 
// random value from the dropdown to select
var randomDropdownValue = GetRandomValue();

Driver.FindElement(By.Id(dropdownId)).Click();

SelectElement dropdownList = new SelectElement(Driver.FindElement(By.Id(dropdownId)));
dropdownList.SelectByValue(randomDropdownValue);

更新

创建自定义 FireFox 配置文件并禁用本机事件并不能解决问题。

【问题讨论】:

    标签: firefox selenium selenium-webdriver


    【解决方案1】:

    这个问题的解决方法看起来非常简单!

    当它不起作用时我做了什么:

    • 点击打开下拉菜单
    • 在下拉列表中选择元素
    • 继续下一个下拉菜单

    我现在做什么工作:

    • 在下拉列表中选择元素
    • 继续下一个下拉菜单

    我试图模仿用户的行为。在选择我希望在 Chrome 和 Internet Explorer 中工作的下拉选项之前单击打开下拉列表时,FireFox 的“宽容度较低”并表现出“奇怪”的行为。该解决方案在 FireFox、Chrome 和 Internet Explorer 的所有情况下都有效(据我目前所见)!

    更新(@aaa90210 要求我提供用于选择元素的代码)

    如果创建了一个可以从我的项目中的任何位置调用的方法。此方法的精简版是:

     internal static void SelectOption(OptionType optionType, string dropdownId, string option)
        {                     
            try
            {
                switch (optionType)
                {
                    case OptionType.ByText:
                        new SelectElement(WebElement.Get(WebElement.Identifiers.Id, dropdownId)).SelectByText(option);
                        break;
    
                    case OptionType.ByValue:
                        new SelectElement(WebElement.Get(WebElement.Identifiers.Id, dropdownId)).SelectByValue(option);
                        break;
                }
            }
            catch (Exception exception)
            {                
                throw;
            }
        }
    

    【讨论】:

    • 感谢您提供的有用信息。从我的代码中删除 Click() 语句也解决了我在 Firefox 中的问题。
    【解决方案2】:

    使用 WebDriverWait 总是比使用 sleep() 更好,因为您无法确切知道下一个元素出现需要多少秒。

    new WebDriverWait(driver,100).until(ExpectedConditions.visibilityOfElementLocated(By.Id("id_of_element")));
    

    此代码将等待所需元素可见,如果它在 100 秒后仍未显示,则会引发异常..

    【讨论】:

    • 我知道WebDriverWait的存在。但它在过去给了我一些可疑的结果,并且用 Sleep() 和 while 循环模仿功能总是有效的。这不是所有解决方案中最漂亮的,但它确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2018-06-14
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多