Javascript 更改事件未在 cucumber 测试中触发

标签 javascript ruby-on-rails-3 selenium cucumber

我有两个文本字段,日期和时间,它们都有一个“日期时间字段”类,还有一个隐藏字段日期时间。每当日期或时间更改时,我都尝试使用 javascript 将两者结合起来,并将其存储在日期时间隐藏字段中。这是 javascript(从 coffeescript 转换而来):

$('.date-time-field').change(function() {
  var date, time;
  date = $('#date').val();
  time = $('#time').val();
  return $('#start_time').val(date + " " + time);
});

我的 cucumber 测试有 @javascript 标签,所以它会在 Firefox 窗口中运行。只要我将焦点放在测试打开的 Firefox 窗口上,它就会通过,但是如果我将焦点移到另一个我打开的窗口,它就会失败,因为更改事件不会触发。我担心如果用户做了一些奇怪的事情,这会在生产中重现。

步骤定义是填表:

When /^I create a valid event$/ do
  fill_in :name, :with => "Blackbeard's modest event for modest folk"
  select Tier.first.number.to_s, :from => 'event_tier_id'
  select Venue.first.name, :from => 'event_venue_id'
  fill_in 'date', :with => "05/03/2012"
  fill_in 'time', :with => " 08:45"
  click_button 'Save'      
end

我是否应该使用另一个事件,例如 blur,也许除了 change 之外,还是它对生产来说不是问题,我应该只在我的测试中调用 wait_for?

最佳答案

根据 this discussion ,当文本区域失去焦点时, capybara 的 fill_in 实际上不会触发 change 事件。另一方面,jQuery 延迟文本区域上的 change 事件直到元素失去焦点(参见 documentation )。

所以我猜测当您将焦点移动到另一个窗口时,fill_in 不会触发 change 事件,因为焦点是丢失 change 事件之后也不会触发。

但是,当焦点没有丢失时,在窗口仍然处于焦点中时单击保存按钮,并且(我猜)这确实成功了触发更改,设置隐藏的 datetime 字段。

这只是根据一些小知识的推测。在解决方案方面,在上面的 github 讨论中发布了一些想法,我建议看看那些。

希望对您有所帮助!

关于Javascript 更改事件未在 cucumber 测试中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11838473/

相关文章:

python - WebDriverException : Message: Expected browser binary location, 但无法在默认位置找到二进制文件

javascript - highchart堆积柱每个类别的总数据

javascript - 如何用按钮在不同的div中滑动

javascript - 在垂直列中动态创建 HTML 表单

ruby-on-rails-3 - 我可以将我的 heroku git repo 导入到 bitbucket 中吗?如何?

c# - Selenium IEDriver "Error retrieving window with handle current"

javascript - 转换后删除 svg 对象

ruby - I18n.t 翻译缺少默认值 Nil

ruby - 将超赞字体图标添加到表单标签

python - 使用 Selenium Webdriver 从 python 中的下拉列表中选择选项