Je dois effectuer la tâche suivante à l'aide de Selenium Webdriver indiqué ci-dessous.
Quelqu'un peut-il partager, comment pouvons-nous implémenter cela en utilisant Java?
Vous ne pourrez pas accéder à la boîte de dialogue de sauvegarde. C'est contrôlé par l'OS. La seule chose que vous allez vraiment pouvoir faire est de définir l’emplacement de téléchargement par défaut du navigateur et de lui permettre de télécharger automatiquement les fichiers. Puis vérifiez le fichier en Java.
Vous devriez vérifier cette réponse de cette précédente SO question . En règle générale, lors de la configuration de votre profil Firefox, vous ajoutez un appel pour définir la propriété browser.helperApps.neverAsk.saveToDisk
sur une liste de types MIME séparés par des virgules, afin qu'ils soient toujours téléchargés:
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/csv");
Voir cet article FAQ de Mozilla KB à propos de: configs.
UPDATE Il semble que cela soit maintenant possible voir cette réponse dans une autre question
La boîte de dialogue Annuler/Enregistrer peut s’afficher car le site vous envoie un type MIME différent.
Vérifiez le contenu de l'en-tête.
À l'aide des outils de développement intégrés à Firefox, faites un clic droit pour inspecter le lien élément/téléchargement de votre publication, puis consultez le Moniteur réseau pour voir la valeur d'en-tête ContentType renvoyée. Ce serait celui que vous souhaitez utiliser.
Définissez vos paramètres de profil en conséquence
firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk",
"application/octet-stream,text/csv");
Je m'attendais à "text/csv", mais j'ai obtenu "application/octet-stream" Une fois ajouté à la liste des types acceptés, tout a fonctionné comme prévu, No popups
Une solution potentielle consiste à obtenir l'URL du fichier via Selenium, à créer une connexion (non-Selenium), à copier les cookies de Selenium sur la connexion (si nécessaire) et à télécharger le fichier. La plupart des langages ont des API (ou bibliothèques) pour exécuter des requêtes HTTP. Par exemple, pour accomplir cela en Java, vous pouvez utiliser URL.openConnection()
:
String link = linkElement.getAttribute("href");
URL url = new URL(link);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
Vous devrez peut-être copier les cookies présents sur Selenium pour imiter l'utilisateur Selenium (par exemple, si vous testez un site Web nécessitant une connexion).
Set<Cookie> cookies = webDriver.manager().getCookies();
String cookieString = "";
for (Cookie cookie : cookies) {
cookieString += cookie.getName() + "=" + cookie.getValue() + ";";
}
httpURLConnection.addRequestProperty("Cookie", cookieString);
Ensuite, vous pouvez utiliser HttpURLConnection.getInputStream()
pour écrire le contenu du fichier à l’emplacement de votre choix.
try (InputStream in = httpURLConnection.getInputStream()) {
Files.copy(in, new File("/path/to/file.ext").toPath(),
StandardCopyOption.REPLACE_EXISTING);
}
Bien que cette méthode soit différente pour différents langages de programmation, cela fonctionne de la même manière pour tous les navigateurs.
Je pense que tu cherches quelque chose comme ça
//common to all the cases
FirefoxProfile prof = new FirefoxProfile();
//Case:1 - Use this case to set download this code to your browser's default location
//prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/Zip");
//Case:2 - Download file to Desktop
//prof.setPreference("browser.download.folderList", 0);
//prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/Zip");
//Case:3 - Download to custom folder path. Replace d:\\Selenium with your Download Location
prof.setPreference("browser.download.dir","D:\\Selenium\\");
prof.setPreference("browser.download.folderList", 2);
prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/Zip");
//This will work for all cases mentioned above
WebDriver driver = new FirefoxDriver(prof);
driver.get("http://docs.seleniumhq.org/download/");
driver.findElement(By.xpath("//tr[1]/td[4]/a[text()='Download']")).click();
Si vous utilisez Java et Chromdriver, j'ai développé une bibliothèque qui devrait faciliter vos téléchargements.
Parmi ses fonctionnalités, vous pouvez définir votre répertoire de téléchargement dans une ligne de code et vérifier que votre fichier a été téléchargé avec succès:
@Test
void downloadAttachTest() throws InterruptedException {
adamInternetPage.navigateToPage(driver);
seleniumDownloadKPI.fileDownloadKPI(
adamInternetPage.getFileDownloadLink(), "SpeedTest_16MB.dat");
waitBeforeClosingBrowser();
}
Vous pouvez utiliser le code ci-dessous pour enregistrer le fichier à l'emplacement requis.
package popups;
import Java.util.concurrent.TimeUnit;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;
import org.openqa.Selenium.firefox.FirefoxOptions;
import org.openqa.Selenium.firefox.FirefoxProfile;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class FileDownloadPopup
{
WebDriver driver;
FirefoxProfile prof = new FirefoxProfile();
FirefoxOptions options = new FirefoxOptions();
@BeforeMethod
public void setEnvi()
{
System.setProperty("webdriver.gecko.driver", "E:\\Selenium Dependencies\\BrowserExecutables\\geckodriver_win64_v0.21.0.exe");
prof.setPreference("browser.download.dir","E:\\Downloads");
prof.setPreference("browser.download.folderList", 2);
prof.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
options.setProfile(prof);
driver = new FirefoxDriver(options);
driver.get("http://file-examples.com/index.php/sample-documents-download/sample-xls-download/");
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
}
@Test
public void FDPP()
{
driver.findElement(By.xpath("(//a[text()='Download sample xlsx file'])[1]")).click();
}
@AfterMethod
public void closeEnvi()
{
driver.close();
}
}