Wie schreibe ich Integrationstests für Stripe Checkout on Rails?

Ich habe versucht, einen Integrationstest für Stripes checkout.js zu schreiben.https://checkout.stripe.com/checkout.js ] für meine Rails 3.2 App.

Beim manuellen Testen (mit den Testschlüsseln von Stripe) funktioniert die Stripe-Prüfung für mich ordnungsgemäß, aber ich kann Capybara nicht erkennen und aktivierenfill_in das E-Mail-Feld in der Stripe-Kaufabwicklung iframe modal.

ich benutzePoltergeist für headless javascript habe ich das allerdings auch mit getestetCapybara-Webkit und sogarSelen mit dem gleichen Problem.

Was ich zu testen versuche, ist der vollständige Anmeldefluss für das Abonnement, um zu zeigen, dass ein neuer Benutzer ein Abonnentenkonto erstellen kann, nachdem er seine Zahlungsdetails in Stripe eingegeben hat. Ich komme jedoch nicht über das Popup-Fenster für die Stripe-Kasse hinaus.

Hier ist meinbefore .. 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 vertausche, den richtigen Iframe zu wählen (hier vorgeschlagen:Capybara-Probleme beim Ausfüllen von 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 noch das ähnliche:

Capybara::Poltergeist::TimeoutError:
   Timed out waiting for response to {"name":"push_frame","args":["stripe_checkout_app"]}

Es scheint, dass rspec / capybara den Stripe-Checkout-Iframe nicht finden kann, egal welches Javascript-Test-Juwel ich verwende. Wenn ich mich bei Selen erkundige, sehe ich dasChoose this Plan Drücken Sie die Taste, und das Checkout-Popup-Fenster wird angezeigt. In der Spezifikation wird jedoch nach dem auszufüllenden E-Mail-Feld gesucht.

Irgendwelche Ideen?

Ich habe es schon versucht:

Verschiedene Möglichkeiten, das E-Mail-Feld auszuwählen oder zu finden.Aktualisiere alle meine Edelsteine.Verwenden Sie vorher StripeMock (nicht, dass es beteiligt sein sollte, oder?).Dieselben Tests für die eigene Site von Stripe ausführen, die dieselben Fehler verursachen:

Testen 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, mit welcher Methode ich den Iframe auswähle, erhalte ich dieselben Fehler. Verwenden Sie einfachCapybara.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 Seleniumstripe_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, welchen Javascript-Test ich verwende.

Jede Hilfe oder Weisheit wird sehr geschätzt!

Antworten auf die Frage(5)

Ihre Antwort auf die Frage