Cliquez sur le lien hypertexte en utilisant Selenium Webdriver
J'ai un problème lors de la tentative de cliquer sur un lien hypertexte en utilisant Selenium Webdriver. J'ai essayé d'utiliser CssSelector ainsi que XPath et rien ne semble fonctionner. Tout ce que je suis en train de faire est de Cliquer sur le texte Google.
<div class="hello">
<div class="test">
<table class="first first-table">
<tbody>
<tr>
<td class="second-table">
<a id="dummyID" href="https://www.google.com" target="_blank">Google</a>
</td>
</tr>
</tbody>
</table>`
J'ai essayé de pilote.FindElement(Par.XPath("//*[@id='dummyID']")).Cliquez sur(); j'ai aussi essayé en utilisant href trouver le lien...à peu près tout. Toutes les fois que je suis "incapable de localiser l'élément de" l'exception". Quelqu'un a des suggestions?
- Est le Lien figurant dans un cadre (frame ou iframe?
- C'est une bonne question..
- En regardant le code HTML à l'aide de Firebug, je ne vois pas de frame/iframe.
- Je pense qu'à ce stade, nous allons avoir besoin de voir un peu plus de html, et éventuellement de votre code d'initialisation du pilote à l'endroit où vous essayez de cliquer sur le lien.
- À essayer si il aide les stackoverflow.com/questions/13040719/...
- Je me demande si cet élément est en cours de chargement après l'exécution de l'action?
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Regarder pour voir si l'élément est dans un cadre (frame ou iframe. Si elle l'est, vous aurez besoin d'utiliser:
driver.FindElement(By.XPath("//*[@id='dummyID']")).Click()
?Vous pouvez utiliser
Vous pouvez facilement trouver par id:
Ou vous pouvez utiliser cette expression xpath dans votre scénario:
Vous pouvez directement trouver l'élément par son id, il est un moyen facile et efficace.
J'espère que vous recevrez de votre choix, cliquez sur celle-ci avec l'un de ces fragments de code, les deux doivent fonctionner de la même. Ça sera sûrement travail.
Aucune des solutions proposées de travail à chaque fois. Les hyperliens ne peuvent pas être traités comme les autres cliquable web des éléments tels que des boutons. Un lien hypertexte est désactivé par la suppression de la
href
de l'attribut de la balise d'ancrage. Pour les autres composants, les pilotes web peuvent interroger le web trouvées élément pour voir si c'est activé ou cliquable. Envisagez le scénario suivant:Parce que le
ExpectedConditions
classe ne peut pas faire une détermination de la "clickability" du lien comme on peut le faire avec un élément d'entrée (comme un bouton), il ne sera pas jeter unTimeoutException
et permettra à votre test de cliquer sur un mort (désactivé) lien. Par conséquent, pour les liens hypertexte exclusivement, vous devez rechercher une balise d'ancrage avec unhref
attribut, ou tester la conséquence de la souris (c'est à dire un changement dans l'URL).Une autre chose que vous devriez essayer d'éviter l'utilisation de
//*
pour localiser les éléments web. Vous pouvez exécuter dans des situations où plus d'un élément sera trouvé et que vous finirez par l'interaction avec l'autre incorrecte.Enfin, le problème avec
driver.FindElement(...)
est que vous pouvez rencontrer des problèmes avecNoSuchElement
des exceptions si la page n'a pas chargé à fond (sauf si vous définissez implicite de l'attente de quelque sorte). Le moyen préféré attendre pour un élément d'interagir avec elle en utilisant explicite attend, à l'instar de l'exemple Java, j'ai fourni ci-dessus. Depuis je ne sais pas quel problème vous avez couru dans, je suppose que cela pourrait être votre problème. Si ce n'est pas la question, peut-être l'élément est à l'intérieur d'uniframe
dans ce cas, vous devrez indiquer le web au conducteur de passer à la correcteiframe
avant d'interagir avec l'élément.