J'ai eu le même problème. Pour moi, selon le niveau de permission de l'utilisateur, certains liens, boutons et autres éléments n'apparaissent pas sur la page. Une partie de ma suite consistait à tester que les éléments qui DEVRAIENT être absents, le sont. J'ai passé des heures à essayer de résoudre ce problème. J'ai finalement trouvé la solution parfaite.
Ce que cela fait, c'est dire au navigateur de rechercher tous les éléments spécifiés. Si le résultat est 0
cela signifie qu'aucun élément basé sur la spécification n'a été trouvé. Ensuite, j'ai demandé au code d'exécuter une instruction if pour me faire savoir qu'il n'a pas été trouvé.
Ceci est en C#
Il faudrait donc traduire les documents suivants Java
. Mais ça ne devrait pas être trop difficile.
public void verifyPermission(string link)
{
IList<IWebElement> adminPermissions = driver.FindElements(By.CssSelector(link));
if (adminPermissions.Count == 0)
{
Console.WriteLine("User's permission properly hidden");
}
}
Il existe également une autre voie que vous pouvez emprunter en fonction de ce dont vous avez besoin pour votre test.
L'extrait 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 qu'il est affiché sur la page, j'ai console.write
faites-le moi savoir et passez à autre chose. Si l'élément en question existe, je ne peux pas exécuter le test dont j'avais besoin, ce qui est la raison principale pour laquelle j'ai eu besoin de mettre cela en place.
Si l'élément n'existe pas, et n'est pas affiché sur la page. J'ai le else dans le if else pour exécuter le test.
IList<IWebElement> deviceNotFound = driver.FindElements(By.CssSelector("CSS LINK GOES HERE"));
//if the element specified above results in more than 0 elements and is displayed on page execute the following, otherwise execute whats in the else statement
if (deviceNotFound.Count > 0 && deviceNotFound[0].Displayed){
//script to execute if element is found
} else {
//Test script goes here.
}
Je sais que j'ai un peu de retard dans la réponse à l'OP. J'espère que cela aidera quelqu'un !
0 votes
J'ai quelques méthodes qui fonctionnent très efficacement pour vérifier la présence d'un objet, mais cela dépend de ce que vous voulez en faire. Par exemple, voulez-vous chercher l'élément jusqu'à ce qu'il existe, jusqu'à ce qu'il n'existe plus ou voulez-vous simplement essayer de le trouver ?
1 votes
Java est très similaire à C#. Je pense que l'un des principaux problèmes que vous rencontrez ici est qu'en Java, on parle de WebElement au lieu de IWebElement.
0 votes
Connaissez-vous la méthode de l'attente implicite ? En configurant cette méthode au début du test, vous ne devez jamais vérifier l'existence d'un élément, car elle utilise la valeur d'attente implicite pour interroger, mais si elle dépasse cette valeur, elle lève une exception.
0 votes
Voici mon billet sur WebDriverWait en Java : WebDriverWait
0 votes
Si l'un ou l'autre cas est correct, cela peut être problématique pour les performances du test, car le temps d'attente associé à l'attente d'un élément dont on ne s'attend pas à ce qu'il existe s'additionne vraiment. J'ai utilisé quelques astuces pour contourner le temps d'attente, mais je n'ai pas encore trouvé de solution vraiment propre pour cela.
0 votes
La seule façon de sauvegarder est la suivante : static bool isElementPresent(dynamic element, By by) { try { element.FindElement(by) ; return true ; } catch (NoSuchElementException e) { return false ; } }. }