2013-12-16 42 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