java - usar - Subir archivos usando selenio
upload files with selenium (3)
¿Cómo subir archivos desde el local a través de la ventana usando Selenium WebDriver?
Quiero realizar las siguientes acciones:
- haga clic en la opción ''Buscar'' en la ventana
- desde el indicador de la ventana vaya a la ubicación particular en el local donde se guarda el archivo
- seleccione el archivo y haga clic en ''Abrir'' para subir el archivo.
Selenium Webdriver realmente no es compatible con esto. La interacción con ventanas que no son del navegador (como los diálogos nativos de carga de archivos y los diálogos básicos de autenticación) ha sido un tema de mucha discusión en el foro de discusión de WebDriver, pero ha habido poco o ningún progreso en el tema.
En el pasado, pude solucionar este problema capturando la solicitud subyacente con una herramienta como Fiddler2 y luego simplemente enviando la solicitud con el archivo especificado adjunto como blob de bytes.
Si necesita cookies de una sesión autenticada, WebDriver.magage (). GetCookies () debería ayudarlo en ese aspecto.
editar: Tengo un código para esto en algún lugar que funcionó, veré si puedo obtener algo que puedes usar.
public RosterPage UploadRosterFile(String filePath){
Face().Log("Importing Roster...");
LoginRequest login = new LoginRequest();
login.username = Prefs.EmailLogin;
login.password = Prefs.PasswordLogin;
login.rememberMe = false;
login.forward = "";
login.schoolId = "";
//Set up request data
String url = "http://www.foo.bar.com" + "/ManageRoster/UploadRoster";
String javaScript = "return $(''#seasons li.selected'') .attr(''data-season-id'');";
String seasonId = (String)((IJavaScriptExecutor)Driver().GetBaseDriver()).ExecuteScript(javaScript);
javaScript = "return Foo.Bar.data.selectedTeamId;";
String teamId = (String)((IJavaScriptExecutor)Driver().GetBaseDriver()).ExecuteScript(javaScript);
//Send Request and parse the response into the new Driver URL
MultipartForm form = new MultipartForm(url);
form.SetField("teamId", teamId);
form.SetField("seasonId", seasonId);
form.SendFile(filePath,LoginRequest.sendLoginRequest(login));
String response = form.ResponseText.ToString();
String newURL = StaticBaseTestObjs.RemoveStringSubString("http://www.foo.bar.com" + response.Split(''"'')[1].Split(''"'')[0],"amp;");
Face().Log("Navigating to URL: "+ newURL);
Driver().GoTo(new Uri(newURL));
return this;
}
Donde MultiPartForm es: MultiPartForm
Y LoginRequest / Response: LoginRequest LoginResponse
El código anterior está en C #, pero hay clases base equivalentes en Java que harán lo que usted necesita para imitar esta funcionalidad.
La parte más importante de todo ese código es el método MultiPartForm.SendFile, que es donde ocurre la magia.
¿Has intentado utilizar la input()
en el control de entrada de archivo adecuado?
WebElement fileInput = driver.findElement(By.id("some id"));
fileInput.sendKeys("C:/path/to/file.extension");
He utilizado a continuación tres formas diferentes de cargar un archivo en Selenium WebDriver.
- Primer caso simple de encontrar el elemento y escribir la ruta absoluta del documento en él. Pero debemos asegurarnos de que el campo HTML sea del tipo de entrada.
Ex:<input type="file" name="uploadsubmit">
Aquí está el código simple:
WebElement element = driver.findElement(By.name("uploadsubmit"));
element.sendKeys("D:/file.txt");
driver.findElement(By.name("uploadSubmit"));
String validateText = driver.findElement(By.id("message")).getText();
Assert.assertEquals("File uploaded successfully", validateText);
El segundo caso es cargar utilizando la clase Robot que se utiliza para (generar eventos de entrada del sistema nativo) tomar el control del mouse y el teclado.
La otra opción es usar ''AutoIt'' (herramienta de código abierto).
Puede encontrar los tres ejemplos anteriores: - Carga de archivos con Selenium Webdriver