Comment gérer les fenêtres de téléchargement de fichiers utilisant Selenium WebDriver?
J'ai vu beaucoup de questions et solutions sur le téléchargement de Fichiers à l'aide de Selenium WebDriver sur un Débordement de Pile. Mais aucun d'entre eux travaillent pour le scénario suivant.
Quelqu'un a une solution comme suit
//assuming driver is a healthy WebDriver instance
WebElement fileInput = driver.findElement(By.name("uploadfile"));
fileInput.sendKeys("C:/path/to/file.jpg");
Mais je ne peux pas trouver la poignée de la fenêtre. Comment puis-je travailler sur qui?
Je suis à la recherche d'une solution pour le scénario ci-dessus.
Veuillez vérifier sur un des sites web suivants.
http://www.uploadify.com/demos/
http://www.zamzar.com/
- Vous n'avez donc essayer ce que vous avez écrit? Si vous n'avez qu'avez-vous écrit, et ce qui était l'erreur?
- C'est l'hypothèse de gérer la winwods' popup
- Je suis juste demander, avez-vous donné que l'approche d'un coup?
- Avez-vous trouver l'identifiant de l'élément et envoyer les touches ("chemin/vers/fichier") pour que webelement?
- Ce n'est qu'un exemple. Mais dans ce cas, nous ne pouvons pas appliquer cette fonction pour envoyer des touches de webelement parce que son windows' objet
- Nous pouvons envoyer des touches, comme nous l'envoyer à l'webelement "uploadfile". Remarque il n'est pas
click
action effectuée pour le pop-up seront affichés. Vous avez connu si u de ne pas avoir essayé. 🙂
Vous devez vous connecter pour publier un commentaire.
Hey, c'est le mien à partir de quelque part :).
Dans le cas de la Zamzar web, il devrait fonctionner parfaitement. Vous ne cliquez pas l'élément. Vous tapez simplement le chemin en elle. Pour être concret, ce doit être tout à fait ok:
Dans le cas de la Uploadify web, vous êtes dans le pétrin, depuis le téléchargement n'est pas
input
, mais un objet Flash. Il n'y a pas d'API pour WebDriver qui devrait vous permettre de travailler avec des boîtes de dialogue du navigateur (ou des objets Flash).Donc après que vous cliquez sur l'élément Flash, il y a une fenêtre surgissant que vous n'aurez aucun contrôle sur. Dans les navigateurs et systèmes d'exploitation, je sais, vous pouvez très bien supposer qu'après que la fenêtre a été ouverte, le curseur est dans la
File name
d'entrée. S'il vous plaît, assurez-vous que cette hypothèse est vraie dans votre cas, trop.Si non, vous pouvez essayer de sauter en appuyant sur Alt + N, au moins sur Windows...
Si oui, vous pouvez "à l'aveuglette", tapez le chemin d'accès en utilisant le
Robot
classe. Dans votre cas, ce serait quelque chose dans le sens de:C'est nul, mais il devrait fonctionner. Notez que vous pouvez avoir besoin de ces: Comment puis-je faire Robot de type a":"? et Convertit une Chaîne de KeyEvents (plus il y a le nouveau et brillant
KeyEvent#getExtendedKeyCodeForChar()
qui fait un travail similaire, mais il est disponible uniquement à partir de JDK7).Pour Flash, la seule alternative que je sais (à partir de cette discussion) est d'utiliser le noir technique:
Robot
solution est évidemment dépendant de la disposition du clavier, mais je pense que l'on pourrait éviter en quelque sorte.<input type='file' />
élément là.). Uploadify avec Flash activé (lorsqu'il est désactivé, il y a juste un<input type='file' />
, trop) travaille dans IE8 et FF13 sur Win XP, trop, tout le côlon et les barres obliques devait être fait un peu différemment. Encore, j'ai réussi à télécharger un fichier à la fois de ces à la des solutions.Code ci-dessous fonctionne pour moi :
À l'aide de C# et le Sélénium ce code fonctionne pour moi, NOTE vous souhaitez utiliser un paramètre de remplacer "localhost" dans la FindWindow appel à votre serveur en particulier si elle n'est pas localhost et de suivi qui est le plus récent boîte de dialogue ouvrir s'il existe plus qu'un dialogue traîner, mais cela devrait vous aider à démarrer:
Système D'Importation.De Windows.Les formes binaires de la solution d'essai et appelez la suite de deux LOC en cliquant sur le bouton Télécharger sur l'INTERFACE utilisateur.
Code ci-dessous fonctionne pour moi:
Il y a un moyen plus simple de résoudre ce à quoi Slanec décrit. Hes solution fonctionne lorsque vous utilisez un clavier anglais, sinon vous aurez un moment difficile essayer de "cartographier" les clés pour les caractères spéciaux.
Au lieu de
robot.keyPress
etrobot.keyRelease
chaque touche unique, vous pouvez utiliserTrousse à outils
à la copie de la Chaîne dans le presse-papiers, puis les coller.J'ai fait usage de sendkeys dans les scripts shell à l'aide d'un vbsscript fichier. Ci-dessous est le code dans le fichier vbs,
Ci-dessous est le sélénium ligne de code à exécuter ce fichier vbs,
Trouver l'élément (doit être un élément input type="file" attribut) et envoyer le chemin d'accès au fichier.
REMARQUE: Si vous utilisez un RemoteWebDriver, vous devrez également mettre un fichier détecteur. La valeur par défaut est
UselessFileDetector
file
attribut est la clé.Une solution de rechange serait d'écrire un script pour automatiser le dialogue d'ouverture de Fichier. Voir AutoIt.
Aussi, si vous ne pouvez pas vous "cliquez" sur l'élément, ma solution est généralement pour ce faire:
Espérons que cette aide (Même si c'est un vieux post)
Vous avez mis le double slash \\ pour l'ensemble du chemin d'accès absolu à atteindre cet
Exemple:- D:\\images\\Lighthouse.jpg
Étapes
- utiliser sendkeys pour le bouton d'avoir l'option d'exploration(Le bouton qui permet de l'ouvrir
votre boîte de fenêtre pour sélectionner les fichiers)
- Maintenant, cliquez sur le bouton qui va télécharger des fichiers que vous
D'abord ajouter le fichier à votre projet de répertoire des ressources
puis
Walla, vous verrez votre choisi le fichier sélectionné, et avoir sauté de la fenêtre explorateur de fichiers
Utiliser AutoIt Script Pour Gérer Upload De Fichier En Selenium Webdriver. Il fonctionne très bien pour le scénario ci-dessus.
Veuillez utiliser le lien ci-dessous pour obtenir de l'aide:
http://www.guru99.com/use-autoit-selenium.html
a bien fonctionné pour moi. Prenant une autre approche indiquée dans la réponse ci-dessus par Matt en C# .net pouvez également travailler avec un nom de Classe #32770 pour boîte de téléchargement.
Ci-dessous on avait travaillé pour moi
Double les barres obliques inverses dans le chemin, comme ceci: