Selenium – L'élément n'est pas cliquable au point

J'utilise le sélénium pour le script de test. Je reçois une erreur suivante et cette erreur se produit de façon aléatoire. Quand je cours 10 fois, j'en arrive à deux fois. Donc, ce n'est pas vraiment reproductible. Est-ce que quelqu'un sait pourquoi cela se produit? L'élément que j'essaie de cliquer est définitivement visible dans le navigateur et ne se déplace pas, donc il n'est pas nécessaire de redimensionner ou de faire glisser l'élément. J'utilise le webdriver chrome et je lis d'autres stratégies de dépannage ( erreur de débogage "élément n'est pas cliquable au point" ) et elles ne semblent pas pertinentes pour mon problème. J'ai également attendu suffisamment de temps.

UnknownError: unknown error: Element is not clickable at point (167, 403). Other element would receive the click: <div class="leftMasterBackground"></div> 

Il existe plusieurs étapes que vous pouvez effectuer afin d'améliorer la stabilité tout en cliquant sur différents éléments d'IU:

  • Extendemment attendez sa présence dans le DOM
  • Faites défiler dans la vue des éléments
  • Vérifiez si vous cliquez

Cela a-t-il contribué à la stabilité?

 WebDriverWait wait = new WebDriverWait(driver, 3) JavascriptExecutor js = ((JavascriptExecutor) driver) //presence in DOM wait.until(ExpectedConditions.presenceOfElement(By.id("ID"))); //scrolling WebElement element = driver.findElement(By.id("ID"))); js.executeScript("arguments[0].scrollIntoView(true);", element); //clickable wait.until(ExpectedConditions.elementToBeClickable(By.id("ID"))); 

De plus, si vous décidez de remplacer l'interface Action par défaut par une option plus personnalisée, vous pouvez utiliser deux types de clics (par exemple): click() qui aura toutes ces étapes de stabilité et fastClick() qui sera par défaut en cliquant sans Toute modification.

J'ai résolu en attrapant l'exception et en la gérant comme ceci:

  WebDriver driver = new ChromeDriver(); WebElement element = driver.findElement(By.id("ID")); boolean clicked = false; do{ try { element.click(); } catch (WebDriverException e) { continue; } finally { clicked = true; } } while (!clicked); 

J'ai également eu le même problème avec Chrome. J'ai résolu que mettre une ligne de code avant de cliquer sur l'élément:

 scrollToViewElement(driver,xpath); 

Cliquez sur l'élément parent de l'élément auquel vous souhaitez cliquer. Cela peut être une solution de contournement seulement.

  • Cela ne se produit que sur Chrome, donc ça marche sur ie et Firefox
  • ChromeDriver clique toujours au milieu de l'élément
  • La raison pour laquelle le pilote Chrome ne calcule pas l'emplacement d'écran correct du lien.

Solution:

// Trouver un élément et le définir

WebElement elementToClick = driver.findElement(By.xpath("some xpath")); // Scroll the browser to the element's Y position ((JavascriptExecutor) driver).executeScript("window.scrollTo(0,"+elementToClick.getLocation().y+")"); // Click the element elementToClick.click();

J'ai eu le même problème en raison de l'une des filières qui cachait l'élément.

J'ai donné xpath et il a résolu le problème. D'autres personnes ont suggéré de faire défiler 2. Le sommeil a également fonctionné pour eux.