Estoy trabajando para cargar archivos a través de una etiqueta HTML sin entrada en Playwright.
Por ejemplo, puede usar setInputFiles de esta manera, y esto funciona:
await page.setInputFiles('input[type="file"]', './headphone.png') Pero aparentemente setInputFiles solo funciona para el elemento de entrada, algo como esto será un error:
await page.setInputFiles('label.ImageUpload__label ', './headphone.png');El HTML en el que estoy trabajando es así:
<div id="ImageUpload" class="ImageUpload u-marginB10"> <label class="ImageUpload__label js-dragdrop-area" for="selectFileMultiple"> <span class="ImageUpload__hide">drag and drop or select files</span> <span class="ImageUpload__text"><span class="js-dragdrop-num">10</span>up to</span> </label> </div>Entonces, ¿es posible cargar archivos a dichos elementos HTML con Playwright?
NodeJs: https://playwright.dev/python/docs/api/class-filechooser
page.on("filechooser", (fileChooser: FileChooser) => { fileChooser.setFiles(["/path/to/a/file"]); })Python: https://playwright.dev/python/docs/api/class-filechooser/
with page.expect_file_chooser() as fc_info: page.click("upload") file_chooser = fc_info.value file_chooser.set_files("/path/to/a/file")Java: https://playwright.dev/java/docs/api/class-filechooser
FileChooser fileChooser = page.waitForFileChooser(() -> page.click("upload")); fileChooser.setFiles(Paths.get("myfile.pdf"));Tuve el mismo problema, así que decidí usar AutoIt para cargar archivos con Playwright.
AutoIt v3 es un lenguaje de secuencias de comandos gratuito similar a BASIC diseñado para automatizar la GUI de Windows y las secuencias de comandos generales.
Usé AutoIT para manejar el cuadro de diálogo Carga de archivos de Windows, que no se puede manejar con Playwright.
WinWaitActive("Choose files") Send("C:\ChromeDriver\text.txt") Send("{ENTER}")Si no funciona, cambie Elegir archivos a cualquier título que esté en la parte superior izquierda del cuadro de diálogo de carga.
Cree la función execFile de los módulos de proceso secundarios en node.js. Referencia: https://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback
Agregue esto a la parte superior de su archivo de prueba .spec.ts:
var exec = require('child_process').execFile; var upload_script = function(){ exec('upload.exe', function(err, data) { console.log(err) }); }Abra el cuadro de diálogo de carga, luego llame a la función en su prueba
// Click Browse await page.locator('#browse').click(); // Execute Upload Script upload_script();Tienes que ejecutar tu prueba dirigida o no funcionará:
prueba de dramaturgo npx --headed