0

Je voudrais savoir s'il existe un moyen pour les tests automatisés de télécharger le fichier (Excel et PDF dans mon cas)) et enregistrer dans un emplacement désiré en utilisant le pilote Web Selenium. J'ai essayé d'utiliser le profil Firefox, mais cela n'a pas fonctionné. Lorsque le test est en cours d'exécution, une fenêtre contextuelle vous demande si vous souhaitez ouvrir ou enregistrer le fichier. Ainsi, lorsque nous cliquons sur un bouton, je ne veux pas que les fenêtres pop-up s'affichent, mais autorisent automatiquement le téléchargement à l'emplacement souhaité (localement et sur Selenium Server) Nous utilisons C# pour écrire les tests. Ci-joint est la fenêtre pop-up. Quelqu'un pourrait-il m'aider s'il vous plaît?Comment télécharger et enregistrer des fichiers Excel et PDF à partir d'une fenêtre contextuelle à l'aide du sélénium écrit en C#

enter image description here

public static IWebDriver Build(SeleniumInstanceContext context) 
    { 
     IWebDriver instance;    
     var capabilities = new DesiredCapabilities(); 
     var profile = CreateFirefoxProfile(); 

     //Pass the Firefox profile to be used by RemoteWebDriver 
     capabilities.SetCapability(FirefoxDriver.ProfileCapabilityName, profile.ToBase64String()); 

     switch (context.TestingBrowser.ToUpperInvariant()) 
     { 
      case "CHROME": 
       instance = context.SeleniumEnvironment.ToUpper() == "REMOTEWEBDRIVER" 
        ? new RemoteWebDriver(new Uri(context.SeleniumServerUrl), DesiredCapabilities.Chrome()) 
        : new ChromeDriver(); 
       break; 
      case "IE": 
       instance = context.SeleniumEnvironment.ToUpper() == "REMOTEWEBDRIVER" 
        ? new RemoteWebDriver(new Uri(context.SeleniumServerUrl), 
         DesiredCapabilities.InternetExplorer()) 
        : new InternetExplorerDriver(); 
       break; 
      default: 
       instance = context.SeleniumEnvironment.ToUpper() == "REMOTEWEBDRIVER" 
        ? new RemoteWebDriver(new Uri(context.SeleniumServerUrl), capabilities, 
         TimeSpan.FromMinutes(5)) 
        : new FirefoxDriver(profile); 
       break; 
     } 

     return instance; 
    } 

[![enter image description here][1]][1]public static FirefoxProfile CreateFirefoxProfile() 
    { 
     //Create FireFox Profile object 
     var profile = new FirefoxProfile(); 

     //Set Location to store files after downloading. 
     const string path = "C:\\Users\\abc.xyz\\Downloads"; 
     profile.SetPreference("browser.download.dir", path); 
     profile.SetPreference("browser.download.folderList", 2); 

     //Set Preference to not show file download confirmation dialogue using MIME types Of different file extension types. 
     profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv,application/x-msexcel,application/excel,application/x-excel,application/excel,application/x-excel,application/excel,application/vnd.ms-excel,application/x-excel,application/x-msexcel,application/csv"); 
     //profile.SetPreference("browser.helperApps.neverAsk.openFile", "application/octet-stream"); 

     //profile.SetPreference("browser.download.manager.showWhenStarting", false); 
     profile.SetPreference("pdfjs.disabled", true); 

     profile.SetPreference("browser.download.alertOnEXEOpen", false); 
     profile.SetPreference("browser.download.manager.focusWhenStarting", false); 
     profile.SetPreference("browser.helperApps.alwaysAsk.force", true); 
     profile.SetPreference("browser.download.manager.alertOnEXEOpen", false); 
     profile.SetPreference("browser.download.manager.closeWhenDone", false); 
     profile.SetPreference("browser.download.manager.showAlertOnComplete", false); 
     profile.SetPreference("browser.download.manager.useWindow", false); 

     return profile; 
    } 
+0

Avez-vous essayé de vérifier « Pour ce faire, automatiquement ... » et l'enregistrer en tant que profil Firefox ? Assurez-vous également de ne pas modifier le profil temporaire créé lors de la session de test Selenium! – Kirhgoph

+0

Comment puis-je gérer "Faites-le automatiquement ..", car c'est un test automatisé et c'est une fenêtre pop-up pas le navigateur? – ranp

Répondre

0
  1. Chargez le profil Firefox que vous utilisez pour le test, essayez de télécharger un fichier .xls - vous verrez ce pop-up.
  2. Cochez la case et téléchargez le fichier comme si vous vouliez le télécharger dans vos autotests.

La prochaine fois que vous ouvrez Firefox avec ce profil autotests ces fichiers xls seront téléchargés sans fenêtre pop-up

0

Il semble que vous avez oublié d'inclure certains types MIME dans la préférence browser.helperApps.neverAsk.saveToDisk.

Voici les types MIME pour .xls, .xlsx et .pdf extensions de fichier:

  • .xls - application/excel
  • .xls-application/vnd.ms-excel
  • .xls-application/x-excel
  • .xls-application/x-msexcel
  • .xlsx-application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • .pdf - application/pdf

Références:


Pour masquer ce pop-up pour .xls, .xlsx et .pdf extensions de fichier, ajoutez les types MIME, séparés par une virgule:

string[] mimeTypes = new string[] 
{ 
    // .xls 
    "application/excel", 
    "application/vnd.ms-excel", 
    "application/x-excel", 
    "application/x-msexcel", 

    // .xlsx 
    "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 

    // .pdf 
    "application/pdf" 
}; 

FirefoxProfile profile = new FirefoxProfile(); 
profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", 
    string.Join(",", mimeTypes)); 
+0

Merci. L'ajout de ce type de mime a travaillé dans mon local.Toutefois, si j'exécute le même test dans le pilote Web distant à l'aide du noeud concentrateur selnium, il ne télécharge pas le fichier. J'ai créé la structure des dossiers dans ma machine distante afin de télécharger le fichier. Donc, une idée pour le faire fonctionner à distance? – ranp

+0

Hmm ... malheureusement je ne suis pas sûr. J'imagine que cela fonctionnerait de la même manière, avez-vous confirmé que la structure du dossier correspond exactement à votre machine locale? –

+0

oui je l'ai vérifié dans la sortie console qui renvoie la même structure de dossier. – ranp