En ce qui concerne l'erreur Webdriver
Element is not clickable at point (X, Y). Another element would recieve the click instead.
Pour ChromeDriver, ceci est adressé à Débogage: "l’élément n’est pas cliquable au point" erreur , mais le problème peut également se produire dans Firefox.
Quels sont les meilleurs moyens de résoudre ce problème dans FirefoxDriver?
Cela se produit dans les cas ci-dessous
Lorsque l'élément est chargé dans le DOM, mais que la position n'est pas Fixée sur l'interface utilisateur. Il peut y avoir une autre div ou des images qui ne sont pas Chargées complètement.
La page est en cours de rafraîchissement avant de cliquer sur l'élément.
Workaround
Je faisais face au même problème, le temps de chargement de la page était plus long et une icône de chargement chevauchait toute la page Web.
Pour résoudre ce problème, j'ai implémenté WebDriverWait ExpectedConditions, qui attend que l'icône de chargement disparaisse avant d'effectuer l'action de clic sur un élément.
Appelez cette fonction avant d'effectuer une action (j'utilise un framework piloté par les données)
public void waitForLoader () throws Exception {
try {
String ObjectArray[]=ObjectReader.getObjectArray("LoadingIcon");
if(checkElementDisplayed(ObjectArray[3],ObjectArray[2]))
{
WebDriverWait wait = new WebDriverWait(remotewebdriver,10);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(ObjectArray[3])));
}
} catch (NoSuchElementException e) {
System.out.println("The page is loaded successfully");
}
}
Le même problème est résolu par Javascript. Merci d'essayer le code suivant au lieu de Selenium click
WebElement rateElement = driver.findElement(By.xpath(xpathContenRatingTab));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", rateElement);
Si votre problème est que l'élément est défilé à l'écran (et par conséquent sous quelque chose comme une barre d'en-tête), vous pouvez essayer de le faire défiler comme ceci:
private void scrollToElementAndClick(WebElement element) {
int yScrollPosition = element.getLocation().getY();
js.executeScript("window.scroll(0, " + yScrollPosition + ");");
element.click(); }
si vous en avez besoin, vous pouvez également ajouter un décalage statique (si, par exemple, vous avez un en-tête de page de 200 pixels de haut et toujours affiché):
public static final int HEADER_OFFSET = 200;
private void scrollToElementAndClick(WebElement element) {
int yScrollPosition = element.getLocation().getY() - HEADER-OFFSET;
js.executeScript("window.scroll(0, " + yScrollPosition + ");");
element.click();
}
Vous pouvez cliquer directement avec JavascriptExecutor
(non recommandé)
WebElement element= driver.findElement(By."Your Locator"));
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", element);
J'espère que ça vous aidera :)
J'ai eu le même problème et je l'ai résolu en utilisant certaines capacités. Lorsque vous utilisez FirefoxDriver, vous pouvez définir "overlappingCheckDisabled" sur true pour résoudre votre problème.
capabilities.setCapability("overlappingCheckDisabled", true);
Une correspondance judicieuse de la version de jar Selenium avec la version de Firefox peut résoudre le problème. Selenium devrait automatiquement faire défiler un élément dans la vue s’il ne se trouve pas sur la page. Forcer un élément avec JavaScript est inutile.
Nous ne voyons jamais ce problème dansFirefox 31.5.0 avec Selenium-server-standalone-2.44.0.jar, toutefois lors de la mise à niveau vers Firefox 38.7.0 avec Selenium-server-standalone- 2.52.0.jar, c'est devenu un problème.
ActionBuilder peut résoudre l'erreur. Parfois, il y a un autre élément devant l'objet sur lequel il faut cliquer. Par conséquent, un clic sur ActionBuilder à l'emplacement de l'élément peut fonctionner dans les cas où un clic traditionnel échoue.
Actions actions = new Actions(driver);
actions.moveToElement(clickElement).click().perform();
ou essayez le milieu de l'élément
Actions actions = new Actions(driver);
Integer iBottom = clickElement.getSize().height;
Integer iRight = clickElement.getSize().width;
actions.moveToElement(clickElement, iRight/2, iBottom/2).click().perform();
Essayez de maximiser le navigateur lorsque vous travaillez avec des résolutions supérieures à 1024x768. Cela fonctionne pour moi en js.
driver.manage().window().maximize();