web-dev-qa-db-fra.com

org.openqa.Selenium.ElementNotVisibleException: L'élément n'est pas visible et ne peut donc pas être interagi.

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");
                }


            }

        }

  }

}
4

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*/
8
Akshay

Pas sûr de ce que votre exigence est. Mais quelques choses à garder à l’esprit.

  1. Le sélénium peut trouver l'élément qui répond aux mêmes critères mais ils sont cachés
  2. Même si l'élément n'est pas caché, il peut ne pas être prêt à accepter toute interaction. 

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"); 
7
Saifur

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. 

0
VinsW

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();
0

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'

0
Rishi Khanna