WebDriverException: o elemento não é clicável no ponto (x, y)
Esta é uma org.openqa.selenium.WebDriverException típica que estende java.lang.RuntimeException .
Os campos desta exceção são:
- 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
Sobre o seu caso de uso individual, o erro diz tudo:
WebDriverException: Element is not clickable at point (x, y). Other element would receive the click
Está claro em seu bloco de código que você definiu o wait
como, WebDriverWait wait = new WebDriverWait(driver, 10);
mas está chamando o click()
método no elemento antes de ExplicitWait
entrar em jogo como em until(ExpectedConditions.elementToBeClickable)
.
Solução
O erro Element is not clickable at point (x, y)
pode surgir de diferentes fatores. Você pode resolvê-los por um dos seguintes procedimentos:
1. O elemento não está sendo clicado devido à presença de chamadas JavaScript ou AJAX
Tente usar a Actions
classe:
WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
2. O elemento não está sendo clicado porque não está dentro da janela de visualização
Tente usar JavascriptExecutor
para trazer o elemento dentro da janela de visualização:
WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement);
3. A página está sendo atualizada antes que o elemento seja clicável.
Neste caso, induza ExplicitWait, ou seja, WebDriverWait, conforme mencionado no ponto 4.
4. O elemento está presente no DOM, mas não é clicável.
Nesse caso, induza ExplicitWait com ExpectedConditions
definido como elementToBeClickable
para que o elemento seja clicável:
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));
5. O elemento está presente, mas com sobreposição temporária.
Neste caso, induza ExplicitWait
com ExpectedConditions
definido como invisibilityOfElementLocated
para que a Sobreposição fique invisível.
WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));
6. O elemento está presente, mas com sobreposição permanente.
Use JavascriptExecutor
para enviar o clique diretamente no elemento.
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);