Nightwatch ne peut pas localiser l'élément via css id ou des sélecteurs de classe
Nous utilisons Nightwatch d'automatiser une partie de notre INTERFACE utilisateur de test. Certains tests sont plutôt fragiles, surtout d'avoir à faire avec bizarre sélecteurs CSS, et je vais essayer de les simplifier. Mais certains de la simple sélecteurs CSS que je m'attends à du travail sont, ainsi, pas.
J'essaie de trouver ce profondément imbriqués <a>
tag:
<a class="btn btn-quote btn-crm" href="/crm/" id="btnEndSession" style="display: inline-block;">End Session</a>
Voici un peu de code qui fonctionne:
.waitForElementVisible('#quoteSummary > div > div > div > div > a:nth-child(2)', 1000)
.click('#quoteSummary > div > div > div > div > a:nth-child(2)')
Mais c'est un méchant sélecteur CSS, et j'aimerais le remplacer par ceci:
.waitForElementVisible('#btnEndSession', 1000)
.click('#btnEndSession')
Comme le <a>
élément, je suis intéressé en a, en fait, l'id de btnEndSession
, il semble que cela devrait fonctionner. Mais il n'a pas d': nightwatch erreurs avec l'un de ses "dépassé pendant l'attente de l'élément <#btnEndSession> pour être visible pour 10 000 millisecondes" des messages.
J'ai aussi essayé:
.waitForElementVisible('.btn-crm', 10000)
.waitForElementVisible('a[id=btnEndSession]', 10000)
.waitForElementVisible('a#btnEndSession', 10000)
Mais ceux-ci ne fonctionne pas non plus. Aucune idée de pourquoi ces plus simple, les sélecteurs ne sont pas de la cueillette de l'élément?
EDIT:
OK, assez bizarrement, cela a fonctionné:
.waitForElementVisible('a.btn-crm', 1000)
Cependant, dans le même essai, à la recherche de cet élément:
<select class="custom-form-control crm-result-visit select-hidden" id="crm-result-visit" name="crmResultVisit">
<option value=" ">Select</option>
<option value="Not Home">Not Home</option>
</select>
L'ensemble de ces différents sélecteurs ne parviennent pas à trouver l'élément:
.waitForElementVisible('select.crm-result-visit', 10000)
.waitForElementVisible('select#crm-result-visit', 10000)
.waitForElementVisible('#crm-result-visit', 10000)
.waitForElementVisible('.crm-result-visit', 10000)
.waitForElementVisible('select[id=crm-result-visit]', 10000)
Je suis un peu à contrecœur conduit à la conclusion que le sélecteur CSS de soutien dans nightwatch est assez buggé.
FWIW, nous utilisons la version 0.6.7 de nightwatch.
a#btnEndSession
travail? Jamais utilisé Nightwatch.js mais je suis enclin à penser que c'est buggé.Grande question. Malheureusement, cette syntaxe échoue également, dans mon cas de test ci-dessus.
Ce qui rend ce si intéressant est la nature du message d'erreur - il suggère que le sélecteur CSS de l'analyseur de parser les sélecteurs très bien, c'est ce qu'il fait avec les sélecteurs/éléments qui.
Pour ce que sa valeur, nous avons finalement abandonné Nightwatch: trop de questions de ce genre, sans résolution. Nous avons commencé à utiliser le Sélénium directement par le biais de ses C# liaisons, et qui fonctionne bien mieux.
Juste pensé que je le carillon - Nightwatch a long chemin depuis 0.6.x et je n'ai pas de problèmes lors de l'appel à l'aide de l'id ou des sélecteurs de classe dans le mentionné ci-dessus façons. Bien la peine de vérifier si vous regardiez dans TA 🙂
OriginalL'auteur Ken Smith | 2015-05-05
Vous devez vous connecter pour publier un commentaire.
Pour ce que ça vaut, nous avons fini par abandonner Nightwatch, et aller directement à le Sélénium (C#, dans notre cas), qui ne semblent pas avoir ces problèmes, et mieux intégré dans le reste de notre environnement. Pas une grande réponse, mais je n'ai pas ce problème de plus :-).
Nous utilisons la version C# de Sélénium téléchargeable directement à partir de cette page: seleniumhq.org/download. Pas sûr de savoir comment il est mis en œuvre en coulisses, mais je ne pense pas que c'est juste C# liaisons appel à Java: j'ai l'impression que c'est un code C# de mise en œuvre. Fonctionne très bien.
ouais doit être)))
OriginalL'auteur Ken Smith
J'ai commencé à utiliser NightWatch JS , je suis en utilisant nightwatch v0.6.7 . Code suivant fonctionne très bien pour moi
OriginalL'auteur Juhi Saxena
Ne sais pas si aide, mais je tombe sur cette question aujourd'hui et il a obtenu de fonctionner après un certain temps.
Par défaut nightwatch est d'utiliser le sélecteur css donc juste ajouter ".useXpath()" résolu mon problème. Si, vérifier ce qui sélecteur vous utilisez en premier et ensuite utiliser requis.
Source : https://github.com/nightwatchjs/nightwatch-docs/blob/master/guide/using-nightwatch/using-xpath-selectors.md
".useXpath()" résolu mon problème et dans le lien il y a la même chose. donc, ma réponse est ".useXpath()". Le lien est seulement pour la référence, si quelqu'un veut vérifier.
OriginalL'auteur Sabin Bhandari