it-roy-ru.com

Selenium Webdriver: исключение видимого элемента

Вот мой код для нажатия простой кнопки входа в систему на этом веб-сайте

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

    }
}

Я получаю следующую ошибку: 

Исключение в потоке "main" org.openqa.Selenium.ElementNotVisibleException: Элемент в данный момент не виден и поэтому не может взаимодействовать с Продолжительность команды или время ожидания: 2,05 секунды

5
Nik_stack

У вас есть две кнопки с указанным xpath на этой странице, первая не видна, поэтому вы получаете ElementNotVisibleException

Один находится под <div class="loginPopup">

Второй (тот, который вам нужен) находится под <div class="page">

Поэтому измените ваш xpath так, чтобы он выглядел следующим образом:

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

На странице есть даже 3 элемента с id="_loginButton", и виден только один - тот, что находится внутри формы входа, вы можете получить его с помощью CSS селектора :

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

Есть 3 вхождения id="_loginButton".

Использовал id="_loginButton" в class="signIn" от cssSelector, чтобы получить точную кнопку на странице.

By.cssSelector("div.signIn div#_loginButton")
2
Abinaya Veluswamy
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 может выдать исключение ElementNotVisible в случае, если есть несколько элементов с одним и тем же локатором, и если Webdriver уже работал с одним из элементов, соответствующих локатору.

В таких сценариях вы можете сначала получить размер элемента, используя

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

а затем возьмите первый элемент из списка и нажмите на элемент.

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