Solución:
Si está intentando seleccionar un archivo para cargar, Selenium 2 admite entradas de archivos HTML. Por ejemplo:
HTML
<input type="file" id="uploadhere" />
Código de selenio
IWebElement element = driver.FindElement(By.Id("uploadhere"));
element.SendKeys("C:\Some_Folder\MyFile.txt");
Básicamente, “escribe” (con SendKeys
) la ruta completa del archivo al elemento de entrada del archivo. Selenium maneja el cuadro de diálogo de selección de archivos por usted.
Sin embargo, si desea manipular un cuadro de diálogo de selección de archivos arbitrario, como dijo Anders, debe salir de Selenium.
No, WebDriver no puede interactuar con los cuadros de diálogo; esto se debe a que los cuadros de diálogo son el dominio del sistema operativo y no la página web.
Conozco personas que han tenido suerte con autoit, así como con la API de automatización proporcionada por .Net.
Otra opción sería omitir el cuadro de diálogo del archivo por completo y emitir un POST o un GET, pero esto requiere un conocimiento más avanzado del sitio web, así como la comprensión de cómo construir un POST / GET.
Puede probar Webinator, es similar a Selenium en el sentido de que funciona con WebDriver. Proporciona capacidades de diálogo de archivos y he tenido un gran éxito con él.
Aquí hay otra solución que usa remotewebdriver, funciona como por arte de magia y me encantó.
Aquí está la clase que tengo:
driver.findElementByLinkText("Upload Files").click();
driver.setLogLevel(Level.ALL);
System.out.println(driver.getCurrentUrl());
WebElement element = driver.findElement(By.xpath("//input[@name="file_1"]"));
LocalFileDetector detector = new LocalFileDetector();
//Now, give the file path and see the magic :)
String path = "D://test66T.txt";
File f = detector.getLocalFile(path);
((RemoteWebElement)element).setFileDetector(detector);
element.sendKeys(f.getAbsolutePath());
//now click the button to finish
driver.findElementByXPath("//html/body/div[9]/div[1]/a/span").click();