我有两个文本字段,日期和时间都有一个类'date-time-field'和一个隐藏字段datetime。无论何时更改日期或时间,我都会尝试使用javascript将两者结合起来,并将其存储在datetime隐藏字段中。这是javascript(从coffeescript转换而来):
$('.date-time-field').change(function() {
var date, time;
date = $('#date').val();
time = $('#time').val();
return $('#start_time').val(date + " " + time);
});
我的黄瓜测试具有@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
我是否应该使用其他事件,例如模糊,可能除了更改,或者它对于生产来说不是问题,我应该在我的测试中调用wait_for?
答案 0 :(得分:4)
根据this discussion,当textarea失去焦点时,水豚的fill_in
实际上不会触发change
事件。另一方面,jQuery推迟了textarea 上的change
事件,直到元素失去焦点(参见documentation)。
所以我猜测当你将焦点移动到另一个窗口时,fill_in
不会触发change
事件,因为焦点丢失了change
之后永远不会触发事件。
然而,当焦点不丢失时,在窗口仍处于焦点时单击保存按钮,并且(我猜)此成功触发更改,设置隐藏的datetime
字段。
这只是一个基于一些信息的推测。在解决方案方面,上面的github讨论中发布了一些想法,我建议看一下。
希望有所帮助!
答案 1 :(得分:0)
以下是:selenium
触发blur/change
而不需要jquery或javascript执行的解决方法:
field.send_keys :tab