47

我有以下的幫助方法來輸入一個字符串到輸入字段並按下回車鍵,但似乎回車鍵從未按下。我看到輸入字段中的字符串,但敲擊輸入時發生的事件從未發生過。如何模擬水擊與Capybara和ChromeDriver的輸入字段中輸入?

我在實際的瀏覽器中測試過輸入鍵正確觸發了預期的事件。我不確定我錯過了什麼。

def fill_and_trigger_enter_keypress(selector, value) 
    page.execute_script %Q(
          var input = $('#{selector}'); 
          input.val('#{value}'); 
          input.trigger("keypress", [13]); 
         ) 
end 

編輯:

我也試過以下無濟於事:

find('#q_name').native.send_keys(:return) 
find('#q_name').native.send_keys(:enter) 

它們不會引起任何錯誤,但仍然沒有回車鍵按下。

回答

4

Capybara沒有對send_keys類型事件的本機支持。你可能可以用selenium來做,或者你可以試試這個gem https://github.com/markgandolfo/send-keys

+0

太好了,我會看看那個寶石。但是,因爲我直接將jQuery發送給硒,所以水豚不應該成爲問題,對吧? –

6

通常當你運行page.execute_script時,你會得到和在頁面控制檯中運行它一樣的結果。嘗試在控制檯中手動運行,看看你是否得到預期的結果。這通常是我做的......在瀏覽器控制檯窗口中製作所需的js代碼,並在工作時使用execute_script將其粘貼到capybara代碼中。

+0

在此工作。當我執行$('#input_selector')。trigger('keyPress',[13])時,我沒有任何錯誤,但仍然沒有任何事情觸發,就好像我要在瀏覽器中輸入一樣。 –

+1

是的,所以你可能不得不調整你正在觸發的事件。嘗試首先觸發一個焦點事件,模擬你點擊輸入輸入它,然後keyPress ..我發現的是,你通常必須玩正確的事件 –

+1

這是我做的填充自動完成,爲例如: page.execute_script%Q {$('#{selector}').val('#{value}')。focus()。keydown()} –

67
find('#q_name').native.send_keys(:return) 

適合我。我沒有一個名稱或編號爲我的領域,但類型是輸入,所以我使用類似於

find('.myselector_name>input').native.send_keys(:return) 

工作完全好!

+0

作爲附加信息,Selinium不會模擬鍵隱藏元素上的事件,而這個解決方案即使隱藏元素也能正常工作。 – RajaRaviVarma

+2

@Mysterio Man該解決方案與Capybara 2.5不兼容。它會拋出'NoMethodError:未定義的方法'send_keys'爲「5」:String'錯誤。 –

1

它爲我

page.execute_script("$('form.css-class/#form_id').submit()") 
+0

'$('form.css-class /#form_id')'無效jQuery - 運行它會引發錯誤。 – GMA

+0

我認爲它需要格式化而不使用斜槓,所以 '$('form.css-class#form_id')' – foomip

0

@Page.selector.send_keys :return

這對我的作品,其中selector是在你的頁面對象 元素:selector, '<css selector>'

11

這些天(水豚版2.5+)的元素,您可以通過以下方式模擬<enter>鍵:

find('.selector').set("text\n") 

\n是這裏非常重要的一點。