Solución:
No podrá acceder al cuadro de diálogo para guardar. Eso está controlado por el sistema operativo. Lo único que realmente podrá hacer es establecer la ubicación de descarga predeterminada para el navegador y permitir que descargue automáticamente los archivos. Luego verifique el archivo en Java.
Debe verificar esta respuesta de esta pregunta SO anterior. Básicamente, al configurar su perfil de Firefox, agrega una llamada para configurar la propiedad browser.helperApps.neverAsk.saveToDisk
a una lista separada por comas de tipos MIME para descargar siempre:
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");
Consulte este artículo de preguntas frecuentes de Mozilla KB sobre Acerca de: configs.
ACTUALIZAR
Parece que ahora es posible ver esta respuesta en otra pregunta
Es posible que aparezca la ventana emergente de diálogo Cancelar / Guardar porque el sitio le está enviando un tipo de MIME diferente.
Verifique el contenido real del encabezado.
Usando las herramientas de desarrollador integradas en Firefox, haga clic con el botón derecho para inspeccionar el elemento / enlace de descarga de su publicación y luego eche un vistazo al monitor de red para ver el valor del encabezado ContentType devuelto … Ese sería el que desea usar …
Establezca la configuración de su perfil en consecuencia
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
"application/octet-stream,text/csv");
Esperaba “text / csv”, pero obtuve “application / octet-stream” una vez que se agregó a la lista de tipos aceptados, todo funcionó como se esperaba, Sin ventanas emergentes
Una posible solución es obtener la URL del archivo a través de Selenium, crear una conexión (que no sea de Selenium), copiar las cookies de Selenium en la conexión (si es necesario) y descargar el archivo. La mayoría de los lenguajes tienen API (o bibliotecas) para realizar solicitudes HTTP. Por ejemplo, para lograr esto en Java, puede usar URL.openConnection()
:
String link = linkElement.getAttribute("href");
URL url = new URL(link);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
Es posible que deba copiar las cookies que tiene Selenium para imitar al usuario de Selenium (por ejemplo, si está probando un sitio web que requiere un inicio de sesión).
Set<Cookie> cookies = webDriver.manager().getCookies();
String cookieString = "";
for (Cookie cookie : cookies) {
cookieString += cookie.getName() + "=" + cookie.getValue() + ";";
}
httpURLConnection.addRequestProperty("Cookie", cookieString);
Entonces puedes usar HttpURLConnection.getInputStream()
para escribir el contenido del archivo en su ubicación preferida.
try (InputStream in = httpURLConnection.getInputStream()) {
Files.copy(in, new File("/path/to/file.ext").toPath(),
StandardCopyOption.REPLACE_EXISTING);
}
Aunque este método sería diferente para diferentes lenguajes de programación, funciona igual para todos los navegadores.