it-swarm.com.de

Selenium Webdriver: Ausnahme für Element nicht sichtbar

Hier ist mein Code zum Anklicken eines einfachen Login-Buttons auf dieser 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();

    }
}

Ich erhalte folgenden Fehler: 

Ausnahme im Thread "main" org.openqa.Selenium.ElementNotVisibleException: Element ist zurzeit nicht sichtbar und kann daher nicht mit .__ interagiert werden. Befehlsdauer oder Timeout: 2,05 Sekunden

5
Nik_stack

Sie haben zwei Schaltflächen mit dem angegebenen xpath auf dieser Seite. Zuerst ist sie nicht sichtbar. Aus diesem Grund erhalten Sie ElementNotVisibleException

Einer ist unter <div class="loginPopup">

Die zweite (die, die Sie brauchen) ist unter <div class="page">

Ändern Sie also Ihren xpath so, dass er Ihr Problem löst:

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

Es gibt sogar 3 Elemente mit id="_loginButton" auf der Seite, und nur eines ist sichtbar - das im Anmeldeformular befindliche Element kann durch einen CSS-Selektor abgerufen werden :

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

Es gibt 3 Vorkommen von id="_loginButton".

Verwendet den id="_loginButton" unter class="signIn" von cssSelector, um die genaue Schaltfläche auf der Seite zu erhalten.

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 kann eine ElementNotVisible-Ausnahme auslösen, falls mehrere Elemente mit demselben Locator vorhanden sind und wenn Webdriver bereits eines der Elemente bearbeitet hat, die mit dem Locator übereinstimmen.

In solchen Szenarien können Sie zuerst die Größe des Elements mithilfe von ermitteln

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

und dann das erste Element aus der Liste und klicken Sie auf das Element.

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