Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试中未触发Javascript更改事件_Javascript_Ruby On Rails 3_Selenium_Cucumber - Fatal编程技术网

测试中未触发Javascript更改事件

测试中未触发Javascript更改事件,javascript,ruby-on-rails-3,selenium,cucumber,Javascript,Ruby On Rails 3,Selenium,Cucumber,我有两个文本字段,date和time,它们有一个类“date time field”,还有一个隐藏字段datetime。我试图在日期或时间发生变化时使用javascript将两者结合起来,并将其存储在datetime隐藏字段中。以下是从coffeescript转换而来的javascript: $('.date-time-field').change(function() { var date, time; date = $('#date').val(); time = $('#tim

我有两个文本字段,date和time,它们有一个类“date time field”,还有一个隐藏字段datetime。我试图在日期或时间发生变化时使用javascript将两者结合起来,并将其存储在datetime隐藏字段中。以下是从coffeescript转换而来的javascript:

$('.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
我应该使用另一个事件,如模糊,可能是除了更改之外,还是这对生产来说不是问题,我应该在测试中打一个等待电话?

根据,当文本区域失去焦点时,水豚的填充实际上不会触发更改事件。另一方面,jQuery延迟textarea上的更改事件,直到元素失去焦点为止

所以我猜,当你把焦点移到另一个窗口时,fill_in不会像它应该的那样触发更改事件,因为焦点丢失了,所以更改事件也不会在此后触发

但是,当焦点没有丢失时,会在窗口仍处于焦点时单击save按钮,我猜这确实成功触发了更改,设置了hidden datetime字段

这只是一个基于一些小道消息的猜测。就解决方案而言,在上面的github讨论中发布了一些想法,我建议您看看这些想法

希望有帮助

根据研究,当文本区域失去焦点时,水豚的填充实际上不会触发更改事件。另一方面,jQuery延迟textarea上的更改事件,直到元素失去焦点为止

所以我猜,当你把焦点移到另一个窗口时,fill_in不会像它应该的那样触发更改事件,因为焦点丢失了,所以更改事件也不会在此后触发

但是,当焦点没有丢失时,会在窗口仍处于焦点时单击save按钮,我猜这确实成功触发了更改,设置了hidden datetime字段

这只是一个基于一些小道消息的猜测。就解决方案而言,在上面的github讨论中发布了一些想法,我建议您看看这些想法

希望有帮助

这里有一个变通方法:selenium在不需要jquery或javascript执行的情况下触发模糊/更改:

field.send_keys :tab
以下是一个变通方法:selenium在不需要执行jquery或javascript的情况下触发模糊/更改:

field.send_keys :tab

如果您使用的是Windows,则FirefoxDriver已打开本机事件。WebDrivre要求Firefox窗口能够正确处理此类事件,因此它看起来更像是一个WebDriver功能,而不是您的代码问题。使用mac,这是否仍然相关?嗯。。。OS X完全缺乏Firefox上的NativeEvents支持。你能展示一下你用硒做什么吗?我添加了步骤定义,如果这就是你用硒做什么的意思…谢谢,这很简单。所以,如果您在启用NativeEvents的情况下使用WebDriver,我会说这不是您的问题,因为WebDriver需要关注浏览器窗口。但是,只要您使用的是OS X,我就不确定了,因为那里没有针对Firefox的NativeEvents实现。如果您使用的是Windows,那么FirefoxDriver已经打开了native_事件。WebDrivre要求Firefox窗口能够正确处理此类事件,因此它看起来更像是一个WebDriver功能,而不是您的代码问题。使用mac,这是否仍然相关?嗯。。。OS X完全缺乏Firefox上的NativeEvents支持。你能展示一下你用硒做什么吗?我添加了步骤定义,如果这就是你用硒做什么的意思…谢谢,这很简单。所以,如果您在启用NativeEvents的情况下使用WebDriver,我会说这不是您的问题,因为WebDriver需要关注浏览器窗口。但是,只要您使用的是OS X,我就不确定了,因为那里没有针对Firefox的NativeEvents实现。