Estoy trabajando en un proyecto de automatización que requiere la carga de un archivo mediante la interfaz de usuario de Karate. Mi equipo y yo probamos algunas alternativas y usar driver.inputFile() pareció funcionar bien. Sin embargo, también realizamos pruebas en modo sin interfaz con Browserstack, donde notamos que la misma línea no funcionaba, dando el siguiente error:
js failed: >>>> 01: driver.inputFile(cleoPortal.inputBox, "C:\\Users\\hello\\Documents\\documents\\text-sample1.txt") <<<< org.graalvm.polyglot.PolyglotException: TypeError: invokeMember (inputFile) on com.intuit.karate.driver.chrome.ChromeWebDriver@4cfcac13 failed due to: Unknown identifier: inputFile - <js>.:program(Unnamed:1) Después de mirar el rastro, me parece que, por alguna razón, cuando se ejecuta sin cabeza, el controlador no tiene definido este método. Al investigar, también confirmé que las 2 formas de ejecutar inicializan diferentes objetos de controlador, com.intuit.karate.driver.chrome.Chrome para la ejecución local y com.intuit.karate.driver.chrome.ChromeWebDriver para el headless.
Sin cabeza: informe de ejecución sin cabeza img
Local: img de informe de ejecución local
Después de profundizar un poco en el código fuente de karate, encontré que ChromeWebDriver.java extiende la clase WebDriver, mientras que Chrome.java extiende DevToolsDriver, y que el primero no tiene el método inputFile() que estamos tratando de usar.
Teniendo en cuenta esto, mi pregunta es: ¿Sería posible implementar este método en WebDriver? ¿O hay alguna alternativa que podamos probar? También me gustaría señalar que probé la entrada normal () pero no funcionó.
No configuré ningún proyecto de demostración porque no estoy muy seguro de cómo reproducir el problema sin una configuración pesada y la ayuda de otras herramientas, pero estoy abierto a sugerencias en caso de que ayude a resolver el problema. ¡Lo lamento!
¡Gracias de antemano por la ayuda!
Eso es correcto, WebDriver y Chrome DevTools (que recomendamos) son fundamentalmente diferentes. La última vez que verifiqué, la carga de archivos era una limitación conocida en la especificación de WebDriver y cada controlador de navegador (Firefox, Safari, etc.) no es compatible o tiene un comportamiento diferente.
Y sí, los navegadores sin cabeza también tienen limitaciones.
Por lo tanto, mi consejo es cambiar su estrategia de prueba para que la carga de archivos se pruebe solo en un navegador. Consulte también: https://stackoverflow.com/a/61393515/143475
Pero puede investigar un poco y contribuir con el código del proyecto Karate. Estaremos encantados de aceptar cualquier PR que mejore el estado de las cosas.
En caso de que Playwright admita la carga de archivos entre navegadores, también es una opción para investigar, ya que tenemos un adaptador experimental.