Szenario: Der Versuch, externe URL über Capybara zu besuchen, um eine Datei herunterzuladen. Selenium oder Webkit muss als Treiber verwendet werden. Rack-Test kann nicht verwendet werden, da es keine externen URLs zulässt.Herunterladen von Datei in Capybara ohne Schienen
Die Website verwendet iframes.
Der Datei-Download wird über Javascript wie folgt aufgefordert:
<a href="javascript:OpenFile('****.pdf', 2)">some_text_here</a>
auf den Link klicken aufgefordert, einen nativen Browser-Download bestätigen Feld. Ich habe versucht, die folgenden Methoden: Selen-Treiber:
eigenes Profil mit -> keine Wirkung, das Popup erscheint noch
Capybara.register_driver :selenium do |app| profile = Selenium::WebDriver::Firefox::Profile.new profile['browser.download.dir'] = "~/Downloads" profile['browser.helperApps.neverAsk.saveToDisk'] = "application/pdf" Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => >profile) end
mit Hilfe von Javascript, bevor Sie auf Link-> keine Wirkung
within_frame(1) do page.evaluate_script('window.confirm = function() { return true; }') find(:xpath,"//span[@class='BoldText']/a").click end
versuchen, alert zu verwenden -> nicht auch wenn der Download-Box
page.driver.browser.switch_to.alert.accept -> No alert is present
Webkit-Treiber erscheint gefunden:
versucht Javascript verwenden -> Datei nicht
werden wird heruntergeladen
page.accept_confirm nicht zu finden irgendwelche Verbindungen
Wie lade ich die Datei herunter?
hast du 'beschreib 'titel",: js => true do'? – fabersky
Ihre benutzerdefinierte Profilmethode sollte funktionieren (es ist ein bisschen komisch, den Treiber zu nennen: webkit, wenn es firefox verwendet), solange das Dokument als 'application/pdf' und nicht als 'application/octet-stream' erkannt wird - Sie können versuchen, 'profile ['browser.helperApps.neverAsk.saveToDisk'] =" application/pdf, application/octet-stream "' oder überprüfen Sie in Ihrer App, dass es tatsächlich die Datei mit der Anwendung/pdf-Typ meldet. Andere Profileinstellungen, die notwendig sein können, sind 'profile ['pdfs.disabled'] = true' und' profile ['browser.download.folderList'] = 2', so dass es Ihr Verzeichnis verwendet. –
Vielen Dank Tom Walpole, die Anwendung war in der Tat Melden der Datei mit dem Typ "application/octet-stream". Benennung des Treibers: webkit war ein Tippfehler. –