如何在Ruby Selenium Webdriver中传递函数中的特殊参数

如何在Ruby Selenium Webdriver中传递函数中的特殊参数,ruby,selenium,webdriver,Ruby,Selenium,Webdriver,我正在使用SeleniumWebDriverRuby创建一个函数,以便在我在此函数中设置的时间内等待显示元素 我的函数将有两个参数(一个是可选的参数,另一个是对象的定位器名称) 我的函数有两个参数,如下所示: def wait_for_element_displayed(locator, options={}) if options[:time] settime = options[:time] else settime= 60 end

我正在使用SeleniumWebDriverRuby创建一个函数,以便在我在此函数中设置的时间内等待显示元素

我的函数将有两个参数(一个是可选的参数,另一个是对象的定位器名称

我的函数有两个参数,如下所示:

def wait_for_element_displayed(locator, options={})
    if options[:time]
       settime = options[:time]
    else
       settime= 60
    end
    @driver.find_element(locator).click
end
因此,我将像这样调用此函数:等待显示的元素(:id=>“unique1”,:time=>“20”)

然而,我在尝试用这种方式调用此函数时遇到了错误,错误是:“TypeError:无法将字符串转换为精确的数字”

有人能帮我把两个参数,比如我的场景,传递给一个函数吗?感谢您的帮助。

一些建议:

如果正在查找的密钥不存在,则可以使用
hash#fetch
设置默认值:

time = options.fetch(:time) { 60 }
当两个参数都是散列并且您不区分它们时,Ruby将很难解析您的输入。此外,您的错误使我认为您应该提供20作为整数而不是字符串。尝试按如下方式调用该方法:

wait_for_element_displayed({:id => "unique1"}, { :time => 20 })

最后,我对硒了解不多,所以也许有人可以告诉我最后一点。设置
settime
变量是否足以配置超时

用这个函数调用函数解决了我的问题:等待显示的元素({:id=>unique1},{:time=>20})。非常感谢你的帮助。