webkit capybara integration-testing stripe-payments capybara-webkit

install capybara webkit



Raya de pago rellenar formulario en Capybara-webkit (6)

Estoy usando el controlador capybara-webkit para mis pruebas habilitadas para JS. Sin embargo, cuando trato de completar los campos del formulario para el iframe de fill_in , no puedo hacerlo usando el ayudante fill_in capibara en ambos controladores. Selenium controlador de Selenium proporciona métodos que facilitan el logro de esta tarea.

4.times {page.driver.browser.find_element(:id, ''card_number'').send_keys(''4242'')} page.driver.browser.find_element(:id, ''cc-exp'').send_keys ''5'' page.driver.browser.find_element(:id, ''cc-exp'').send_keys ''18'' page.driver.browser.find_element(:id, ''cc-csc'').send_keys ''123'' page.driver.browser.find_element(:id,''billing-zip'').send_keys ''600004''

Si uso el helper fill_in , no puedo ingresar los detalles completamente. Por ejemplo, para un número de tarjeta de 16 dígitos, el campo de entrada se llena solo con 4 dígitos y en el campo de fecha puedo ingresar solo el mes y no el año.

Quiero saber si hay ayudantes en el controlador de webkit que me permitirían completar formularios en el formulario de pago de Stripe. Cualquier aviso sobre esto sería genial! Gracias por adelantado.


Estaba teniendo problemas similares con Selenium que tanto

find(:css, "input[id$=''card_number'']").set("4242 4242 4242 4242") fill_in(''card_number'', with: "4242 4242 4242 4242")

dejó de funcionar. Encontré (: css, ...) anteriormente, que todavía funcionaba hace unos meses, pero creo que los cambios en checkout.js lo hicieron para que no funcionara más. Con la ayuda de Capybara no puedo completar los campos de Stripe Checkout.js logré que funcionara. No es una solución bonita (o realmente basada en el comportamiento), pero hace el trabajo:

stripe_iframe = all(''iframe[name=stripe_checkout_app]'').last Capybara.within_frame stripe_iframe do page.execute_script(%Q{ $(''input#card_number'').val(''4242 4242 4242 4242''); }) page.execute_script(%Q{ $(''input#cc-exp'').val(''12/16''); }) #rest of the Stripe-capybara end

No estoy seguro si funciona con Webkit sin embargo.


Lo hice similar a @humpah, pero sin código JS malvado.

form_iframe = all(''iframe.wysihtml5-sandbox'').last within_frame form_iframe do page.find(''body'').set(''SomeContent'') end



Parece que Stripe ha cambiado los ID en los elementos de pago. Muchos tienen identificaciones dinámicas que no coinciden con algunos de los otros ejemplos aquí.

Lo que funcionó para mí es hacer coincidir los elementos con el texto del marcador de posición. Aquí hay un fragmento de trabajo a partir del 12/06/16:

stripe_card_number = ''4242424242424242'' within_frame ''stripe_checkout_app'' do find_field(''Card number'').send_keys(stripe_card_number) find_field(''MM / YY'').send_keys "01#{DateTime.now.year + 1}" find_field(''CVC'').send_keys ''123'' find(''button[type="submit"]'').click end page.has_content?(''Success!'', wait: 30)


Si está utilizando Stripe desde un iframe (quizás https://www.paymentiframe.com/ ?), Debería poder cambiar el alcance de sus pruebas al marco usando el método within_frame de Capybara:

within_frame(''stripe-iframe'') do fill_in ''card_number'', :with => ''4242'' end

Si le da un nombre a su iframe ( stripe-iframe en ese ejemplo), entonces debería hacerlo.

Espero que sea de ayuda!


Tuve exactamente el mismo problema y encontré que la siguiente solución funciona con capybara-webkit y con selenium-chrome:

page.find_field(''Email'').set "[email protected]" page.find_field(''Card number'').set (''4242424242424242'')

El "Correo electrónico" y el "Número de tarjeta" aquí son los marcadores de posición. La razón por la que funciona de esta manera y no con find(''#email'') es porque no hay ningún elemento con id = ''email'' en la página. Capibara correctamente no puede encontrar este elemento, no existe muchas veces. La razón por la que no hay ningún elemento es porque, a veces, el iframe de la banda se procesa sin el id. Adecuado, como así: element-with-dynamic-id

find_field busca por id, nombre o marcador de posición, y en este caso, placeholder es el único atributo que no cambia en ambas situaciones y que puede ser encontrado por capybara (por ejemplo. no se pudo encontrar la manera de hacer una búsqueda de capibara por tipo y la prueba sería mucho menos legible entonces.

¿Por qué el iframe de Stripe a veces pasa por alto estas ID correctas y las reemplaza por IDs dinámicas? Ni idea.