WebDriverException: no se puede hacer clic en el elemento en el punto (x, y)
Esta es una típica excepción org.openqa.selenium.WebDriverException que extiende java.lang.RuntimeException .
Los campos de esta excepción son:
- BASE_SUPPORT_URL :
protected static final java.lang.String BASE_SUPPORT_URL
- DRIVER_INFO :
public static final java.lang.String DRIVER_INFO
- SESSION_ID :
public static final java.lang.String SESSION_ID
Acerca de su caso de uso individual, el error lo dice todo:
WebDriverException: Element is not clickable at point (x, y). Other element would receive the click
Está claro a partir de su bloque de código que ha definido wait
como, WebDriverWait wait = new WebDriverWait(driver, 10);
pero está llamando al click()
método en el elemento antes de que ExplicitWait
entre en juego como en until(ExpectedConditions.elementToBeClickable)
.
Solución
El error Element is not clickable at point (x, y)
puede deberse a diferentes factores. Puede abordarlos mediante cualquiera de los siguientes procedimientos:
1. No se hace clic en el elemento debido a la presencia de llamadas JavaScript o AJAX
Intenta usar Actions
Class:
WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
2. No se hace clic en el elemento porque no está dentro de la ventana gráfica
Intente usar JavascriptExecutor
para traer el elemento dentro de la ventana gráfica:
WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement);
3. La página se actualiza antes de que se pueda hacer clic en el elemento.
En este caso, induzca ExplicitWait, es decir, WebDriverWait como se menciona en el punto 4.
4. El elemento está presente en el DOM pero no se puede hacer clic.
En este caso, induzca ExplicitWait con ExpectedConditions
establecido en elementToBeClickable
para que se pueda hacer clic en el elemento:
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));
5. El elemento está presente pero tiene una superposición temporal.
En este caso, inducir ExplicitWait
con ExpectedConditions
establecido eninvisibilityOfElementLocated
para que la superposición sea invisible.
WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));
6. El elemento está presente pero tiene una superposición permanente.
Utilice JavascriptExecutor
para enviar el clic directamente sobre el elemento.
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);