J'ai vu beaucoup de questions et de solutions sur le téléchargement de fichiers à l'aide de Selenium WebDriver sur Stackoverflow. Mais aucun des travaux pour le scénario suivant.
Quelqu'un a donné la 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 trouve toujours pas de poignée de fenêtre, comment puis-je y travailler?
Je cherche une solution pour le scénario ci-dessus
Veuillez vérifier ceci pour l’un des sites Web suivants
http://www.uploadify.com/demos/
http://www.zamzar.com/
Le code ci-dessous fonctionne pour moi:
public void test() {
WebDriver driver = new FirefoxDriver();
driver.get("http://www.freepdfconvert.com/pdf-Word");
driver.findElement(By.id("clientUpload")).click();
driver.switchTo()
.activeElement()
.sendKeys(
"/home/likewise-open/GLOBAL/123/Documents/filename.txt");
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.findElement(By.id("convertButton"));
En utilisant C # et Selenium ce code ici fonctionne pour moi,NOTEvous voudrez utiliser un paramètre pour permuter "localhost" dans l'appel FindWindow pour votre serveur particulier s'il ne s'agit pas de localhost et de suivi qui est la dernière boîte de dialogue ouverte s'il y a plus d'une boîte de dialogue, mais ceci devrait vous aider à démarrer:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
public static void UploadFile(this IWebDriver webDriver, string fileName)
{
webDriver.FindElement(By.Id("SWFUpload_0")).Click();
var dialogHWnd = FindWindow(null, "Select file(s) to upload by localhost");
var setFocus = SetForegroundWindow(dialogHWnd);
if (setFocus)
{
Thread.Sleep(500);
SendKeys.SendWait(fileName);
SendKeys.SendWait("{ENTER}");
}
}
Importez le fichier binaire System.Windows.Forms dans la solution test et appelez les deux LOC suivants en cliquant sur le bouton Télécharger de l'interface utilisateur.
// Send the file path and enter file path and wait.
System.Windows.Forms.SendKeys.SendWait("complete path of the file");
System.Windows.Forms.SendKeys.SendWait("{ENTER}");
Il existe un moyen plus simple de résoudre ce problème que Slanec a décrit. Cette solution fonctionne lorsque vous utilisez un clavier anglais, sinon vous aurez du mal à essayer de "mapper" la touche pour les caractères spéciaux.
Au lieu de robot.keyPress
et robot.keyRelease
chaque clé, vous pouvez utiliser Toolkit
pour copier la chaîne dans le presse-papiers, puis la coller.
StringSelection s = new StringSelection("Path to the file");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(s, null);
Robot robot = new Robot();
robot.keyPress(Java.awt.event.KeyEvent.VK_ENTER);
robot.keyRelease(Java.awt.event.KeyEvent.VK_ENTER);
robot.keyPress(Java.awt.event.KeyEvent.VK_CONTROL);
robot.keyPress(Java.awt.event.KeyEvent.VK_V);
robot.keyRelease(Java.awt.event.KeyEvent.VK_CONTROL);
Thread.sleep(3000);
robot.keyPress(Java.awt.event.KeyEvent.VK_ENTER);
J'ai utilisé sendkeys dans les scripts Shell à l'aide d'un fichier vbsscript. Ci-dessous le code dans le fichier vbs,
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "C:\Demo.txt"
WshShell.SendKeys "{ENTER}"
Ci-dessous, la ligne de code Selenium pour exécuter ce fichier vbs,
driver.findElement(By.id("uploadname1")).click();
Thread.sleep(1000);
Runtime.getRuntime().exec( "wscript C:/script.vbs" );
Le code ci-dessous fonctionne pour moi:
// wait for the window to appear
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.alertIsPresent());
// switch to the file upload window
Alert alert = driver.switchTo().alert();
// enter the filename
alert.sendKeys(fileName);
// hit enter
Robot r = new Robot();
r.keyPress(KeyEvent.VK_ENTER);
r.keyRelease(KeyEvent.VK_ENTER);
// switch back
driver.switchTo().activeElement();
Vous avez mis une double barre oblique \\ pour le chemin absolu complet pour atteindre cet objectif Exemple: - D: \\ images \\ Lighthouse.jpg
Pas - Utilisez sendkeys pour le bouton avec option de navigation (Le bouton qui ouvrira votre fenêtre pour sélectionner les fichiers) - Cliquez maintenant sur le bouton qui va télécharger votre fichier
driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:\\images\\Lighthouse.jpg");
Thread.sleep(5000);
driver.findElement(By.xpath("//button[@id='Upload']")).click();
Recherchez l'élément (il doit s'agir d'un élément d'entrée avec l'attribut type = "fichier") et envoyez le chemin d'accès au fichier.
WebElement fileInput = driver.findElement(By.id("uploadFile"));
fileInput.sendKeys("/path/to/file.jpg");
REMARQUE: Si vous utilisez un RemoteWebDriver, vous devez également définir un détecteur de fichier. La valeur par défaut est UselessFileDetector
WebElement fileInput = driver.findElement(By.id("uploadFile"));
driver.setFileDetector(new LocalFileDetector());
fileInput.sendKeys("/path/to/file.jpg");
Utilisez le script AutoIt pour gérer le téléchargement de fichiers dans Selenium Webdriver. Cela fonctionne bien pour le scénario ci-dessus.
Runtime.getRuntime().exec("E:\\AutoIT\\FileUpload.exe");
Veuillez utiliser le lien ci-dessous pour obtenir de l'aide: http://www.guru99.com/use-autoit-Selenium.html
webDriver.FindElement(By.CssSelector("--cssSelector--")).Click();
webDriver.SwitchTo().ActiveElement().SendKeys(fileName);
a bien fonctionné pour moi. Une autre approche fournie par Matt dans la réponse ci-dessus en C # .net pourrait également fonctionner avec le nom de classe n ° 32770 pour la boîte d'envoi.
Commencez par ajouter le fichier dans le répertoire de ressources de votre projet.
puis
public YourPage uploadFileBtnSendKeys() {
final ClassLoader classLoader = getClass().getClassLoader();
final File file = new File(classLoader.getResource("yourFile.whatever").getPath());
uploadFileBtn.sendKeys(file.getPath());
return this;
}
Walla, vous verrez le fichier que vous avez choisi et avez ignoré la fenêtre de l'explorateur de fichiers.
Une autre solution consisterait à écrire un script pour automatiser la boîte de dialogue Ouvrir un fichier. Voir AutoIt .
De plus, si vous ne pouvez pas "cliquer" sur l'élément, ma solution consiste généralement à procéder comme suit:
element.SendKeys(Keys.Enter);
J'espère que cela vous aidera (même s'il s'agit d'un ancien post)