Estoy trabajando en la automatización del navegador y tratando de adjuntar el archivo usando el software Capybara. Tengo un botón al hacer clic en el que mi secuencia de comandos debería comenzar a cargar el archivo. Ya funciona en un lugar en el mismo sitio web para mí, así que estoy tratando de implementarlo nuevamente.
La forma en que lo hago:
$private_key_path = '/Users/user1/Desktop/my_file.zip' upload_generated_zip_btn = browser.all(:element, 'material-button', text: 'Upload generated ZIP') browser.attach_file($private_key_path) do upload_generated_zip_btn[0].click endPero, de hecho, mi secuencia de comandos simplemente hace clic en el botón, luego aparece la ventana emergente donde puedo elegir manualmente el archivo. Después de varios segundos, el script falla con el siguiente error:
ArgumentError: Capybara was unable to determine the file input you're attaching toMiré los documentos, el código original pero no entendí el problema. La carga manual de los mismos archivos funciona. Intenté cambiar el localizador, sin resultados.
La captura de pantalla del código del botón:
Código fuente:
Cuando se usa la versión de bloque de added_file, Capybara adjunta un oyente para hacer clic en los elementos <input type="file"> y lo usa para determinar a qué entrada desea adjuntar un archivo. Como no lo encuentra, no activa el clic o la forma en que está estructurado su código oculta el clic de Capybara. Primero, preguntaría por qué está usando all y el tipo de selector de element para encontrar el botón y en su lugar sugerir (¿suponiendo que el navegador es la sesión de Capybara?)
browser.attach_file($private_key_path) do browser.find('material-button', text: 'Upload generated ZIP').click endSin embargo, es difícil decir si eso es correcto porque en realidad no muestra el HTML de un botón con ese texto en su pregunta. Si eso aún no funciona, necesitará ubicar el elemento de entrada del archivo y usar la versión sin bloque de added_file. Algo como
attach_file($private_key_path, make_visible: true)o encontrando primero la entrada del archivo usted mismo
browser.find('input[type="file"]', visible: false).attach_file($private_key_path, make_visible: true)Una vez más, es difícil decirlo con certeza, ya que su HTML no parece mostrar realmente el botón en el que está tratando de hacer clic.
Carpincho no interactúa con elementos no visibles. Por lo tanto, intente eliminar el atributo oculto y hacerlo visible para la selección de archivos. Pruebe esto:
selector = {Selector} # selector for material button Capybara.current_session.execute_script("document.querySelector('#{selector}').removeAttribute('hidden')") expect(page).to have_content(file_upload", visible: true) page.attach_file( find('material-button', text: 'Upload generated ZIP'), Rails.root.join($private_key_path)