Sé que ya hay un complemento para hacer esto en Cypress. Sin embargo, usarlo con archivos jar solo corrompe el archivo y, por lo tanto, es inútil en mi caso de uso. Esto es realmente extraño porque lo probé con todas las combinaciones de codificación y todavía no funciona. Sin embargo, funciona perfectamente bien con otros tipos de archivos.
Este es el código que estoy usando (funciona excepto con archivos jar).
cy.fixture('test.jar', 'binary') .then(Cypress.Blob.binaryStringToBlob) .then(fileContent => { cy.get('[data-cy="dropzone"]') .contains('Jar file') .parent() .find('div') .attachFile({ fileContent, filePath: 'test.jar', mimeType: 'application/java-archive', encoding: 'binary', lastModified: new Date().getTime(), subjectType: 'drag-n-drop', force: true }); });Sé que puede realizar solicitudes de publicación en ciprés. ¿Es posible realizar la carga del archivo con él después de hacer clic en el elemento de la zona de caída?
cypress-file-upload carece de soporte explícito para la extensión .jar , esta es la lista actual de extensiones compatibles
const FILE_EXTENSION = Object.freeze({ JSON: 'json', JS: 'js', COFFEE: 'coffee', HTML: 'html', TXT: 'txt', CSV: 'csv', PNG: 'png', JPG: 'jpg', JPEG: 'jpeg', GIF: 'gif', TIF: 'tif', TIFF: 'tiff', ZIP: 'zip', PDF: 'pdf', VCF: 'vcf', SVG: 'svg', XLS: 'xls', XLSX: 'xlsx', DOC: 'doc', DOCX: 'docx', MP3: 'mp3' }); Por lo tanto, la codificación predeterminada utilizada es utf8 . Para pasar explícitamente la codificación como una opción, debe usar el modo sin formato
cy.fixture('sample.jar', 'binary') .then(Cypress.Blob.binaryStringToBlob) .then(fileContent => { cy.get('[data-cy="dropzone"]').attachFile({ fileContent, filePath: 'sample.jar', mimeType: 'application/java-archive', encoding: 'binary', lastModified: new Date().getTime(), }, { subjectType: 'drag-n-drop', force: true }); });Tenga en cuenta que debe probar ambos valores subjectType, ya que desencadenan diferentes eventos.
Aquí está el código que muestra qué eventos se activan con la opción de force
export const EVENTS_BY_SUBJECT_TYPE: Record<Required<HtmlSubjectType>, string[]> = { [HtmlSubjectType.input]: ['change'], /** * @see https://developer.mozilla.org/en-US/docs/Web/API/DragEvent */ [HtmlSubjectType.dragAndDrop]: ['dragstart', 'drag', 'dragenter', 'drop', 'dragleave', 'dragend'], }; Si aún no obtiene ninguna acción, deberá desencadenar eventos manualmente, por ejemplo, encadenar .trigger('change') después de attachFile() . Idealmente, puede averiguar qué eventos del código fuente de la aplicación.
La solución dada por abramenal es incorrecta, esta es la parte de cypress-file-upload que maneja el parámetro de opciones. Si pasa el accesorio como una cadena, se ignora la codificación
function getFixtureInfo(fixtureInput) { // Normal mode // fixture name and options passed separately. if (typeof fixtureInput === 'string') { return { filePath: fixtureInput, encoding: '', mimeType: '', fileName: getFileName(fixtureInput) }; } // Raw mode // If you pass an object, encoding can be specified return { filePath: fixtureInput.filePath, encoding: fixtureInput.encoding || '', mimeType: fixtureInput.mimeType || '', fileName: fixtureInput.fileName || getFileName(fixtureInput.filePath), fileContent: fixtureInput.fileContent, lastModified: fixtureInput.lastModified }; }