WebDriverException : L'élément n'est pas cliquable au point (x, y)
Il s'agit d'un cas typique org.openqa.selenium.WebDriverException qui prolonge 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
En ce qui concerne 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 ressort clairement de votre bloc de code que vous avez défini la fonction wait
como WebDriverWait wait = new WebDriverWait(driver, 10);
mais vous appelez le click()
sur l'élément avant la méthode ExplicitWait
entre en jeu comme dans until(ExpectedConditions.elementToBeClickable)
.
Solution
L'erreur Element is not clickable at point (x, y)
peut découler de différents facteurs. Vous pouvez les traiter par l'une des procédures suivantes :
1. L'élément n'est pas cliqué en raison de la présence d'appels JavaScript ou AJAX.
Essayez d'utiliser Actions
La 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é parce qu'il n'est pas dans la liste des éléments. Fenêtre de visualisation
Essayez d'utiliser JavascriptExecutor
pour faire apparaître l'élément dans la fenêtre d'affichage :
WebElement myelement = driver.findElement(By.id("navigationPageButton"));
JavascriptExecutor jse2 = (JavascriptExecutor)driver;
jse2.executeScript("arguments[0].scrollIntoView()", myelement);
3. La page est rafraîchie avant que l'élément ne devienne cliquable.
Dans ce cas, induire ExplicitWait i.e WebDriverWait comme mentionné au point 4.
4. L'élément est présent dans le DOM mais n'est pas cliquable.
Dans ce cas, induire ExplicitWait avec ExpectedConditions
réglé sur 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 sa superposition est temporaire.
Dans ce cas, induire ExplicitWait
avec ExpectedConditions
réglé sur 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 a une superposition permanente.
Utilice 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);
0 votes
Utilisez-vous la version 61+ de Chrome ?
0 votes
@demouser123 J'utilise Firefox 47.0.1 et seleniumWebDriver 2.51.0.
0 votes
@Maria Sur quelle ligne obtenez-vous l'erreur ? Merci
0 votes
@DebanjanB Dans la ligne : driver.findElement(By.id("navigationPageButton")).click() ;
0 votes
Cette erreur signifie qu'un autre élément recouvre l'élément cible (recouvrement à position fixe/absolue) ou que l'indice z est trop faible. Cela peut être dû à des effets de survol utilisant des transitions (plus lentes que le délai d'attente minimum, dans ce cas 393 ms).
#navigationPageButton
pour devenir visible (ou cliquable en utilisantelementToBeClickable()
pour cet élément également) ou vérifier si toutes les conditions préalables sont remplies pour que le bouton soit cliquable.0 votes
Le problème peut survenir si vous utilisez Ext-JS ou un système similaire pour créer une belle interface utilisateur. J'ai eu des problèmes similaires et cela a été résolu en envoyant la touche <Espace> sur l'élément pour cliquer dessus.