2014-10-09 2 views
8

Ich aktualisiere von Schienen 3.2.19 zu Schienen 4.1.5, mit rspec-Schienen 2.14.0.rc1 und Capybara 2.4.1. Alle Tests bestehen, und ich habe nur eine deprecation Warnung links:Verfall Warnung von Capybara

[DEPRECATION] Capybara::Webkit::Driver#accept_js_confirms! is deprecated. Please use Capybara::Session#accept_confirm instead. 

Die Codezeile, die dieses verursacht wird

page.driver.accept_js_confirms! 

Wie kann ich diese Zeile ändern, um die deprecation Warnung zu beseitigen?

+0

page.driver.browser.accept_confirm? – coorasse

+0

Versuchte das selbst, da ich das gleiche Problem habe. Es funktioniert nicht. Es scheint accept_modal (: confirm, options, & blk) zu erkennen, gibt aber einen Argumentfehler. Ich suche immer noch selbst nach der Antwort. – Art

Antwort

10

Da die Ausnahme, sagt:

Bitte verwenden Capybara :: Session statt # accept_confirm.

Sie wollen wahrscheinlich:

page.accept_confirm 

Beachten Sie, dass accept_confirm gegen das Capybara betrieben wird :: Session statt des Treibers.

Diese Methode erwartet einen Block, der den Bestätigungsalarm auslöst. Zum Beispiel:

page.accept_confirm do 
    click_link('that_opens_confirm') 
end 
+0

Das funktioniert nicht, aber Sie haben Recht, es ist nah an der richtigen Antwort. Es sucht nach einem Block. Ich verstehe einfach nicht, wie ich es weitergeben soll. Hier ist der rohe Code dafür. # Führen Sie den Block aus und akzeptieren Sie eine Bestätigung. # # @macro modal_params # def akzeptieren_confirm (text_or_options = nil, options = {}, & blk) wenn text_or_options.is_a? Hash Optionen = text_or_options sonst Optionen [: text] = text_or_options Ende driver.accept_modal (: confirm, Optionen & blk) Ende – Art

+0

Basierend auf der [spec] (https://github.com/jnicklas/ capybara/blob/master/lib/capybara/spec/session/accept_confirm_spec.rb), der Block soll die Aktionen sein, die die Bestätigung auslösen. –

+0

Das ist hilfreich, aber kann es immer noch nicht richtig platzieren. Ich verwende Gurke und habe eine Eingabeaufforderung, die im vorherigen Schritt unter page.driver.console_messages.first angezeigt wird. Die Umstellung auf Sitzung mit page.accept_confirm sollte funktionieren, aber nicht, da ich etwas nicht übergebe. Ich bin immer noch ein Noob :) – Art

0

Ich ersetzte page.driver.accept_js_confirms! mit:

page.execute_script ('window.confirm = function() {return true}')

Und den Test bestanden.

Dies war aus der Dokumentation hier: http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Session#evaluate_script-instance_method

Und von dem internets helfen. Jetzt sagt uns das noch nicht, wie man accept_confirm benutzt, also suche ich immer noch nach dieser Antwort.

Der eigentliche Code sieht wie folgt aus:

# Execute the block, accepting a confirm. 
# 
# @macro modal_params 
# 
def accept_confirm(text_or_options=nil, options={}, &blk) 
    if text_or_options.is_a? Hash 
    options=text_or_options 
    else 
    options[:text]=text_or_options 
    end 

    driver.accept_modal(:confirm, options, &blk) 
end 

Ehrlich gesagt, ich glaube, es ist nur etwas page.accept_confirm sonst, aber ich kann nicht herausfinden, was oder in diesem Block übergeben.

3

Ich hatte 50/50 Erfolg mit Justin Ko's Antwort. Die eine, die hatte Code wie folgt gearbeitet:

link_to "Reset", reset_pre_shot_description_mental_game_path(@mental_game), data: {confirm: 'Are you sure?'}, class: "small_button round", id: "reset_pre-shot" 

und diesen Test:

page.accept_confirm do 
    click_link "Reset" 
end 

Der Test, der fehlschlägt (aber hat Code im Browser funktioniert) hat Code

link_to 'Delete', micropost, data: {confirm: 'Are you sure?'}, method: :delete 

und Test

page.accept_confirm do 
    click_link "Delete" 
end 

Der Fehler ure Nachricht war

Failure/Error: page.accept_confirm do 
Capybara::ModalNotFound: 
    Timed out waiting for modal dialog 

ich die method: :delete in den :data Hash bewegen versucht, aber das hat nicht geholfen.

Es stellt sich heraus, dass die deprecation Warnung gefunden tatsächlich zwei Fehler im Code, wie ich die Schienen 3 Syntax bestätigen Verwendung wurde also nicht die :data Hash verwenden, so wurde mein Code gebrochen, aber die page.driver.accept_js_confirms! Test wurde Kommissionierung es nicht nach oben . Das hat sich also gelohnt.

+0

Wie in Reaktion auf die Identifizierung eines Fehlers durch user2209090 erwähnt, gab es zwei Modale im Test, als ich jedes in ein anderes Szenario trennte, der "Delete" Test funktionierte. Also setze ich nun Justin Ko's Antwort mit der Bedingung auf 100% In Bezug auf den Fehler in der Antwort von user229090: – Obromios

5

Justin Ko Antwort ist richtig in Bezug auf die Nutzung von #accept_confirm - es ist

page.accept_confirm do 
    #code that will trigger the modal 
end 

oder Sie können

page.accept_confirm 'Are you sure?' do 
    #code that will trigger the modal 
end 

tun, die prüft, ob "Sind Sie sicher?" ist die Aufforderung im Bestätigungsfeld angezeigt.

In Ihrem fehlgeschlagenen Test handeln Sie zufällig mit einem anderen Modal zuerst? capybara-webkit hatte einen Bug mit mehreren Mods, der vor ein paar Tagen behoben wurde - https://github.com/thoughtbot/capybara-webkit/commit/86e422f94422d39e537329d64d7bfe8f6360bd8b. Es ist noch nicht in einer veröffentlichten Version.

+0

Ja, ich hatte zwei Modal. Ich habe sie in zwei verschiedene Szenarien aufgeteilt und beide Tests bestanden. Also ist alles gut, abgesehen von dem Bug, den du zitierst. – Obromios

0

für mich perfekt funktioniert:

page.execute_script('window.confirm = function() { return true }')