我有两个文本字段,日期和时间,它们都有一个“日期时间字段”类,还有一个隐藏字段日期时间。每当日期或时间更改时,我都尝试使用 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/