2012-08-07 57 views
2

我有兩個文本字段,日期和時間有一個類「日期時間字段」和一個隱藏字段日期時間。我正在嘗試使用JavaScript將兩者結合,無論日期或時間發生變化,並將其存儲在日期時間隱藏字段中。這裏是JavaScript(由CoffeeScript的轉換):Javascript更改事件未在黃瓜測試中觸發

$('.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

如果你使用的是Windows,然後FirefoxDriver已經打開'native_events'。 WebDrivre要求Firefox窗口專注於與此類事件一起正常工作,因此它看起來更像WebDriver「功能」,而不是您的代碼問題。 – p0deje 2012-08-07 05:36:31

+0

使用mac,那還是相關嗎? – link664 2012-08-07 05:40:22

+0

嗯...... OS X在Firefox上完全沒有NativeEvents支持。你能說出你對Selenium做了什麼嗎? – p0deje 2012-08-07 05:50:29

回答

4

根據this discussion,當textarea失去焦點時,水豚的fill_in實際上並沒有觸發change事件。另一方面,jQuery將文本區上的change事件推遲到元素失去焦點(請參閱documentation)。

所以,我猜是,當你將焦點移動到另一個窗口,fill_in不會觸發change事件,因爲它應該,而且由於丟失焦點change事件被觸發從未此後無論是。

當焦點丟失,然而,保存按鈕被點擊,而窗口仍處於焦點,(我猜),這成功觸發這種改變,設置隱藏datetime場。

這只是基於一些信息的猜想。就解決方案而言,在上面的github討論中發佈了一些想法,我建議看看這些。

希望有幫助!

0

這裏是:selenium的解決方法,觸發blur/change,而不需要一個jQuery或JavaScript執行:

field.send_keys :tab