WebDriverException: l'élément n'est pas cliquable au point (x, y)
Il s'agit d'une org.openqa.selenium.WebDriverException typique qui étend java.lang.RuntimeException .
Les champs de cette exception sont:
- 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
À propos de votre cas d'utilisation individuel, l'erreur dit tout:
WebDriverException: Element is not clickable at point (x, y). Other element would receive the click
Il est clair d'après votre bloc de code que vous avez défini le wait
as WebDriverWait wait = new WebDriverWait(driver, 10);
mais que vous appelez la click()
méthode sur l'élément avant que le ExplicitWait
n'entre en jeu comme dans until(ExpectedConditions.elementToBeClickable)
.
Solution
L'erreur Element is not clickable at point (x, y)
peut provenir de différents facteurs. Vous pouvez y remédier par l'une des procédures suivantes:
1. L'élément n'est pas cliqué en raison d'appels JavaScript ou AJAX présents
Essayez d'utiliser la Actions
classe:
WebElement element = driver.findElement(By.id("navigationPageButton"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
2. L'élément n'est pas cliqué car il n'est pas dans la fenêtre
Essayez d'utiliser JavascriptExecutor
pour amener l'élément dans la fenêtre:
WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement);
3. La page est actualisée avant que l'élément ne soit cliquable.
Dans ce cas, indiquez ExplicitWait, c'est-à-dire WebDriverWait, comme mentionné au point 4.
4. L'élément est présent dans le DOM mais non cliquable.
Dans ce cas, induisez ExplicitWait avec ExpectedConditions
la valeur de elementToBeClickable
pour que l'élément soit cliquable:
WebDriverWait wait2 = new WebDriverWait(driver, 10);
wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton")));
5. L'élément est présent mais avec une superposition temporaire.
Dans ce cas, indiquez ExplicitWait
avec ExpectedConditions
set to invisibilityOfElementLocated
pour que la superposition soit invisible.
WebDriverWait wait3 = new WebDriverWait(driver, 10);
wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv")));
6. L'élément est présent mais ayant une superposition permanente.
Utilisez JavascriptExecutor
pour envoyer le clic directement sur l'élément.
WebElement ele = driver.findElement(By.xpath("element_xpath"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", ele);