web-dev-qa-db-fra.com

Selenium Webdriver - cliquez sur les éléments cachés

J'essaie d'automatiser la fonctionnalité de téléchargement de fichiers dans Google Drive.

L'élément utilisé pour passer les paramètres est masqué avec une hauteur de - 0px.

Aucune des actions de l'utilisateur ne rendrait cet élément visible. J'ai donc besoin d'un travail pour cliquer sur l'élément alors qu'il n'est pas visible.

<input type="file" style="height: 0px; visibility: hidden; position: absolute; width: 340px; font-size: inherit;" multiple=""/>

Le xpath pour l'élément ci-dessus est -

//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input

J'utilise

WebDriver.findElement(By.xpath(<xpath>).sendKeys(<uploadFile>)

Exception -

org.openqa.Selenium.ElementNotVisibleException
  • L'élément n'est pas actuellement visible et ne peut donc pas interagir avec.

J'ai essayé d'utiliser JavascriptExecutor. Mais impossible de trouver la syntaxe exacte.

20
praneel

Essaye ça:

WebElement elem = yourWebDriverInstance.findElement(By.xpath("//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input"));
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";

((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem);

Le groupe ci-dessus changerait la visibilité de votre contrôle d'entrée de fichier. Vous pouvez ensuite procéder aux étapes habituelles de téléchargement de fichiers comme:

elem.sendKeys("<LOCAL FILE PATH>"); 

Soyez conscient, en modifiant la visibilité d'un champ de saisie, vous vous mêlez de l'application en cours de test. L'injection de scripts pour modifier le comportement est intrusive et déconseillée dans les tests.

21
Ashwin Prabhu

Solution simple:

WebElement tmpElement = driver.finElement(ElementLocator);
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", tmpElement);
11
Karthikeyan

Essayez cet exemple de code:

JavascriptExecutor executor= (JavascriptExecutor)driver;
executor.executeScript("document.getElementById('ID').style.display='block';");
Select select = new Select(driver.findElement(By.id("ID")));
select.selectByVisibleText("value");
Thread.sleep(6000);

En utilisant Java exécuteur de script et rendre l'élément visible, puis cliquez sur l'élément via ID. J'espère qu'il vous aidera.).

2
Amirdha

Vous pouvez essayer ce qui suit:

((JavascriptExecutor)driver).executeScript("$('.goog-menu.uploadmenu > input').click();");
1
Amith

Essaye ça:

WebElement elem = yourWebDriverInstance.findElement(
   By.cssSelector(".uploadmenu > input"));
String js = 
  "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";
((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem);

Ici, j'ai remplacé XPath par CSS Selector. Faites-moi savoir si le script ci-dessus fonctionne ou non.

1
user3487861