Tuve el mismo problema. Para mí, dependiendo del nivel de permiso de un usuario, algunos enlaces, botones y otros elementos no se mostrarán en la página. Parte de mi suite estaba probando que faltan los elementos que DEBEN faltar. Pasé horas tratando de resolver esto. Finalmente encontré la solución perfecta.
Lo que esto hace es decirle al navegador que busque cualquiera y todos los elementos basados en especificados. Si resulta 0
, eso significa que no se encontraron elementos basados en la especificación. Luego hago que el código ejecute una instrucción if para informarme que no se encontró.
Esto está dentro C#
, por lo que tendrían que hacerse traducciones Java
. Pero no debería ser demasiado difícil.
public void verifyPermission(string link)
{
IList<IWebElement> adminPermissions = driver.FindElements(By.CssSelector(link));
if (adminPermissions.Count == 0)
{
Console.WriteLine("User's permission properly hidden");
}
}
También hay otro camino que puede tomar dependiendo de lo que necesita para su prueba.
El siguiente fragmento está verificando si existe un elemento muy específico en la página. Dependiendo de la existencia del elemento, hago que la prueba ejecute un if if else.
Si el elemento existe y se muestra en la página, me lo ha console.write
hecho saber y seguir adelante. Si el elemento en cuestión existe, no puedo ejecutar la prueba que necesitaba, que es el principal razonamiento detrás de la necesidad de configurar esto.
Si el elemento no existe y no se muestra en la página. Tengo el else en if if ejecutar la prueba.
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.
}
Sé que llego un poco tarde en la respuesta al OP. ¡Ojalá esto ayude a alguien!