WebDriver – l’élément n’est pas cliquable Chrome

J’ai le problème suivant. Je lance le test sur Firefox et Chrome. Sur Firefox, le test s’effectue correctement mais sur Chrome, SauceLabs affiche le message suivant:

unknown error: Element is not clickable at point (717, 657). Other element would receive the click: 
...
(Session info: chrome=36.0.1985.125) (Driver info: chromedriver=2.10.267521,platform=Windows NT 6.3 x86_64)

Je choisis élément par sélecteur css unique dans les deux tests de la même manière:

 driver.FindElement(By.CssSelector("button.btn-xs:nth-child(1)")).Click(); 

Des idées ce qui ne va pas ici?

Je suppose que vous avez le bon élément, c’est-à-dire que le XPath est correct. Voici quelques sorties:

  1. Essayez plutôt de cliquer sur l’ parent element .
  2. Essayer Submit() au lieu de .Click()
  3. Essayez d’exécuter le JavaScript qui sera exécuté sur l’événement OnClick de l’élément sur lequel vous essayez de cliquer.

J’ai utilisé la 3ème voie avec succès tout le temps.

Un autre

  1. Faire un .SendKeys(Keys.Enter) sur cet élément (ou une touche d’espace)

Puisque vous avez également associé Google Chrome à la question, je suppose que cela se produit principalement avec ChromeDriver . J’ai eu les mêmes problèmes avec l’un de mes projets précédents (Asp .Net MVC). J’ai constaté que lorsque certains éléments ne sont pas visibles pour ce pilote s’ils ne figurent pas dans la screen_visible_area . Veuillez noter qu’ils sont chargés (HTML, CSS3, JS, etc.) correctement.

Ainsi, après beaucoup de lectures et de tests, j’ai trouvé que ma solution de contournement consiste simplement à faire défiler jusqu’au WebElement – c’est donc dans la partie visible de l’écran. En réalité, ce problème ne concernait pas tous les éléments et je n’ai pas trouvé de meilleure solution.

 unknown error: Element is not clickable at point (..., ...) 

N’est pas une erreur descriptive pour ce cas, car comme vous, j’ai aussi pensé que c’était lié au sélecteur .

Juste pour être complet, j’ai eu les mêmes problèmes avec IEDriver . Mon implémentation consistait à utiliser les options de défilement vers le bas / vers le haut du navigateur et à simplement “envoyer l’écran” à l’endroit où se trouve l’élément problématique.

Code JSExecutor simple que vous pouvez utiliser:

 WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.scrollBy(110,350)", ""); 

ou

 jse.executeScript("scroll(0, 250);"); 

ou

 driver.executeScript("window.scrollBy(110,350)", ""); 

D’autres ressources utiles sur le sujet sont disponibles ici .

Mettre à jour

En ce qui concerne le .sendKeys() j’ai également utilisé les fonctionnalités d’accessibilité du navigateur . Il vous suffit de compter le nombre de clics TAB nécessaires à votre test pour atteindre l’élément web_élément ciblé. Ensuite, appelez simplement .click() .

Essayez ce code simple:

 element.sendKeys(Keys.TAB); 

ou

 element.sendKeys("\t") 

ou

 Actions builder = new Actions(driver); builder.keyDown(Keys.TAB).perform() 

Je me rends compte que c’est une très vieille question, mais elle a été soulevée en cherchant un problème presque identique de nos jours. Après avoir essayé plusieurs des correctifs décrits ici et obtenu de nouvelles exceptions pour mon problème (principalement des éléments périmés et des délais d’attente de requêtes http), je suis tombé sur ce problème concernant le GitHub de Selenium.

Comme décrit dans l’article, Chrome avait dépassé les capacités de ma version de chromedriver.exe. Mon pilote v2.30 avait des problèmes avec les éléments cliqués en raison de modifications de la mécanique de défilement de Chrome v61. La mise à jour vers le dernier fichier chromedriver.exe a résolu tous mes problèmes.

tl / dr: assurez-vous que votre version de chromedriver est compatible avec la version de Chrome testée.

Si vous faites quelque chose de compliqué dans votre CSS, Chrome peut être désorienté (c’est ce qui m’est arrivé) et penser que l’élément sur lequel vous essayez de cliquer est couvert par un autre élément même si ce n’est pas le cas.

Une façon de résoudre ce problème consiste à aider Chrome à comprendre correctement la situation en ajoutant des index z (vous devez également append un positionnement relatif ou absolu) afin de placer sans ambiguïté le bon élément l’un sur l’autre.

Pour moi, il s’agissait plutôt de créer cette commande.

 driver.FindElementByXPath("id('gender1')").SendKeys(Keys.Space); 

Pour mon cas, j’étais en interaction avec le contrôle radio.

J’ai eu ce problème sur FF. Ce problème se produit lorsque votre champ n’est pas dans la zone de visualisation. Le moyen le plus simple de résoudre ce problème consiste à effectuer un zoom arrière sur votre navigateur:

TheNotClickableField.SendKeys (Keys.Control + “-” + “-“);

vous souhaiterez peut-être effectuer un zoom arrière plus ou moins en fonction de la taille de votre page.

I. Si le bouton est au bas de la page, le code suivant peut être utilisé pour vous rendre au bas via JavaScript à partir duquel le clic peut être exécuté:

(pilote comme IJavaScriptExecutor) .ExecuteJavaScript (“window.scrollTo (0, document.body.scrollHeight – 150)”);

La même action pourrait être effectuée via C # avec la classe Actions fournie par Selenium. Cela vous mènera au bas de la page —–>

nouvelles actions (pilote) .SendKeys (Keys.End) .Perform ();

Keys.End peut être changé avec Keys.PageDown // Keys.Space

II. Si vous voulez obtenir la position exacte de l’élément, vous pouvez:

1.Obtenez l’emplacement Y de l’élément —> var elementToClick = driver.findElement (By. {Anything} (“”));

2. Exécutez le JS —> suivant (pilote sous le nom IJavaScriptExecutor) .ExecuteScript (ssortingng.Format (“window.scrollTo (0, {0})”, elementToClickYLocation.Location.Y));

3.Cliquez sur l’élément —> elementToClick.click ();