2016-04-26 7 views
0

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?

+0

hast du 'beschreib 'titel",: js => true do'? – fabersky

+0

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. –

+0

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. –

Antwort

0

Die Anwendung hat die Datei mit dem Typ "application/octet-stream" gemeldet. Hinzufügen

profile['browser.helperApps.neverAsk.saveToDisk'] = "application/pdf, application/octet-stream" 

löste das Problem in diesem Fall.