2016-06-21 16 views
0

Ich habe Probleme mit dem Schreiben von Gurken-Tests. Nach Bezahlung über Paylane (irgendwie gibt es nur ein Problem mit Paylane-Szenarien; Paypal, Stripe und Payu funktionieren gut) wenn es auf der "Danke" -Seite aussieht wie Capybara klickt auf den Button (um zum Store zurückzukehren) wird es im Browser hervorgehoben macht nichts. Außerdem geht es zum nächsten Schritt und prüft, ob es auf der Ladenseite ist, also denkt es, dass das Klicken auf die Schaltfläche gut gelaufen ist (nehme ich an). Kann mir jemand dabei helfen?Es sieht so aus, als ob Capybara auf die Schaltfläche richtig geklickt hat, aber nicht auf die nächste Seite weitergeht


@lp @purchase @paylane @javascript 
Feature: Purchase a product from a Landing Page via Paylane 
    As a Sneakpick user 
    I can access Landing Pages of product 
    So I can successfully purchase it via Paylane 

    Scenario: Purchase product via Paylane # features/purchases/landing_page/paylane.feature:7 
    Given I visit the Landing Page  # features/step_definitions/basic_steps.rb:5 
    Then I want to order 1 product  # features/step_definitions/purchase_steps.rb:92 
    And product is available via Paylane # features/step_definitions/purchase_steps.rb:1 
DEPRECATION WARNING: Passing a template handler in the template name is deprecated. You can simply remove the handler name or pass render :handlers => [:erb] instead. (called from _app_views_paylane_pay_html_erb___1015711955565910954_70249561011280 at /home/szczepan/1000i/Git/sneakpick/app/views/paylane/pay.html.erb:2) 
    Then I go to payment     # features/step_definitions/purchase_steps.rb:53 
    And I pay via Paylane    # features/step_definitions/paylane_steps.rb:1 
     expected to find text "Product" in "Payment - Sneakpick.co Thank You! Your order has been processed. We've sent you a confirmation emailwith your order details. « Back to product powered by sneakpick" (RSpec::Expectations::ExpectationNotMetError) 
     ./features/step_definitions/purchase_steps.rb:77:in `/^I am on Landing page$/' 
     ./features/step_definitions/paylane_steps.rb:2:in `/^I pay via Paylane$/' 
     features/purchases/landing_page/paylane.feature:12:in `And I pay via Paylane' 
    And my Paylane order should be made # features/step_definitions/paylane_steps.rb:76 

    Scenario: Purchase product via Paylane    # features/purchases/landing_page/paylane.feature:15 
    Given I visit the Landing Page     # features/step_definitions/basic_steps.rb:5 
    Then I want to order 1 product     # features/step_definitions/purchase_steps.rb:92 
    And product is available via Paylane    # features/step_definitions/purchase_steps.rb:1 
DEPRECATION WARNING: Passing a template handler in the template name is deprecated. You can simply remove the handler name or pass render :handlers => [:erb] instead. (called from _app_views_paylane_pay_html_erb___1015711955565910954_70249561011280 at /home/szczepan/1000i/Git/sneakpick/app/views/paylane/pay.html.erb:2) 
    Then I go to payment        # features/step_definitions/purchase_steps.rb:53 
    And I pay via Paylane not with card successfully # features/step_definitions/paylane_steps.rb:13 
    And my Paylane order should be made    # features/step_definitions/paylane_steps.rb:76 

Oh, und zweitens funktioniert gut, aber zuerst nicht und doch klicken sie auf den gleichen Knopf. Hier sind die Schritte:


And /^I pay via Paylane$/ do 
    steps %(
    And I check if Paylane form is filled with correct data 
    And I fill in the card data 
    And I send form 
    And I accept confirmation alert 
    And I am on Thank You page 
    And I click 'Back to product' button 
    And I am on Landing page 
) 
end 

And /^I pay via Paylane not with card successfully$/ do 
    steps %(
    And I choose last available payment 
    And I send form 
    And I accept confirmation alert 
    And I click 'SUCCESS' button 
    And I am on Thank You page 
    And I click 'Back to product' button 
    And I am on Landing page 
) 
end 

Und "ich auf (. +) Taste" Schritt:


And /^I click '(.+)' button$/ do |button| 
    click_on(button) 
end 

Der Button Text "Zurück zum Artikel" enthält.

Jede Hilfe wäre willkommen!

+0

Ich habe vor dem Klicken Schlaf hinzugefügt, die Probleme verursacht haben und es hilft, aber ich behandle das wie eine temporäre Lösung. Gibt es Probleme mit Gurken zu warten, bis die Seite geladen ist, bevor Sie etwas daran tun? – sbulat

Antwort

0

Eine der typischen Lösungen dafür (zumindest in Ruby-Cucumber) ist eine einfache Methode wie wait_for_ajax - im Grunde blockiert es, bis es registriert, dass es keine aktiven HTTP-Aufrufe mehr gibt, bevor Sie fortfahren. Dies wird normalerweise innerhalb Capybara als Funktionsaufruf von Ihrer Schrittdefinition durchgeführt. Wann immer Sie warten müssen (vor allem auf einer Drittanbieter-Seite), streuen Sie dies großzügig in Ihren Step-Defs, vor allem, nachdem Sie eine Aktion (wie das Klicken auf etwas) ausgeführt haben. Es ist viel zuverlässiger als nur sleep() für eine vorbestimmte Zeit zu rufen.

def wait_for_ajax 
    Timeout.timeout(Capybara.default_max_wait_time) do 
     loop until finished_all_ajax_requests? 
    end 
end 

def finished_all_ajax_requests? 
    page.evaluate_script('jQuery.active').zero? 
end 

Quelle: Thoughtbot für Original-Quellcode (es ist schon eine Weile) und persönliche Erfahrung eine unzuverlässige Capybara/Cucumber-Testsuite zu befestigen.

Auch zuletzt überprüft, die steps%(...) Syntax in Capybara ist veraltet, und Sie sollten stattdessen einzelne Schritte mit step '...' aufrufen. Sie können Ihre Step-Defs mehr wie Funktionsaufrufe behandeln (für genau diese Art von Dingen).