2011-10-29 13 views
12

que tiene un simple link_to_function en mi plantilla de vistaenfoque de pruebas con Carpincho

<%= link_to_function "add new category", "$('#category_name').focus()" %> 

y quiero probar esto con capibara Uso de solicitudes especificaciones. Básicamente la especificación debería ser algo como esto

it "focuses category form when I click 'add new category'" do 
    visit new_article_path 
    click_link "add new category" 

    # unfortunately there's nothing like 'has_focus?' 
    find_field("category_name").should have_focus 
end 

el problema es, yo no era capaz de encontrar nada, que compruebe si el elemento tiene el foco. Lo único que hice fue encontrar este

page.evaluate_script('document.focus')[:id] 

que sin embargo no es compatible con el controlador capybara-wekbit, que estoy usando el navegador para evitar la apertura de cada serie de análisis.

Respuesta

21

acabo de utilizar el siguiente código (con PhantomJS conductor, pero creo que funciona con WebKit también):

page.evaluate_script("document.activeElement.id") == "some_id" 

P. S. Una pregunta de un año sin respuesta. ¿Deberían darme una insignia? :)

+1

muy útil; ciertamente mereces una insignia. Gracias. –

+1

Si el 'activeElement' real se inserta realmente en el dom de forma asincrónica, este método no funcionará, ya que no necesariamente está en dom (por lo tanto, se puede enfocar). Entonces, se debe agregar otra verificación si el elemento está en dom. – ohcibi

4

debería utilizar el selector de :focus, por ejemplo:

page.should have_selector('#category_name:focus') 
+4

CSS sugeriría esto, pero parece que Capybara/Poltergeist no maneja el selector de enfoque correctamente. Siempre obtengo un resultado vacío para ': focus', incluso cuando document.activeElement me dice que tiene el HTMLInputElement correcto enfocado. –

Cuestiones relacionadas