2011-07-31 11 views
8

Permito a los usuarios compartir fotos con otras personas. Cuando el usuario está viendo una foto y su descripción, puede hacer clic en "compartir" y se carga una nueva página. En esta página, complete una dirección de correo electrónico (y comentarios opcionales, no probados aquí) y haga clic en "Compartir foto". El sistema envía un correo electrónico al destinatario con un enlace incluido y el asunto incluye el nombre de la foto. La página con el formulario Compartir también muestra una lista de personas con las que ya se ha compartido la foto.Capybara: Webkit no puede encontrar el iframe o su contenido

La carga de la página completa es una fuente de quejas de los usuarios. Quieren una ventana modal para cargar rápidamente y minimizar la navegación. Estoy de acuerdo.

Uso shadowbox.js para cargar la página Compartir en un iframe en una ventana modal. Funciona bien y permite una buena alternativa a la página anterior si es necesario.

Pero, simplemente no puedo hacer pasar mis exámenes. En particular, Capybara: Webkit simplemente no puede encontrar el iframe.

El medio ambiente es: Rail 3.0.9 capibara 0.4.1.2 capibara-webkit 0.5.0 pepino 1.0.2

La historia Pepino:

Feature: Share photo 

@javascript 
Scenario: User shares photo 
    When I follow "Share" 
    Then I should see "Share Old Man Photo" inside "#sb-player" 
    And I should see information about who I've shared this photo with 
    When I fill in "Share with" with "[email protected]" 
    And I press "Share Photo" 
    Then "[email protected]" should receive an email with subject "Old Man photo has been shared with you" 

Mi paso:

Then %r{^I should see "([^"]*)" inside ([^"].*)$} do |expected_text, named_element| 
    selector = element_for(named_element) 
    within_frame selector do 
    page.should have_content(expected_text) 
    end 
end 

El mensaje de error:

(::) failed steps (::) 

Unable to locate frame. (Capybara::Driver::Webkit::WebkitError) 
./features/step_definitions/sharing_steps.rb:94:in `/^I should see "([^"]*)" inside "([^"]*)"$/' 
features/user_shares_photo.feature:21:in `Then I should see "Share Old Man Photo" inside "#sb-player"' 

Failing Scenarios: 
cucumber features/user_shares_photo.feature:19 

He intentado todas las combinaciones de identificadores de elementos. Simplemente no puedo obtener Capybara: Webkit para reconocer el iframe.

¿Alguna idea o solución? No puedo entregar con la prueba de falla y estoy considerando lanzar todo el enfoque de iframe, pero me gustaría encontrar una solución.

Gracias

+0

¿Funciona con un controlador diferente de Capybara? –

Respuesta

6

que necesite tiempo para permitir que el iframe para abrir/poblar. Sleep 5 lo hizo.

Then %r{^I should see "([^"]*)" inside ([^"].*)$} do |expected_text, named_element| 
    sleep 5 
    selector = element_for(named_element) 
    within_frame selector do 
    page.should have_content(expected_text) 
    end 
end 
+0

Aparece un error 'element_for'' de método' indefinido 'con capybara 2.4.4, capybara-webkit 1.5.2. –

Cuestiones relacionadas