2

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

4

2 回答 2

4

根据这个讨论,当文本区域失去焦点时,水豚fill_in实际上不会触发事件。change另一方面,jQuery 会推迟changetextarea 上的事件,直到元素失去焦点(请参阅文档)。

所以我猜测的是,当您将焦点移到另一个窗口时,fill_in不会触发change应有的事件,并且由于焦点丢失,change此后也不会触发事件。

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

这只是基于一些信息的猜测。在解决方案方面,上面的 github 讨论中发布了一些想法,我建议看看这些。

希望有帮助!

于 2012-08-09T13:50:42.607 回答
0

这是一种无需执行 jquery 或 javascript:selenium即可触发的解决方法:blur/change

field.send_keys :tab
于 2017-02-13T23:33:13.243 回答