2013-12-16 68 views

回答

1

如果你想發送輸入到文本字段,你可以使用

find(".selector").set("something \n") # \n == return key 

或者,如果你想something more flexible

class Capybara::Driver::Selenium < Capybara::Driver::Base 
    class Capybara::Element < Capybara::Node 
    def allowed_keys 
     @allowed_keys ||= %q(option null cancel help backspace 
tab clear return enter shift left_shift control left_control 
alt left_alt pause escape space page_up page_down end home 
left arrow_left uparrow_up right arrow_rightdown arrow_down 
insert delete semicolon equals numpad0 numpad1 numpad2 numpad3 
numpad4 numpad5 numpad6 numpad7 numpad8 numpad9 multiplyadd 
separator subtract decimal divide f1 f2 f3 f4 f5 f6 f7 f8 
f9 f10 f11 f12) 
    end 

    def send(key) 
     send_key = [] 

     if key.match(/\[.*\]/i) 
     key.gsub!(/[\[\]]/,'') 
     key = key.split(',') 
     else 
     key = [key] 
     end 

     key.each do |k| 
     if k.match(/(\'|\")/i) 
      send_key << k.gsub(/(\"|\')/, '') 
     elsif allowed_keys.include?(k) 
      send_key << k.to_sym 
     else 
      send_key << "#{k}" 
     end 
     end 

     native.send_keys(send_key) 
    end 
    end 
end 

此外,您可以查看send-keys,這是一個(或多或少)提供了功能但儘管過時的gem。

0

不幸的是,這比它應該更難。大多數建議都是隱藏一個按鈕,即屏幕外,並用水豚「按」它。 send-keys不支持跨水豚司機,因爲native.send_keys是不一致的,也沒有維護(如果我記得正確)。我認爲你最好的選擇就是包含jquery模擬,並在你的腳步中注入一個帶有水豚的執行腳本。

即(?)

page.execute_script %Q{ $('.myfield').simulate("keydown", { keyCode: $.ui.keyCode.ENTER }) } 

https://github.com/jquery/jquery-simulate見和 https://github.com/j-ulrich/jquery-simulate-ext