attach java file-upload selenium automated-tests webdriver

java - attach - path selenium



Cómo lidiar con la carga de archivos en la automatización de pruebas usando selenio o webdriver (6)

Después de golpearme la cabeza con este problema durante demasiadas horas, quería compartir con la comunidad que Firefox 7.0.1 parece tener un problema con la implementación sendKeys () de FirefoxDriver mencionada anteriormente (al menos no pude hacer que funcionara). en mi caja de Windows 7 x64), no he encontrado una solución alternativa, pero la actualización a Firefox 8.0.1 parece haber solucionado el problema. Para aquellos de ustedes que se preguntan, también es posible usar Selenium RC para resolver este problema (aunque deben tener en cuenta todos sus sistemas operativos de destino y las pulsaciones de teclas nativas necesarias para interactuar con sus diálogos de selección de archivos). Afortunadamente, los problemas con los que tuve que trabajar le ahorraron a otras personas algo de tiempo, en resumen:

https://gist.github.com/1511360

Creo que todo el mundo que usa Webdriver para la automatización de pruebas debe ser consciente de sus grandes ventajas para el desarrollo web.

Pero existe un gran problema si la carga de archivos es parte de su flujo web. Deja de ser una automatización de prueba. La restricción de seguridad de los navegadores (que invoca la selección de archivos) prácticamente imposibilita la automatización de las pruebas.

Afaik, la única opción es hacer que el controlador de la web haga clic en el botón de carga del archivo, suspenda el hilo, haga que el desarrollador / probador seleccione manualmente el archivo y luego haga el resto del flujo de la web.

¿Cómo lidiar con esto, hay un trabajo para ello? Porque realmente no se puede hacer así. No tendría sentido.

Este es el único caso que conozco cuando las restricciones de seguridad del navegador no se aplican:

<script language=javascript> function window.onload(){ document.all.attachment.focus(); var WshShell=new ActiveXObject("WScript.Shell") WshShell.sendKeys("D:/MyFile.doc") } </script>


La sugerencia de escribir en el cuadro de texto solo funciona si el cuadro de texto está habilitado. Bastantes aplicaciones lo obligan a pasar por el explorador de archivos del sistema de archivos por razones obvias. ¿Que haces entonces? No creo que los expertos en WebDriver pensaran simplemente en presentar las claves en el búfer de KeyBoard (esto solía ser un "pan comido" en los primeros días de automatización)

===

Después de varios días de dormir poco, golpear la cabeza y tirar del pelo, pude obtener algo de la solución basada en el robot que se sugiere aquí (y en otros lugares).

El problema que encontré fue que el cuadro de texto de diálogo que se rellenó con la ruta y el nombre de archivo correctos no pudo responder a KeyPress / Release Events de la terminación del nombre de archivo con VK_ENTER como en:

private final static int Enter = KeyEvent.VK_ENTER; keyboard.keyPress(Enter); keyboard.keyRelease(Enter);

Lo que ocurre es que la ruta del archivo y el nombre del archivo se escriben correctamente, pero el diálogo permanece abierto, en contra de mi constante esperanza y rezando para que la emulación de claves la finalice y la aplicación que está probando la procese.

¿Alguien sabe cómo hacer que este robot se comporte un poco mejor?


Si tiene una grilla, puede hacer que la carpeta de los archivos de prueba esté abierta para compartir.

De esta forma, puede seleccionar el campo de entrada de carga y establecer su valor en // pc-name / myTestFiles

Si no lo es, debe ir con archivos locales en cada sistema.


Solo pensé en proporcionar un FYI a la publicación original del autor sobre el uso de ActiveX. Otra solución sería la integración con herramientas de automatización de GUI de escritorio para hacer el trabajo. Por ejemplo, google "Selenium AutoIt". Para una solución más multiplataforma, considere herramientas como Sikuli sobre AutoIt.

Esto, por supuesto, no está considerando la compatibilidad de WebDriver para cargas en IE y Firefox a través de SendKeys, o considerando para otros navegadores donde ese método no funciona.


Usar AWT Robots es una opción, si estás usando Java, lo que eres. Pero no es una buena opción, no es muy confiable y no está nada limpia. Mira aquí

Uso HttpClient y realizo algunas pruebas fuera de Selenium. Eso es más confiable y más limpio.

Vea el código a continuación. Necesitará más manejo de excepciones y condicionales para que se adapte a su trabajo.

HttpClient c = new HttpClient(); String url = "http://" + cargoHost + ":" + cargoPort + contextPath + "/j_security_check"; PostMethod post = new PostMethod(url); post.setParameter("j_username", username); post.setParameter("j_password", password); c.executeMethod(post); url = "http://" + cargoHost + ":" + cargoPort + contextPath + "/myurl.html"; MultipartPostMethod mPost = new MultipartPostMethod(url); String fileNameWithPath = this.getClass().getClassLoader().getResource(filename).getPath(); File f1 = new File(fileNameWithPath); mPost.addParameter(elementName, f1); mPost.addParameter("action", "upload"); mPost.addParameter("ajax", "true"); c.executeMethod(mPost); mPost.getResponseBodyAsString();


Webdriver puede manejar esto con bastante facilidad en IE y Firefox. Es un caso simple de encontrar el elemento y escribir en él.

driver = webdriver.Firefox() element = driver.find_element_by_id("fileUpload") element.send_keys("myfile.txt")

El ejemplo anterior está en Python, pero obtienes la idea