Vérifier si un élément existe - sélénium / javascript / node-js
Je suis en train de vérifier si un élément existe avant que je puisse exécuter cette ligne:
driver.findElement(webdriver.By.id('test'));
Cela déclenche une erreur "aucun élément" si l'id test
n'existe pas dans le document, même dans un try
-bloc.
J'ai trouvé des réponses pour Java, où vous pouvez vérifier si la taille est 0, mais dans le node-js cela déclenche une erreur avant que je puisse vérifier la taille.
throw error;
^
NoSuchElementError: no such element
Ne pouvez-vous pas utiliser seulement ceci : si(webdriver.Par.id('test')){ pilote.findElement(webdriver.Par.id('test')); }.
findElements() et size()
webdriver.par.id("rien") semble toujours vrai.
ah, la taille() serait la version de Java. Peut-être swap de la taille .longueur et voir si cela fonctionne. J'ai seulement joué avec le nœud version un peu. Serait quelque chose comme ce travail
findElements() et size()
webdriver.par.id("rien") semble toujours vrai.
TypeError: Object [object Object] has no method 'size'
ah, la taille() serait la version de Java. Peut-être swap de la taille .longueur et voir si cela fonctionne. J'ai seulement joué avec le nœud version un peu. Serait quelque chose comme ce travail
driver.findElements(By.id('XXX')).then(function(elements) { var count = elements.length; });
OriginalL'auteur F. Rakes | 2013-11-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez tirer parti de l'option gestionnaire d'erreur argument de
then()
.Je ne pouvais pas trouver ce qu'il soit explicitement indiqué dans la documentation, mais déterminé à partir de la définition de la fonction dans
webdriver/promise.js
dans leselenium-webdriver
module source:À moins que l'op est trompé sur l'utilisation de python pas de javascript, ce devrait être la bonne réponse. Jusqu'voté!
dans mon cas, le
err
objet ne possède pas un "état" prop. il retourne si je console de log de l'erreur{ NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"img"}
. et la deuxième condition renvoieTypeError: Cannot read property 'promise' of undefined
Salut @Zugwait , je peux simplement vous demander si il est possible d'utiliser
then
après undriver.findElement(By.xpath('test')).click()
? Merci!Reconnaissant pour la réponse, cependant comment voulez-vous mettre en œuvre dans un scénario où vous utilisez
await
? J'ai essayéawait driver.findElement(webdriver.By.id('test')).then(function(webElement) { console.log('Element exists'); }, function(err) {...
mais il déclenche une erreurOriginalL'auteur Zugwalt
Pourquoi ne pas simplement utiliser le isElementPresent(locatorOrElement) méthode? voici un lien vers le code:
http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html#l777
OriginalL'auteur Tomasz Wszelaki
La réponse choisie ne fonctionne pas comme prévu (
err.state
étaitundefined
et unNoSuchElementError
a toujours été jetés) -- bien que le concept de l'utilisation de l'option rappels fonctionne toujours.Car j'avais la même erreur que l'OP est le référencement, je crois
NoSuchElementError
doit être référencé au moment de déterminer si l'élément ciblé existe ou pas. Comme son nom l'indique est l'erreur qui est générée lorsqu'un élément n'existe pas. Donc, la condition de l'errorCallback devrait être:err instanceof webdriver.error.NoSuchElementError
Donc le code complet bloc serait comme suit (je suis aussi à l'aide de
async
/await
pour ceux qui prennent avantage de cette syntaxe):OriginalL'auteur Arthur Weborg
Vous voulez vérifier si un élément existe avant que vous le souhaitez à trouver un élément de l'INTERFACE utilisateur.
Vous pouvez attendre jusqu'à ce que l'élément est situé sur l'INTERFACE utilisateur vous pouvez effectuer la recherche d'élément de l'opération.
Ex: code ci-Dessous attend jusqu'à ce que l'élément situé alors il va effectuer la recherche d'élément.
OriginalL'auteur Saurabh Bishnoi
Je sais que c'est un peu tard, mais c'est le code qui a fonctionné pour moi.
OriginalL'auteur user1707141
Sonne comme vous voulez vérifier si votre propriétés existent, d'abord:
OriginalL'auteur Mike 'Pomax' Kamermans