java selenium selenium-webdriver webdriver webdriverwait

java - ¿Cómo resolver ElementNotInteractableException: Element no es visible en Selenium webdriver?



selenium-webdriver webdriverwait (4)

ElementNotInteractableException

ElementNotInteractableException es la excepción W3C que se genera para indicar que aunque un elemento está presente en el DOM HTML , no está en un estado con el que se pueda interactuar.

Razones y soluciones:

La razón para que ElementNotInteractableException ocurra puede ser numerosa.

  1. Superposición temporal de otro elemento WebElement sobre el elemento WebElement de nuestro interés :

    En este caso, la solución directa habría sido inducir ExplicitWait es decir, WebDriverWait en combinación con ExpectedCondition como invisibilityOfElementLocated como sigue:

    WebDriverWait wait2 = new WebDriverWait(driver, 10); wait2.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("xpath_of_element_to_be_invisible"))); driver.findElement(By.xpath("xpath_element_to_be_clicked")).click();

    Una mejor solución será obtener un poco más granular y, en lugar de usar ExpectedCondition como invisibilityOfElementLocated , podemos usar ExpectedCondition como elementToBeClickable siguiente manera:

    WebDriverWait wait1 = new WebDriverWait(driver, 10); WebElement element1 = wait1.until(ExpectedConditions.elementToBeClickable(By.xpath("xpath_of_element_to_be_clicked"))); element1.click();

  2. Superposición permanente de otro elemento WebElement sobre el elemento WebElement de nuestro interés :

    Si la superposición es permanente en este caso, tenemos que convertir la instancia de WebDriver como JavascriptExecutor y realizar la operación de clic de la siguiente manera:

    WebElement ele = driver.findElement(By.xpath("element_xpath")); JavascriptExecutor executor = (JavascriptExecutor)driver; executor.executeScript("arguments[0].click();", ele);

Aquí tengo la imagen de mi código y la imagen de mi error. ¿Alguien puede ayudarme a resolver este problema?


En realidad, la excepción es Element Not Visible

La mejor práctica es Implicit wait al usuario por debajo de la instanciación del controlador para que tenga suficiente tiempo como elemento antes de la excepción

driver.get("http://www.testsite.com"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

Aún enfrenta problemas ya que algunos elementos requieren más tiempo para usar ExplicitWait para que cada elemento satisfaga cierta condición

En su caso, se enfrenta a not visible exception elemento not visible exception luego use la condición de espera de la siguiente manera

WebDriverWait wait = new WebDriverWait(driver, 120); wait.until(ExpectedConditions.visibilityOfElementLocated(By.your_Elemetnt));


Obtuve esto porque el elemento con el que quería interactuar estaba cubierto por otro elemento. En mi caso, era una superposición opaca para hacer que todo funcionara bien.

Cuando intentamos hacer clic en un elemento BAJO otro elemento, normalmente obtenemos "... otro Elemento recibiría el clic" pero no siempre:. (


Una solución a esto para Javascript se ve así. Deberá modificar el tiempo para adaptarlo a sus necesidades.

driver.manage().setTimeouts({ implicit: 30000 });

Espero que esto sea útil para alguien. ver los docs para referencia