Ich habe versucht, einen Integrationstest für Stripe's checkout.js [https://checkout.stripe.com/checkout.js] für meine Rails 3.2 App zu schreiben.Wie schreibt man Integrationstests für Stripe Checkout auf Rails?
Stripe-Checkout funktioniert für mich manuell getestet (mit Stripes Testschlüssel), aber ich kann nicht Capybara zu erkennen und fill_in
das E-Mail-Feld in der Stripe Checkout iframe modal.
Ich bin mit Poltergeist für Headless Javascript, obwohl auch diese mit Capybara-webkit und sogar Selen getestet mit dem gleichen Problem.
Was ich versuche, ist die komplette Abonnement Anmelde-Flow zu testen, um zu zeigen, dass ein neuer Benutzer ein Teilnehmerkonto nach ihrer Zahlungsdaten in Streifen Eingabe erstellen können - aber ich kann nicht über den Streifen Kasse Pop-up bekommen. Hier
ist mein before .. do
:
describe "show Stripe checkout", :js => true do
before do
visit pricing_path
click_button 'plan-illuminated'
stripe_iframe = all('iframe[name=stripe_checkout_app]').last
Capybara.within_frame stripe_iframe do
fill_in "email", :with => "[email protected]"
fill_in "billing-name", :with => "Mr Name"
fill_in "billing-street", :with => "test Street"
fill_in "billing-zip", :with => 10000
fill_in "billing-city", :with => "Berlin"
click_button "Payment Info"
end
end
it { should have_selector('button', text: "Subscribe") }
end
Welche Fehler mit:
Failure/Error: Capybara.within_frame stripe_iframe do
Capybara::Poltergeist::TimeoutError:
Timed out waiting for response to {"name":"push_frame","args":[null]}
Wenn ich den Versuch, tauschen die richtige iframe zu wählen (hier vorgeschlagen: Capybara trouble filling in JS modal) wie folgt:
# stripe_iframe = all('iframe[name=stripe_checkout_app]').last
# Capybara.within_frame stripe_iframe do
Capybara.within_frame 'stripe_checkout_app' do
Ich bekomme immer noch die ähnliche:
Capybara::Poltergeist::TimeoutError:
Timed out waiting for response to {"name":"push_frame","args":["stripe_checkout_app"]}
Es scheint, dass welche auch immer Sie Javascript Test gem ich benutze, rspec/Capybara nicht die Stripe Kasse iframe finden. Wenn ich mit Selenium überprüfe, sehe ich die Taste Choose this Plan
gedrückt und das Auschecken-Pop-up, aber die Spezifikation sucht nach dem E-Mail-Feld zum Ausfüllen.
Irgendwelche Ideen?
Ich habe schon versucht:
- Verschiedene Arten der Wahl oder das E-Mail-Feld zu finden.
- Aktualisierung alle meine Edelsteine.
- Mit StripeMock vorher (nicht dass es beteiligt sein sollte, oder?).
- die gleichen Tests gegen Stripe eigene Website Rennen, die die gleichen Fehler geben:
Testing mit:
visit "https://stripe.com/docs/checkout"
click_button 'Pay with Card'
stripe_iframe = all('iframe[name=stripe_checkout_app]').last
Capybara.within_frame stripe_iframe do
fill_in 'Email', with: '[email protected]'
sleep 3
end
je nachdem, welche Methode, die ich verwende, um den iframe ich die gleichen Fehler erhalten zu wählen.Mit nur Capybara.within_frame 'stripe_checkout_app' do
:
Failure/Error: Capybara.within_frame stripe_iframe do
Capybara::Poltergeist::TimeoutError:
Timed out waiting for response to {"name":"push_frame","args":[null]}
oder mit Selen mit stripe_iframe = all('iframe[name=stripe_checkout_app]').last
:
Failure/Error: Unable to find matching line from backtrace
SystemStackError:
stack level too deep
oder auch nur:
Failure/Error: fill_in 'Email', with: '[email protected]'
Capybara::ElementNotFound:
cannot fill in, no text field, text area or password field with id, name, or label 'Email' found
... je nachdem, welche der Prüfung javascript gem ich verwende.
Jede Hilfe oder Weisheit ist sehr zu schätzen!
Das funktionierte perfekt, aber ich habe den Schlaf etwas erhöht und anstatt den Code in einen Vorher-Block zu setzen, habe ich es in das tatsächliche Szenario eingefügt. Wie auch immer, großartige Lösung. Vielen Dank. –
Gefallen mit 'Capybara.default_wait_time = 2' über' sleep (2) ' –
Die einzige funktionierende Lösung für mich. Es ist schade, dass ich Selen für diesen Test brauche! – hcarreras