win7 trustedinstaller requieren que pide permisos permiso eliminar desinstalar como archivo administrador capybara poltergeist

trustedinstaller - Descargar el archivo a una carpeta específica usando el controlador Capybara y Poltergeist



trustedinstaller windows 7 (4)

Esto no es posible actualmente con Poltergeist.

Creo que sería mejor que escribieras una prueba para este CSV que no usa Capybara. (Por ejemplo, mediante el uso de la función de pruebas de integración de Rails incorporada y el análisis de la respuesta como un CSV).

Estoy escribiendo mis pruebas de aceptación usando Capybara y Poltergeist driver. Necesito validar el contenido del archivo CSV descargado.

  1. Probé varias formas de mostrar el contenido en la página en lugar de descargarlo.
  2. También intenté cambiar los tipos mime, pero no está funcionando.

Finalmente, quiero establecerme con la opción de descargar el archivo en una carpeta específica y luego leer el archivo CSV usando las bibliotecas del núcleo Ruby.

Para lograr esto, cuando el controlador de Poltergeist haga clic en el enlace de descarga, quiero que maneje la ventana emergente y descargue el archivo directamente en la carpeta dada.

En los controladores de Chrome y Firefox de Selenium, tengo la opción de configurar perfiles para manejar ventanas emergentes y configurar el directorio de descarga.

¿Existe alguna opción de este tipo utilizando poltergeist? Cualquier información será útil.



He tenido que hacer cosas similares en mi aplicación de rieles. Mi solución es usar Javascript para realizar una solicitud XMLHttpRequest a la URL, descargar el archivo, devolver el contenido del archivo a Capybara y usar ruby ​​para guardar el archivo en algún lugar del disco. Luego, en otro paso, reviso el contenido del archivo CSV descargado.

Aquí está la definición del paso para descargar el archivo:

Then /^I download the csv file$/ do page.execute_script("window.downloadCSVXHR = function(){ var url = window.location.protocol + ''//'' + window.location.host + ''/file.csv''; return getFile(url); }") page.execute_script("window.getFile = function(url) { var xhr = new XMLHttpRequest(); xhr.open(''GET'', url, false); xhr.send(null); return xhr.responseText; }") data = page.evaluate_script("downloadCSVXHR()") File.open(File.join(Rails.root, "tmp", "csv.data"), "w") { |f| f.write(data) } end

Cambie la URL en el código de Javascript a la ubicación de su CSV.

Y finalmente, aquí está mi definición de paso para validar el contenido del archivo CSV:

And /^the contents of the downloaded csv should be:$/ do |contents| file = File.open(File.join(Rails.root, "tmp", "csv.data"), "r") file_contents = file.read file_contents.chop! file_contents.should == contents end

Buena suerte. Espero que esto ayude.


No es posible con Poltergeist, solo puede verificar los encabezados.

step ''I should get zipped file'' do page.response_headers[''Content-Disposition''].should include("filename=/"file.zip/"") end

Pero es posible con el controlador Chrome y también con las versiones recientes de Firefox y Selenium Webdriver. Desafortunadamente, se ejecuta a través de Selenium, es decir, sin cabeza ... Consulte este artículo: http://collectiveidea.com/blog/archives/2012/01/27/testing-file-downloads-with-capybara-and-chromedriver/

Mi enfoque, ligeramente diferente mientras trabajo con Spinach y Rubyzip:

Agregue lo siguiente a su Gemfile

group :test do gem ''chromedriver-helper'' # for Chrome <= 28 gem ''chromedriver2-helper'' # for Chrome >= 29 gem ''selenium-webdriver'' end

features / support / capybara.rb - Estoy usando Poltergeist para escenarios con la etiqueta @javascript y Chrome para escenarios con la etiqueta @download .

require ''spinach/capybara'' require ''capybara/poltergeist'' require ''selenium/webdriver'' # ChromeDriver 1.x, for Chrome <= 28 Capybara.register_driver :chrome do |app| profile = Selenium::WebDriver::Chrome::Profile.new profile[''download.default_directory''] = DownloadHelper::PATH.to_s args = ["--window-size=1024,768"] Capybara::Selenium::Driver.new(app, browser: :chrome, profile: profile, args: args) end # ChromeDriver 2.x, for Chrome >= 29 Capybara.register_driver :chrome do |app| prefs = { download: { prompt_for_download: false, default_directory: DownloadHelper::PATH.to_s } } args = [''--window-size=1024,768''] Capybara::Selenium::Driver.new(app, browser: :chrome, prefs: prefs, args: args) end # Tested with Firefox 27 and Selenium Webdriver 2.39 Capybara.register_driver :firefox do |app| profile = Selenium::WebDriver::Firefox::Profile.new profile[''browser.download.dir''] = DownloadHelper::PATH.to_s profile[''browser.download.folderList''] = 2 # 2 - save to user defined location profile[''browser.helperApps.neverAsk.saveToDisk''] = ''application/zip'' Capybara::Selenium::Driver.new(app, browser: :firefox, profile: profile) end Capybara.javascript_driver = :poltergeist # :webkit :selenium :poltergeist :chrome Spinach.hooks.on_tag("javascript") do Capybara.current_driver = Capybara.javascript_driver Capybara.default_wait_time = 5 end Spinach.hooks.on_tag("download") do Capybara.current_driver = :chrome # or :firefox Capybara.default_wait_time = 50 end

características / soporte / descargas.rb

module DownloadHelper TIMEOUT = 10 PATH = Rails.root.join("tmp/downloads") extend self def downloads Dir[PATH.join("*")] end def download_path wait_for_download downloads.first end def download_content wait_for_download File.read(download_path) end def wait_for_download Timeout.timeout(TIMEOUT) do sleep 0.1 until downloaded? end end def downloaded? downloads.any? && !downloading? end def downloading? downloads.grep(//.crdownload$/).any? end def clear_downloads FileUtils.rm_f(downloads) end end Spinach.hooks.before_scenario do |scenario| DownloadHelper.clear_downloads end Spinach.hooks.after_scenario do DownloadHelper.clear_downloads end

características / file_download.feature

Feature: File download As a user I want to be able to download my files Background: Given I am logged in as a user And I have uploaded files in the system @download Scenario: Successfull download When I click on the download button Then I should get zipped files

features / steps / file_download.rb - Tenga en cuenta que no puede usar page.response_headers ya que no es compatible con Selenium / ChromeDriver. Pero puede verificar el nombre del archivo descargado usando File.basename() .

class Spinach::Features::FileDownload < Spinach::FeatureSteps include SharedAuthentication step ''I click on the download button'' do click_link "Download" end step ''I should get zipped files'' do File.basename(DownloadHelper.download_path).should == ''file.zip'' Zip::ZipFile.open(DownloadHelper.download_path) do |zipfile| zipfile.find_entry(''myfile.txt'').should_not be_nil zipfile.find_entry(''myphoto.jpg'').should_not be_nil end end end