J'essaie d'exécuter le script de pilote Web Selenium ci-dessous, mais l'erreur org.openqa.Selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
s'affiche plusieurs fois (mais pas toutes les fois). parfois en boucle première itération et parfois en 2 itération et parfois sans boucle de départ. Si tous les articles disponibles sont imprimés correctement, le lactosérum essaye de cliquer sur les articles et affiche Element is not currently visible...
public void pickitems() throws Exception
{
Webdriver driver = new firefoxdriver();
driver.get("http://www.bigbasket.com");
driver.manage().window().maximize();
//Selecting Location
List<WebElement> list = driver.findElement(By.id("ftv-city-popup")).findElements(By.tagName("button"));
int location = r.nextInt(list.size());
list.get(location).click();
//Selection random Category from left panel through list
Thread.sleep(30000);
List<WebElement> xyz = driver.findElement(By.id("uiv2-main-menu")).findElements(By.className("top-category"));
System.out.println(xyz.size());
Random r = new Random();
int category = r.nextInt(xyz.size());
xyz.get(category).click();
for (int i = 0; i < 3; i++) {
Thread.sleep(30000);
List<WebElement> availableItems = driver.findElements(By.cssSelector("a.uiv2-add-button.a2c"));
System.out.println(availableItems.size());
if (availableItems.size() > 0)
{
int selectItem = r.nextInt(availableItems.size());
availableItems.get(selectItem).click();
}
else
{
Thread.sleep(30000);
List<WebElement> availableItems2 = driver.findElements(By.cssSelector("a.uiv2-add-button.a2c"));
if (availableItems2.size() == 0) {
System.out.println("No more items are available. Sorry for the inconvenience");
}
else {
Assert.fail("Unable to select items. May be page loading issue");
}
}
}
}
}
Enfin, cela a fonctionné pour moi. L'élément n'est pas visible et ne peut donc pas être interagi.
Au début, c'était comme si le test n'avait réussi que deux fois sur cinq. Je ne savais pas trop comment ça fonctionnait parfois et d’autres non.
Travaillé en réduisant les paramètres de sécurité dans IE. Activer tous les contrôles activeX. Activer les scripts et les IFRAMES également. Certains d'entre eux vous avertiront de mettre l'ordinateur en danger, mais c'était la seule solution que j'avais. Introduisez une attente explicite en utilisant presenceOfElementLocated à la place de visibilitéOfElementLocated à chaque étape du chargement de la page.
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='campaignListTable']"))); /*examining the xpath for a search
box*/
driver.findElement(By.xpath("//*[@id='campaignListTable']")).sendKeys("TEXT"); /*enter text in search
box*/
Pas sûr de ce que votre exigence est. Mais quelques choses à garder à l’esprit.
si vous savez avec certitude que l'élément n'est pas masqué, vous pouvez utiliser l'attente suivante pour que l'élément soit visible
new WebDriverWait(Driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible("your selector");
Pour le gérer, vous pouvez utiliser une fonction d'attente explicite dans Selenium pour localiser l'élément. La plupart du temps ça marche.
Pour certains navigateurs, il se peut qu'une fois le survol effectué par la souris, la liste des menus disparaisse rapidement avant que Selenium n'identifie le prochain élément de sous-menu. Dans ce cas, il est préférable d'utiliser l'action perform()
dans le menu principal pour conserver la liste des menus jusqu'à ce que Selenium identifie l'élément de sous-menu et clique dessus.
Ici
WebElement xWL = driver.findElement(By.xpath("x path text"));
Actions xAct = new Actions(driver);
Au lieu de cela:
xAct.moveToElement(xWL).build().perform();
Le code ci-dessous résoudra le problème "élément non visible"
xAct.moveToElement(xWL);
xAct.click();
xAct.perform();
J'imagine que vous essayez de cliquer sur les hyperliens. Si vous obtenez une exception «ElementNotVisibleException», cela signifie que des éléments peuvent être masqués. Est-ce que cela prend du temps pour que les éléments avec le localisateur 'a.uiv2-add-button.a2c' soient rendus sur l'interface utilisateur après avoir sélectionné une catégorie dans le panneau de gauche? Si oui, une interaction avec des éléments non visibles lancera toujours 'ElementNotVisibleException'