Existe-t-il un moyen de tester si un élément est présent? Toute méthode findElement se terminerait par une exception, mais ce n'est pas ce que je veux, car il se peut qu'un élément ne soit pas présent et que ce n'est pas grave, ce n'est pas un échec du test, donc une exception ne peut pas être la solution.
J'ai trouvé ce post: Selenium c # Webdriver: Attendez que l'élément soit présent Mais c'est pour C # et je ne suis pas très bon dans ce domaine. Quelqu'un peut-il traduire le code en Java? Je suis désolé les gars, je l'ai essayé dans Eclipse mais je ne le comprends pas directement dans le code Java.
Voici le code:
public static class WebDriverExtensions{
public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds){
if (timeoutInSeconds > 0){
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(by));
}
return driver.FindElement(by);
}
}
java
selenium
selenium-webdriver
testeur
la source
la source
Réponses:
Utilisez à la
findElements
place defindElement
.findElements
renverra une liste vide si aucun élément correspondant n'est trouvé au lieu d'une exception.Pour vérifier qu'un élément est présent, vous pouvez essayer ceci
Cela retournera vrai si au moins un élément est trouvé et faux s'il n'existe pas.
La documentation officielle recommande cette méthode:
la source
Qu'en est-il d'une méthode privée qui recherche simplement l'élément et détermine s'il est présent comme ceci:
Ce serait assez facile et fait le travail.
Edit: vous pouvez même aller plus loin et prendre un
By elementLocator
comme paramètre, éliminant les problèmes si vous voulez trouver l'élément par autre chose que id.la source
J'ai trouvé que cela fonctionne pour Java:
la source
presenceOfElementLocated
lancera une exception si l'élément n'est pas trouvé lors d'une tentative particulière. Pour éviter cela, ajoutez unewait.ignoring(NoSuchElementException.class);
instruction entre la première et la deuxième ligne.la source
J'ai eu le même problème. Pour moi, selon le niveau d'autorisation d'un utilisateur, certains liens, boutons et autres éléments ne s'afficheront pas sur la page. Une partie de ma suite testait que les éléments qui DEVRAIENT manquer, le sont. J'ai passé des heures à essayer de comprendre cela. J'ai finalement trouvé la solution parfaite.
Cela indique au navigateur de rechercher tous les éléments en fonction spécifiés. S'il en résulte
0
, cela signifie qu'aucun élément basé sur la spécification n'a été trouvé. Ensuite, le code exécute une instruction if pour me faire savoir qu'il n'a pas été trouvé.C'est dans
C#
, donc des traductions devraient être faitesJava
. Mais ça ne devrait pas être trop dur.Il existe également un autre chemin que vous pouvez emprunter en fonction de ce dont vous avez besoin pour votre test.
L'extrait de code suivant vérifie si un élément très spécifique existe sur la page. En fonction de l'existence de l'élément, le test exécute un if else.
Si l'élément existe et est affiché sur la page, j'ai
console.write
m'en suis informé et je passe à autre chose. Si l'élément en question existe, je ne peux pas exécuter le test dont j'avais besoin, ce qui est le principal raisonnement derrière la nécessité de le configurer.Si l'élément n'existe pas et n'est pas affiché sur la page. J'ai le else dans le if else exécuter le test.
Je sais que je suis un peu en retard sur la réponse au PO. Espérons que cela aide quelqu'un!
la source
Essayez ceci: Appelez cette méthode et passez 3 arguments:
Exemple: waitForElementPresent (driver, By.id ("id"), 10);
la source
Vous pouvez accélérer l'exécution du code en raccourcissant le délai d'expiration du sélénium avant votre instruction try catch.
J'utilise le code suivant pour vérifier si un élément est présent.
la source
Écrivez la fonction / les méthodes suivantes en utilisant Java:
Appelez la méthode avec le paramètre approprié lors de l'assertion.
la source
si vous utilisez rspec-Webdriver dans ruby, vous pouvez utiliser ce script en supposant qu'un élément ne devrait vraiment pas être présent et que le test a réussi.
Commencez par écrire cette méthode à partir de votre fichier de classe RB
Ensuite, sur votre fichier de spécifications, appelez cette méthode.
Si votre élément n'est PAS présent, votre spécification passera, mais si l'élément est présent, cela générera une erreur, le test a échoué.
la source
Cela fonctionne pour moi:
la source
la source
Personnellement, je choisis toujours un mélange des réponses ci-dessus et crée une méthode utilitaire statique réutilisable qui utilise la
size() > 0
suggestion:C'est soigné, réutilisable, maintenable ... toutes ces bonnes choses ;-)
la source
Pour trouver qu'un élément particulier est présent ou non, nous devons utiliser la méthode findElements () au lieu de findElement ().
cela fonctionne pour moi .. suggérez-moi si je me trompe.
la source
Cela devrait le faire:
la source
Donner mon extrait de code. Ainsi, la méthode ci-dessous vérifie si un bouton d' élément Web aléatoire `` Créer une nouvelle application '' existe sur une page ou non. Notez que j'ai utilisé la période d'attente de 0 seconde.
la source
J'utiliserais quelque chose comme (avec Scala [le code dans l'ancien "bon" Java 8 peut être similaire à ceci]):
Donc alors,
la source
Le moyen le plus simple que j'ai trouvé en Java est:
la source
Vous pouvez essayer une attente implicite:
Ou vous pouvez essayer une attente explicite:
Explicit vérifiera si l'élément est présent avant une action. Une attente implicite peut être appelée à chaque endroit du code. Par exemple après quelques actions AJAX.
Plus vous pouvez trouver sur la page SeleniumHQ
la source