Lors de la navigation dans la vaste étendue de Stack Overflow, de nombreuses questions ont fait surface concernant le téléchargement de fichiers à l'aide de Selenium WebDriver. Cependant, de nombreuses solutions ne parviennent pas à répondre à un scénario spécifique qui a intrigué d'innombrables utilisateurs.
Considérez la situation suivante :
Je suis tombé sur une réponse suggérant d'utiliser sendKeys pour spécifier le chemin du fichier, comme indiqué ci-dessous :
<code class="java">WebElement fileInput = driver.findElement(By.name("uploadfile")); fileInput.sendKeys("C:/path/to/file.jpg");</code>
Cependant, cette approche n'active pas de handle de fenêtre, ce qui rend toute interaction ultérieure impossible.
Zamzar et Uploadify : approches distinctes
Pour les sites Web comme Zamzar, la solution susmentionnée fonctionne de manière transparente. En tapant simplement le chemin du fichier dans le champ de saisie désigné, le processus de téléchargement se déroule comme prévu.
En revanche, Uploadify présente un défi plus formidable. Le composant de téléchargement de fichiers est un objet Flash, dépourvu d'API compatible WebDriver. Cela signifie que vous n'avez aucun contrôle direct sur la fenêtre suivante qui s'ouvre pour la sélection de fichiers.
Recours à la classe Robot pour la saisie aveugle
Étant donné que le curseur réside généralement dans le Champ de saisie du nom de fichier après avoir cliqué sur l'élément Flash, vous pouvez adopter une stratégie de saisie "aveugle" en utilisant la classe Robot. Cela implique de simuler des frappes au clavier pour saisir le chemin du fichier, comme illustré ci-dessous :
<code class="java">driver.findElement(By.id("SWFUpload_0")).click(); Robot r = new Robot(); r.keyPress(KeyEvent.VK_C); // C r.keyRelease(KeyEvent.VK_C); r.keyPress(KeyEvent.VK_COLON); // : (colon) r.keyRelease(KeyEvent.VK_COLON); r.keyPress(KeyEvent.VK_SLASH); // / (slash) r.keyRelease(KeyEvent.VK_SLASH); // etc. for the whole file path r.keyPress(KeyEvent.VK_ENTER); // confirm by pressing Enter in the end r.keyRelease(KeyEvent.VK_ENTER);</code>
Approche peu orthodoxe pour Flash
En dernier recours, vous pouvez envisager la technique non conventionnelle de modifier le code source de l'application Flash. En exposant les méthodes internes via ExternalInterface et en tirant parti des appels JavaScript de WebDriver, vous pouvez interagir indirectement avec l'application Flash. Cependant, cette approche nécessite une expertise technique et peut ne pas être applicable dans tous les scénarios.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!