Estoy usando Selenium webdriver, C#.Selenium WebDriver y los navegadores seleccionan el cuadro de diálogo
¿Es posible hacer trabajo webdriver con el diálogo de selección de archivos de Firefox? O debo usar algo así como autoit?
Estoy usando Selenium webdriver, C#.Selenium WebDriver y los navegadores seleccionan el cuadro de diálogo
¿Es posible hacer trabajo webdriver con el diálogo de selección de archivos de Firefox? O debo usar algo así como autoit?
Si está intentando seleccionar un archivo para cargarlo, Selenium 2 admite entradas de archivos HTML. Por ejemplo:
HTML
<input type="file" id="uploadhere" />
Código selenio
IWebElement element = driver.FindElement(By.Id("uploadhere"));
element.SendKeys("C:\\Some_Folder\\MyFile.txt");
Básicamente "tipo" (con SendKeys
) la ruta completa del archivo en el elemento de entrada de archivo. Selenium maneja el diálogo de selección de archivos para usted.
Sin embargo, si desea manipular un diálogo de selección de archivo arbitrario, entonces, como dijo Anders, debe salir de Selenium.
No, WebDriver no puede interactuar con los diálogos, esto se debe a que los diálogos son el dominio del sistema operativo y no de la página web.
Conozco personas que han tenido suerte con autoit, así como la API de Automatización proporcionada por .Net.
Otra opción sería omitir el 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 comprender cómo construir un POST/GET.
Puede probar Webinator, es similar al 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 magia y me encantó.
Aquí es 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();
Esto funciona a la perfección, ahorra un gran dolor de cabeza al necesitar instalar software adicional en una caja de prueba (como AutoIT, et al.) – nerdwaller
¿Es esto un enlace Java? Porque en C# no puedo encontrar un método getLocalFile en LocalFileDetector https://selenium.googlecode.com/git/docs/api/dotnet/html/AllMembers_T_OpenQA_Selenium_Remote_LocalFileDetector.htm –
Si desea cargar un archivo, y no utilizar el WebDriver, la única solución que he encontrado es AutoIt. Le permite escribir un script y convertirlo en un archivo ejecutable al que puede llamar desde su código. Lo he usado con éxito mientras trabajaba con un control ActiveX.
Otro enfoque es usar System.Windows.Forms.SendKeys.SendWait("pathToFile")
.
Lo uso con éxito en todas partes donde no puedo enviar claves al elemento como lo describe @prestomanifesto.
NET tiene una biblioteca de diálogo para manejar la carga de archivos. Tiene una clase SendKeys que tiene un método SendWait (claves de cadena). Envía la clave dada en la aplicación activa y espera a que se procese el mensaje. No devuelve ningún valor.
Esto se puede hacer de la siguiente manera, probado y trabajar con Internet Explorer y Chrome controlador
var allowsDetection = this.Driver as IAllowsFileDetection;
if (allowsDetection != null)
{
allowsDetection.FileDetector = new LocalFileDetector();
}
Driver.FindElement(By.Id("your-upload-input")).SendKeys(@"C:\PathToYourFile");
Referencia https://groups.google.com/forum/#!msg/webdriver/KxmRZ8MkM4M/45CT4ID_WjQJ
Esto funcionó para mí, incluso con el sitio ha ocultado de entrada de archivo. –
No puedo hacer que esto funcione en Firefox en Selenium 2.48. –