Testes de integração para aceleradores de teclado

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 sendkeypara 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).