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 waitcomo, WebDriverWait wait = new WebDriverWait(driver, 10);pero está llamando al click()método en el elemento antes de que ExplicitWaitentre 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 ActionsClass:
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 JavascriptExecutorpara 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 ExpectedConditionsestablecido en elementToBeClickablepara 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 ExplicitWaitcon ExpectedConditionsestablecido 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 JavascriptExecutorpara 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);