测试中未触发Javascript更改事件
我有两个文本字段,date和time,它们有一个类“date time field”,还有一个隐藏字段datetime。我试图在日期或时间发生变化时使用javascript将两者结合起来,并将其存储在datetime隐藏字段中。以下是从coffeescript转换而来的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-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实现。