Je ne vois cela que dans Chrome.
Le message d'erreur complet se lit comme suit:
"org.openqa.selenium.WebDriverException: l'élément n'est pas cliquable au point (411, 675). Un autre élément recevrait le clic: ..."
L'élément qui «recevrait le clic» se trouve sur le côté de l'élément en question, pas au-dessus de celui-ci et ne le chevauchant pas, ne se déplaçant pas sur la page.
J'ai essayé d'ajouter un décalage, mais cela ne fonctionne pas non plus. L'élément est sur la fenêtre affichée sans besoin de faire défiler.
google-chrome
selenium
selenium-webdriver
automated-tests
user1591169
la source
la source
Réponses:
Cela est dû aux 3 types suivants:
1. L'élément n'est pas visible à cliquer.
Utilisez Actions ou JavascriptExecutor pour le faire cliquer.
Par actions:
Par JavascriptExecutor:
ou
Cliquez ensuite sur l'élément.
2.La page est actualisée avant de cliquer sur l'élément.
Pour cela, faites patienter la page pendant quelques secondes.
3. L'élément est cliquable mais il y a un spinner / superposition dessus
Le code ci-dessous attendra la disparition de la superposition
Cliquez ensuite sur l'élément.
la source
Vous pouvez également utiliser le clic JavaScript et le défilement ne serait alors pas nécessaire.
la source
actions.MoveToElement
n'a pas fonctionné pour moi en C # et les autres solutions de défilement semblaient un peu fragiles en ce sens qu'il y avait une chance que le défilement ne puisse pas correctement afficher l'élément ou que la position de l'élément sur la page puisse changer.Il semble y avoir un bug dans chromedriver pour cela (le problème est qu'il est marqué comme ne sera pas corrigé) -> GitHub Link
(placer une prime sur FreedomSponsors peut-être?)
Il existe une solution de contournement suggérée au commentaire # 27. Peut-être que ça fonctionnera pour vous-
la source
J'ai eu le même problème, j'ai essayé toutes les solutions proposées mais elles n'ont pas fonctionné pour moi. finalement j'ai utilisé ceci:
J'espère que cela t'aides
la source
J'ai vu cela dans la situation où la fenêtre Chrome au sélénium a été ouverte trop petite. L'élément sur lequel cliquer était hors de la fenêtre d'affichage et, par conséquent, il échouait.
Cela semble logique ... l'utilisateur réel devrait soit redimensionner la fenêtre, soit faire défiler pour qu'il soit possible de voir l'élément et en fait de cliquer dessus.
Après avoir demandé au pilote au sélénium de définir la taille de la fenêtre de manière appropriée, ces problèmes ont disparu pour moi. L'API webdriver est décrite ici .
la source
Wow, beaucoup de réponses ici, et beaucoup de bonnes.
J'espère que je vais ajouter quelque chose à cela de mon expérience.
Eh bien les gars, dans mon cas, il y avait une superposition de cookies cachant parfois l'élément. Le défilement vers l'élément fonctionne également; mais à mon humble avis (pour mon cas, pas une panacée pour tout le monde) la solution la plus simple est juste de passer en plein écran (j'exécutais mes scripts sur un 3/4 de la fenêtre écran)! Alors c'est parti:
J'espère que cela pourra aider!
la source
ruby / watir-webdriver / chrome
J'utilise l'astuce suivante et semble fonctionner:
la source
Moi aussi, je me suis débattu avec ce problème. Le code fonctionne bien dans FF, échoue sur Chrome. Ce que j'essayais de faire était de cliquer sur une case à cocher - si elle n'était pas en vue, je ferais défiler pour voir puis cliquer. Même le défilement dans la vue fonctionne dans Chrome, seuls les quelques pixels inférieurs de la case à cocher n'étaient pas visibles, donc le pilote Web a refusé de cliquer dessus.
Ma solution est la suivante:
Chrome a également des problèmes avec sendKeys, l'utilisation d'actions est parfois nécessaire. De toute évidence, vous devez savoir dans quelle direction et combien vous devez parcourir pour que votre kilométrage puisse varier. Mais je préfère cela au hack javascript, donc je le poste ici au cas où quelqu'un d'autre le trouverait utile.
la source
J'obtenais cette erreur lors de l'exécution de tests sans tête avec xvfb-run. Ils travaillaient parfaitement sur place. En utilisant chrome, les versions de webdriver / chromedriver / chrome / java etc. sont toutes identiques.
Le bug "ne résoudra pas" dans chromedriver - GitHub Link souligné par Tony Lâmpada a suggéré que cela pourrait être lié à ce qui est / n'est pas visible à l'écran.
Le message d'aide pour xvfb-run montre ce qui suit:
Changer la résolution de xvfb a fait disparaître l'erreur:
la source
Lors de l'utilisation de Protractor, cela m'a aidé:
la source
Tout d'abord, essayez d'obtenir le dernier pilote Chrome et vérifiez s'il résout le problème.
Dans mon cas, cela n'a pas résolu le problème. Mais, la solution suivante a fonctionné pour moi jusqu'à présent. Ce qui suit est du code C # mais vous pouvez suivre la même logique dans votre langage spécifique. Ce que nous faisons ici,
Étape 1: Concentrez-vous sur l'élément à l'aide de l'objet Actions Sélénium,
Étape 2: Faites ensuite un clic sur l'élément
Étape 3: S'il y a une exception, nous déclenchons un événement javascript "Click" sur l'élément en exécutant le script javascript via la méthode "ExecuteScript" du pilote du navigateur Selenium.
Vous pouvez également ignorer les étapes 1 et 2 et essayer uniquement l'étape 3 également. L'étape 3 fonctionnerait d'elle-même, mais j'ai remarqué un comportement étrange dans un scénario dans lequel l'étape 3, même si elle a cliqué avec succès sur l'élément, a provoqué un comportement inattendu dans d'autres parties de mon code après avoir cliqué sur l'élément.
la source
J'ai fait cette méthode sur la base d'un commentaire de la réponse de Tony Lâmpada. Il fonctionne très bien.
la source
J'obtenais le même problème lors de l'exécution du script sélénium en python. Voici ce que j'avais l'habitude de cliquer sur l'élément:
la source
J'étais confronté à un problème similaire où je dois cocher deux cases l'une après l'autre.Mais j'obtenais la même erreur ci-dessus. voici les étapes: -
la source
Vous devez utiliser le focus ou faire défiler cet élément. Vous devrez peut-être également utiliser l'attente explicite.
OU
L'élément n'est pas cliquable à cause d'un Spinner / Overlay dessus:
OU
OU
Si vous ne travaillez toujours pas
JavascriptExecutor
la source
Apparemment, cela est le résultat d'un bogue "Won't Fix" dans le binaire du pilote Chrome.
Une solution qui a fonctionné pour moi (Notre kilométrage peut varier) peut être trouvée dans cette discussion de groupe Google, Commentaire # 3:
https://groups.google.com/forum/?fromgroups=#!topic/selenium-developer-activity/DsZ5wFN52tc
La partie pertinente est ici:
Dans mon cas, j'utilise Python, donc une fois que j'ai obtenu l'élément souhaité, j'ai simplement utilisé
Je m'attends à ce que cela ne fonctionne que si l'élément sur lequel vous essayez de cliquer est un lien ...
la source
J'étais confronté au même problème avec clj-webdriver (port de fermeture de Selenium). Je viens de traduire la solution précédente en clôture pour plus de commodité. Vous pouvez appeler cette fonction avant de cliquer ou quoi que ce soit pour éviter ce problème.
la source
Cela peut se produire si l'élément change de position pendant que le pilote tente de cliquer dessus (j'ai également vu cela avec IE). Le conducteur conserve la position initiale mais au moment où il arrive à cliquer dessus, cette position ne pointe plus sur cet élément. Le pilote FireFox n'a pas ce problème BTW, apparemment il "clique" sur les éléments par programme.
Quoi qu'il en soit, cela peut se produire lorsque vous utilisez des animations ou modifiez simplement la hauteur des éléments de manière dynamique (par exemple
$("#foo").height(500)
). Vous devez vous assurer que vous cliquez uniquement sur les éléments une fois que leur hauteur est "réglée". Je me suis retrouvé avec du code qui ressemble à ceci (liaisons C #):Dans le cas d'une animation ou de tout autre facteur que vous ne pouvez pas facilement rechercher, vous pouvez utiliser une méthode "générique" qui attend que l'élément soit stationnaire:
la source
Je l'ai rencontré car une boîte de dialogue de chargement couvre cet élément. Je le résout simplement en ajoutant une attente avant de travailler avec cet élément.
J'espère que cette aide!
la source
Explication du message d'erreur :
Le message d'erreur indique simplement que l'élément sur lequel vous souhaitez cliquer est présent, mais qu'il n'est pas visible. Il pourrait être recouvert par quelque chose ou temporaire non visible.
Il peut y avoir de nombreuses raisons pour lesquelles l'élément n'est pas visible au moment du test. Veuillez ré-analyser votre page et trouver la solution appropriée à votre cas.
Solution pour un cas particulier :
Dans mon cas, cette erreur se produit, lorsqu'une info-bulle de l'élément d'écran sur lequel je viens de cliquer apparaissait sur l'élément sur lequel je voulais cliquer. La défocalisation était une solution dont j'avais besoin.
element.blur()
l'élément faisant apparaître l'info-bulle, ce qui ferait disparaître l'info-bulle.la source
La raison de cette erreur est que l'élément sur lequel vous essayez de cliquer n'est pas dans la fenêtre d'affichage (région vue par l'utilisateur) du navigateur. Donc, le moyen de surmonter cela est de faire d'abord défiler jusqu'à l'élément souhaité, puis de cliquer.
Javascript:
Java:
la source
Concernant la réponse de Tony Lâmpada, le commentaire # 27 a effectivement résolu le problème pour moi, sauf qu'il fournissait du code Java et que j'avais besoin de Python. Voici une fonction Python qui défile jusqu'à la position de l'élément, puis clique dessus.
Cela a résolu le problème pour moi dans Chrome 34.0. Cela n'a causé aucun dommage dans Firefox 28.0 et IE 11; ces navigateurs ne sont pas soumis au problème, mais faire défiler jusqu'à la position de l'élément avant de cliquer dessus n'est toujours pas une mauvaise chose.
la source
Ce n'est peut-être pas une solution vraiment propre, mais cela fonctionne:
la source
J'obtenais ce bogue parce que j'ai testé un survol et que je devais ensuite cliquer sur le lien sous l'infobulle. La solution consistait à ajouter
page.find('.sp-logo').hover
auparavantclick_link
pour éliminer l'infobulle.la source
C'est drôle, tout le temps que j'ai passé à regarder les différentes réponses, personne n'avait essayé l'évidence, ce qui bien sûr, je ne l'avais pas fait non plus. Si votre page a le même identifiant utilisé plusieurs fois, comme le mien, ("newButton",) et que celui que vous voulez n'est pas le premier trouvé, vous obtiendrez probablement cette erreur. La chose la plus simple à faire (C #):
Notez que c'est FindElements, pas FindElement.
Et puis testez pour voir combien de résultats sont revenus de la récupération. Si c'est le second, vous pouvez alors utiliser:
Ou demandez à quiconque a réutilisé les identifiants de les corriger.
la source
.First(x => x.Visible)
à l'appel FindElements) et cliquer dessus s'il n'est pas nul.Après avoir testé toutes les suggestions mentionnées, rien n'a fonctionné. J'ai fait ce code. Cela fonctionne, mais ce n'est pas beau
la source
Je fais une sorte de force brute de clics et ça marche pour moi.
la source
Si vous avez
jQuery
chargé sur la page, vous pouvez exécuter la commande javascript suivante:Exemple utilisant un exécuteur python:
la source
J'ai eu le même problème et il a été causé par un conflit d'identité entre le div et le lien à l'intérieur du div. Donc, le chauffeur cliquait sur le div au lieu du lien que je voulais. J'ai changé l'identifiant div et cela a fonctionné correctement.
Avant:
Après:
la source
Dans Drupal lors de l'utilisation de Selenium :
la source