¿Hay alguna forma de probar si un elemento está presente? Cualquier método findElement terminaría en una excepción, pero eso no es lo que quiero, porque puede ser que un elemento no esté presente y eso está bien, eso no es un fallo de la prueba, por lo que una excepción no puede ser la solución.
He encontrado esta publicación: Selenium c # Webdriver: Espere hasta que Element esté presente Pero esto es para C # y no soy muy bueno en eso. ¿Alguien puede traducir el código a Java? Lo siento muchachos, lo probé en Eclipse pero no lo consigo en el código Java.
Este es el código:
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
ensayador
fuente
fuente
Respuestas:
Usar en
findElements
lugar defindElement
.findElements
devolverá una lista vacía si no se encuentran elementos coincidentes en lugar de una excepción.Para verificar que un elemento está presente, puede intentar esto
Esto devolverá verdadero si se encuentra al menos un elemento y falso si no existe.
La documentación oficial recomienda este método:
fuente
¿Qué pasa con un método privado que simplemente busca el elemento y determina si está presente así?
Esto sería bastante fácil y hace el trabajo.
Editar: incluso podría ir más allá y tomar un
By elementLocator
parámetro, eliminando problemas si desea encontrar el elemento por otra cosa que no sea id.fuente
Descubrí que esto funciona para Java:
fuente
presenceOfElementLocated
lanzará una Excepción si el elemento no se encuentra en un intento particular. Para evitar esto, agregue unawait.ignoring(NoSuchElementException.class);
declaración entre la primera y la segunda línea.fuente
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 traduccionesJava
. Pero no debería ser demasiado difícil.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.
Sé que llego un poco tarde en la respuesta al OP. ¡Ojalá esto ayude a alguien!
fuente
Pruebe esto: llame a este método y pase 3 argumentos:
Ejemplo: waitForElementPresent (driver, By.id ("id"), 10);
fuente
Puede hacer que el código se ejecute más rápido acortando el tiempo de espera de selenio antes de su declaración de captura de prueba.
Utilizo el siguiente código para verificar si un elemento está presente.
fuente
Escriba la siguiente función / método usando Java:
Llame al método con el parámetro apropiado durante la aserción.
fuente
si está usando rspec-Webdriver en ruby, puede usar este script asumiendo que un elemento realmente no debería estar presente y que es una prueba aprobada.
Primero, escriba este método primero desde su archivo RB de clase
Luego, en su archivo de especificaciones, llame a ese método.
Si su elemento NO está presente, su especificación pasará, pero si el elemento está presente, arrojará un error, la prueba falló.
fuente
Esto funciona para mi:
fuente
fuente
Personalmente, siempre busco una mezcla de las respuestas anteriores y creo un método de utilidad estática reutilizable que utiliza la
size() > 0
sugerencia:Esto es ordenado, reutilizable, mantenible ... todas esas cosas buenas ;-)
fuente
Para encontrar un elemento en particular presente o no, tenemos que usar el método findElements () en lugar de findElement () ..
esto funcionó para mí ... sugiérame si estoy equivocado ...
fuente
Esto debería hacerlo:
fuente
Dando mi fragmento de código. Por lo tanto, el siguiente método verifica si existe un botón aleatorio de elemento web ' Crear nueva aplicación ' en una página o no. Tenga en cuenta que he usado el período de espera como 0 segundos.
fuente
Usaría algo como (con Scala [el código en el antiguo "bueno" Java 8 puede ser similar a esto):
por lo que entonces,
fuente
La forma más simple que encontré en Java es:
fuente
Puedes probar la espera implícita:
O puede intentar esperar explícitamente uno:
Explícito verificará si el elemento está presente antes de alguna acción. La espera implícita se puede llamar en todos los lugares del código. Por ejemplo después de algunas acciones AJAX.
Más puede encontrar en la página de SeleniumHQ
fuente