2010-05-13 11 views
5

Ich benutze Schienen 2.3.5 und das ist, was ich getan habe. Ich habe die neuesten Gurken, Gurkenschienen und Capybara installiert.Capybara Selen und JavaScript Destroy

rails demo 
cd demo 
ruby script/generate cucumber --rspec --capybara 
ruby script/generate feature post title:string body:text published:boolean 
ruby script/generate scaffold post title:string body:text published:boolean 
rake db:migrate 
rake cucumber 

Alle Tests sind vorüber. Jetzt möchte ich mit Javascript testen.

Zu diesem Zeitpunkt ist dies, wie Szenario sieht wie

Scenario: Delete post 
    Given the following posts: 
     |title|body|published| 
     |title 1|body 1|false| 
     |title 2|body 2|true| 
     |title 3|body 3|false| 
     |title 4|body 4|true| 
    When I delete the 3rd post 
    Then I should see the following posts: 
     |Title|Body|Published| 
     |title 1|body 1|false| 
     |title 2|body 2|true| 
     |title 4|body 4|true| 

ich an der Spitze hinzugefügt @javascript.

Jetzt, wenn ich Rake Gurke laufen dann sehe ich eine Bestätigungsseite. Aber nichts passiert, bis ich klicke.

Was muss ich tun, damit OK automatisch angeklickt wird und der Test fortgesetzt wird?

Antwort

8

Nun seiner Art ein Hack, aber ich denke, jetzt es ist der einzige Weg:

When /^I confirm a js popup on the next step$/ do 
    page.evaluate_script("window.alert = function(msg) { return true; }") 
    page.evaluate_script("window.confirm = function(msg) { return true; }") 
end 

Sie haben diesen Schritt setzen sich direkt vor dem einen, der das bestätigen Popup-Trigger (folgt dem Link) . Es wird den Standardalarm ändern und das Verhalten bestätigen, um immer wahr zurückzugeben. Sie müssen also nicht selbst auf "OK" klicken.

+0

Hatte es zu tun, aber es funktioniert! –

0

Dank Steven für seine Lösung, hier ist, wie ich es so modifiziert, dass es ein wenig besser liest:

When /^I follow "([^"]*)" and click OK$/ do |text| 
    page.evaluate_script("window.alert = function(msg) { return true; }") 
    page.evaluate_script("window.confirm = function(msg) { return true; }") 
    When %{I follow "#{text}"} 
end 
2

ich eine Variation Tobias-Lösung implementiert haben.

When /^(.*) and (?:|I)click "OK"$/ do |step| 
    click_ok_after { When step } 
end 

module JavascriptHelpers 
    def click_ok_after 
    begin 
     page.evaluate_script("window.alert = function(msg) { return true; }") 
     page.evaluate_script("window.confirm = function(msg) { return true; }") 
    rescue Capybara::NotSupportedByDriverError 
     # do nothing: we're not testing javascript 
    ensure 
     yield 
    end 
    end 
end 
World(JavascriptHelpers) 

Die vollständige Erklärung kann ich hier http://davidsulc.com/blog/2011/07/10/cucumber-tweaks/ schrieb darüber im Blog-Post zu finden (darunter ein hilfreicher Schritt Definition für den Test Inhalt: die folgenden

Ich wollte Schritte wie When I follow the "Delete" link for customer "Alice Angry" haben, so habe ich in HTML-Containern).

Verwandte Themen