2016-06-02 1 views
0

J'utilise Selenium pour l'automatisation de site Web dans Chrome en utilisant vb.net, je veux télécharger les fichiers d'un site Web qui n'ont pas d'URL directe pour les boutons de téléchargement (téléchargements qui déclenche de JavaScript) comment faire cela dans le sélénium dans .net (C# ou vb.net)?Télécharger un fichier sans URL directe en utilisant selenium

Si ce n'est pas possible, je veux être notifié lorsque l'utilisateur a cliqué sur un bouton de téléchargement et contrôler les choses comme, Définir le chemin de téléchargement et télécharger l'événement complet.

Si le réglage du chemin de téléchargement n'est pas possible, au moins je souhaite obtenir le chemin téléchargé après la fin du téléchargement. Comment atteindre mes exigences?

S'il vous plaît aidez-moi.

Répondre

3

Le téléchargement peut être une tâche fastidieuse en fonction du navigateur que vous utilisez. Heureusement, vous utilisez Chrome qui ne devrait pas poser trop de problèmes.

Tout d'abord, vous devrez localiser le bouton qui lance le téléchargement du fichier.

driver.FindElement(<locator here>).click() 

Le téléchargement doit maintenant avoir commencé. Cependant, le téléchargement peut prendre un peu de temps avant qu'il ne soit terminé. Par conséquent, vous devrez interroger le dossier des téléchargements pour les nouveaux fichiers (ou un fichier spécifique si vous connaissez le nom du fichier). Vous pouvez spécifier un dossier de téléchargement lors de la création de votre pilote.

var options = new ChromeOptionsWithPrefs(); 
     options.prefs = new Dictionary<string, object> 
     { 
      { "download.default_directory", "path/to/downloads/folder" } 
     }; 
     RemoteWebDriver driver = new ChromeDriver("path/to/driver", options); 

Maintenant, vous pouvez trouver le dernier fichier dans ce dossier en faisant

var directory = new DirectoryInfo("path/to/downloads/folder"); 
var myFile = directory.GetFiles() 
      .OrderByDescending(f => f.LastWriteTime) 
      .First(); 

Dans une boucle, vous pouvez comparer ce nom de fichier au nom du fichier que vous venez de télécharger. Ajoutez un délai à cette boucle et, s'il n'est pas téléchargé dans le délai prévu, vous pouvez échouer à votre test.

Note: Je ne suis pas au courant de cette langue si une partie du code peut ne pas être entièrement fonctionnel, mais cela vous donne l'idée

+0

Merci je vais essayer de la mettre en œuvre. Savez-vous comment accepter la fenêtre de téléchargement par programme? chromeOptions.AddUserProfilePreference ("disable-popup-blocking", "true"); ne travaille pas pour moi. –

+0

@ITresearcher Cela dépend du navigateur. Sur Firefox, vous pouvez le désactiver. Sur Chrome, vous ne devriez pas avoir un dialogue de rupture, juste la barre en bas. Vous ne pouvez pas gérer cela en utilisant du sélénium, vous devrez donc utiliser quelque chose comme AutoIT. Je n'ai jamais utilisé ça alors je ne peux pas vous aider plus loin avec ça. – RemcoW