Posteriormente a consultar con especialistas en este tema, programadores de deferentes ramas y profesores hemos dado con la solución a la pregunta y la compartimos en esta publicación.
Solución:
Actualizar: los textContent
attribute es una mejor opción y es compatible con la mayoría de los navegadores. Las diferencias se explican en detalle en esta publicación de blog: texto interior frente a contenido de texto
Como alternativa, el innerText
attribute devolverá el contenido de texto de un elemento que existe en el DOM.
element.getAttribute("innerText")
los isDisplayed()
El método a veces puede tropezar cuando el elemento no está realmente oculto sino fuera de la ventana gráfica; getText()
devuelve un vacío string para tal elemento.
También puede traer el elemento a la ventana gráfica desplazándose hacia él usando javascript, de la siguiente manera:
((JavaScriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", element);
y luego getText()
debe devolver el valor correcto.
Detalles sobre el isDisplayed()
El método se puede encontrar en esta pregunta SO:
¿Cómo funciona el método isDisplayed() de Selenium WebDriver?
¡WebElement.getAttribute(“value”) debería ayudarte!
Esta no es una solución, por lo que no sé si pertenece a una respuesta, pero es demasiado larga para un comentario e incluye enlaces, por lo que la estoy respondiendo.
He tenido este problema también. Después de investigar un poco, parece que el problema surge al tratar de obtener el texto de un elemento que no está visible en la pantalla (como comenta @Faiz arriba). Esto puede suceder si el elemento no se desplaza o si desplácese hacia abajo y el elemento estará cerca de la parte superior del documento y ya no será visible después del desplazamiento. Veo que tiene una llamada a FindElements() que obtiene una lista de elementos. Al menos algunos probablemente no sean visibles; puedes comprobar esto intentando boolean b = webElement.isDisplayed();
en cada elemento de la lista y comprobar el resultado. (Vea aquí una discusión muy larga de este problema que tiene un año y aún no se ha resuelto).
Aparentemente, esta es una decisión de diseño deliberada (ver aquí); Se supone que gettext en elementos invisibles regresa vacío. Por qué son tan firmes en esto, no lo sé. Se han sugerido varias soluciones, incluido hacer clic en el elemento antes de obtener su texto o desplazarse hasta él. (Consulte el enlace anterior para obtener un código de ejemplo para este último). No puedo responder por estos porque no los he probado, pero solo están tratando de hacer visible el elemento para que el texto esté disponible. No estoy seguro de cuán práctico es eso para su aplicación; no era para el mio Por alguna razón, FirefoxDriver no tiene este problema, así que eso es lo que uso.
Lo siento, no puedo darle una mejor respuesta; tal vez si envía un informe de error en la página de problemas, verán que muchas personas consideran que se trata de un error en lugar de una característica y cambiarán la funcionalidad.
¡Buena suerte! bsg
EDITAR
Vea esta pregunta para una posible solución. No podrá usarlo exactamente como se indica si isDisplayed regresa truepero si sabe qué elemento está causando el problema, o si el texto normalmente no está en blanco y puede establecer un ‘si string está vacío ‘para atraparlo cuando suceda, aún puede intentarlo. No funciona para todos, por desgracia.
NUEVA ACTUALIZACIÓN
Acabo de probar la respuesta dada a continuación y funcionó para mí. Así que gracias, Faiz!