Question

J'usinng sélénium 2 beta . Je suis en train de cliquer sur le bouton qui ouvre le dialogue de fichier joint. mais quand je clique dessus rien ne se passe.

<input class="zf" name="Passport" id="PassportUpload" type="file" onclick="return { oRequired : {} }" maxlength="524288"> 


driver.findElement(By.name("Passport")).click();

en utilisant seulement le sélénium pas sélénium 2 i peut cliquer facilement.

Était-ce utile?

La solution

Je suppose que le problème est que lorsque vous utilisez Internet Explorer depuis IE et FF gère l'entrée de fichier légèrement différent: en FF, vous pouvez cliquer sur le bouton ou le champ pour appeler la boîte de dialogue Ouvrir, alors que dans Internet Explorer, vous pouvez cliquer sur le bouton ou double-cliquez sur sur le terrain.

WebDriver en utilisant des événements natifs il envoie un clic de souris natif pour le contrôle d'entrée du fichier qui est traduit en un clic sur le champ de saisie.

Il travaillait en Sélénium 1 parce qu'il utilise le JavaScript pour tirer les événements. Pour le faire fonctionner en WebDriver vous devez invoquer le JavaScript:

WebElement upload = driver.findElement(By.name("Passport"));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", upload);

Cependant le code abouve ne sera pas dans Firefox, vous pouvez donc utiliser quelque chose comme:

WebElement upload = driver.findElement(By.name("Passport"));
if (driver instanceof InternetExplorerDriver) {
    ((JavascriptExecutor)driver).executeScript("arguments[0].click();", upload);
} else {
    upload.click();
}

Autres conseils

peut-être essayer le code suivant:

WebElement upload = driver.findElement(By.name("Passport"));
if (driver instanceof InternetExplorerDriver) {
    ((JavascriptExecutor)driver).executeScript("arguments[0].click();", upload);
} else if (driver instanceof FirefoxDriver) {
 ((JavascriptExecutor)driver).executeScript("arguments[0].click;", upload);
}else {
    upload.click();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top