Estou usando uma combinação de rspec + capivara + poltergeist para testar um aplicativo Rails 3. Como o aplicativo possui muitos elementos de IU, é importante testar os aceleradores do teclado.
O problema é que a maioria dos frameworks de teste não tem uma maneira de simular pressionamentos de tecla nativamente, então escrevi sendkey
para fazer isso para mim. Jogue isso em um módulo e inclua em seu spec_helper ou em qualquer lugar que se adapte ao seu estilo:
def sendkey(target, keycode, *meta)
script = "var e=jQuery.Event('key#{meta.empty? ? 'press' : 'down'}');"
script += "e.metaKey=true;" if meta.include? 'command'
script += "e.altKey=true;" if meta.include? 'alt'
script += "e.keyCode=#{keycode};$('#{target}').trigger(e);"
page.driver.execute_script(script)
end
Essa função cria um script javascript e o envia para a página de execução. Se você estiver usando selênio em vez de poltergeist, a última linha deve ser:
page.driver.browser.execute_script(script)
Chame-o de sua especificação com o seletor css para o elemento de destino e a chave que você deseja enviar. sendkey('body', 13)
envia uma tecla enter para o elemento body, por exemplo.
Adicione ‘command’ e / ou ‘option’ à lista de argumentos se você quiser enviar uma tecla apple / windows ou alt / option respectivamente. sendkey('body', 13, 'command', 'option')
envia opção + apple + return (alt + windows + enter no idioma do PC).