web-dev-qa-db-fra.com

Selenium Webdriver: Exception d'élément non visible

Voici mon code pour cliquer sur un simple bouton de connexion sur ce site Website

import Java.util.concurrent.TimeUnit;

import org.openqa.Selenium.By;    
import org.openqa.Selenium.WebDriver;    
import org.openqa.Selenium.firefox.FirefoxDriver;    

public class Reports {

    public static void main(String[] args) {

        WebDriver driver = new FirefoxDriver();
        driver.get("https://platform.drawbrid.ge");
        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        driver.findElement(By.xpath(".//*[@id='_loginButton']")).click();

    }
}

Je reçois l'erreur suivante: 

Exception dans le fil "principal" org.openqa.Selenium.ElementNotVisibleException: L'élément n'est pas visible et ne peut donc pas être interagi avec. Durée de la commande ou délai d'attente: 2,05 secondes

5
Nik_stack

Vous avez deux boutons avec xpath sur cette page, le premier n’est pas visible, c’est pourquoi vous obtenez une exception ElementNotVisibleException.

L'un est sous <div class="loginPopup">

La seconde (celle dont vous avez besoin) est sous <div class="page">

Alors changez votre xpath pour qu'il ressemble à ceci, et cela résoudra votre problème:

By.xpath("//div[@class='page']//div[@id='_loginButton']")
14
Dmitry

Il y a même 3 éléments avec id="_loginButton" sur la page, et un seul est visible - celui situé dans le formulaire de connexion, vous pouvez l'obtenir avec un sélecteur CSS :

By.cssSelector("form#_loginForm div#_loginButton")
3
alecxe

Il y a 3 occurrences de id="_loginButton".

Utilisez le id="_loginButton" sous class="signIn" par cssSelector pour obtenir le bouton exact dans la page.

By.cssSelector("div.signIn div#_loginButton")
2
public static void Listget (WebDriver driver) throws Exception 

{
    Thread.sleep(5000);
    UtilityMethod.getAppLocaters(driver, "closeicon").click();

    Actions action = new Actions(driver);
    WebElement we = driver.findElement(By.xpath("//li[@class='parent dropdown  aligned-left']"));
    Thread.sleep(5000);
    action.moveToElement(we).build().perform();

    List<WebElement>links = driver.findElements(By.xpath("//span[@class='menu-title']"));
    int total_count = links.size();       
    System.out.println("Total size :=" +total_count);           
     for(int i=0;i<total_count;i++)
        {             
            WebElement  element = links.get(i);
            String text = element.getAttribute("innerHTML");
            System.out.println("linksnameis:="  +text);

            try{
                    File src = new File("D:ReadFile.xlsx");
                    FileInputStream fis = new FileInputStream(src);
                    XSSFWorkbook wb=new XSSFWorkbook(fis);
                    XSSFSheet sh = wb.getSheetAt(0);

                    sh.createRow(i).createCell(1).setCellValue(text);

                    FileOutputStream fos = new FileOutputStream(new File("D:/ReadFile.xlsx"));
                    wb.write(fos);
                    fos.close();
                }
                catch(Exception e)
                {
                    System.out.println(e.getMessage());
                }


        }
    }
}
0
Kishore Paul

Webdriver peut générer une exception ElementNotVisible s'il existe plusieurs éléments avec le même localisateur et si Webdriver a déjà traité l'un des éléments correspondants.

Dans de tels scénarios, vous pouvez d’abord obtenir la taille de l’élément en utilisant

int var_ele_size= driver.findElements(By.xpath("locator")).size();

puis prenez le premier élément de la liste et cliquez sur l'élément.

driver.findElements(By.xpath("locator")).get(var_ele_size-1).click();
0
SelThroughJava