selenium - Prueba de carga de archivos en Nightwatch.js
(2)
Hubo dos problemas separados con mi implementación del método setValue()
.
El uso de la etiqueta --verbose en el comando nightwatch me llevó a un problema en el que no estaba realmente encontrando la etiqueta de entrada durante el
setValue()
, sin embargo, fue durantewaitForElementVisible()
. Cambiar lainput[type="file"]
parainput#fileUpload
resolvió este problema.En segundo lugar, las siguientes formas de describir el camino no funcionaban ...
-
''textfile.txt''
-
''http://localhost:3000/testfile.txt''
(''http://localhost:3000/testfile.txt''
si se escribe manualmente en la ventana de carga de archivos)
Lo que funcionó fue usarrequire(''path'').resolve(__dirname + ''/testfile.txt'')
-
Echa un vistazo aquí para ver la discusión que condujo a la solución. Gracias a richard-flosi.
El código de trabajo:
module.exports = {
"Standard File Upload" : function (browser) {
browser
.url("http://localhost:3000")
.waitForElementVisible(''body'', 1000)
.waitForElementVisible(''input#fileUpload'', 1000)
.pause(1000)
.setValue(''input#fileUpload'', require(''path'').resolve(__dirname + ''/testfile.txt'')) // Works
// .setValue(''input#fileUpload'', "testfile.txt") // Will not work
// .setValue(''input#fileUpload'', "http://localhost:3000/testfile.txt") // Will not work
// .setValue(''input[type="file"]'', require(''path'').resolve(__dirname + ''/testfile.txt'')) // Will not work
.click(''#submit'')
.pause(1000)
.assert.containsText(''h3'', ''File Uploaded Successfully'')
.end();
}
};
Me gustaría volver a abrir la pregunta planteada aquí y aquí sobre la carga de archivos de prueba dentro de Nightwatch.js que usa selenio.
Ambos enlaces tienen la solución recomendada de establecer el valor del elemento de entrada de archivo como la url. En mi caso de uso, no he podido hacer que esto funcione. Incluso al establecer la etiqueta de valor manualmente, fuera del turno de noche, de la entrada donde type="file"
, no cambia la url. Intenté esto con Chrome, Firefox e IE10, dentro de las herramientas de desarrollo.
Una solución alternativa que he analizado fue tratar de emular las pulsaciones de teclas del proceso de carga de archivos completo. Esto seguiría la ruta de hacer clic en el botón de carga de archivos, escribir la ruta y escribir enter. Esto se haría a través de los métodos .click
y .key
. Sin embargo, pierde el foco de la ventana de carga del archivo real, lo que retrasa las pulsaciones de teclas hasta que se cierra esa ventana. Otros desarrolladores parecen ser capaces de arreglar esta solución directamente en selenio utilizando los métodos .findElement
y .sendKeys
en Java, pero no pude encontrar la manera de hacerlo en javascript y en el propio nightwatch.
¿Algunas ideas?
// My test
module.exports = {
"Standard File Upload" : function (browser) {
browser
.url("http://localhost:3000")
.waitForElementVisible(''body'', 1000)
.waitForElementVisible(''input[type="file"]'', 1000)
.setValue(''input[type="file"]'',''http://localhost:3000/testfile.txt'')
.click(''#submit'')
.pause(1000)
.assert.containsText(''h3'', ''File Uploaded Successfully'')
.end();
}
};
// http://localhost:3000/testfile.txt was tested manually in the file upload window and worked successfully
<!-- My input tag -->
<input id="fileUpload" type="file" name="textfile"/>
No estoy seguro de por qué tiene estos problemas, tal vez verifique si está utilizando la última versión del servidor de selenio y el turno de noche. Este código funciona para mí al 100% en Chrome, Safari, Firefox, IE7 / 8/9/10/11 (no probado en IE6 pero asumo también).
driver.setValue(''input#fileUpload'', __dirname + ''//testfile.txt'')