Extraer el texto de un control oculto (hidden)

Buenas lectores.

En ocasiones necesitamos traer el texto de un elemento que se encuentra oculto al usuario, esto por facilidad en algunas operaciones o simplemente el desarrollador almacena algun identificador o valor que vamos a necesitar mas adelante. En estos escenarios que son "atipicos" tambien necesitamos soluciones de las mismas características puesto que al ser un elemento invisible no podemos interactuar con el con un simple getText.


Para esto la solución es sencilla, recurrimos a nuestra siempre confiable (la vieja confiable) javascript. Vamos a traernos el atributo del texto:


Si usamos screenplay:


WebElementFacade element = target.resolveFor(actor);

String value = BrowseTheWeb.as(actor).evaluateJavascript("return arguments[0].innerText;", element).toString().trim();


Si estamos usando POM 

@FindBy(id="color")

WebElementFacade colorDropdown;

String value = colorDropdown.getAttribute("innerText")


Si estamos usando Selenium directo

String value = driver.findElement(By.id("color")).getAttribute("innerText");


Si vamos a usar una lista


private static String elementNotVisible(List<WebElementFacade> elements) {

        return elements.stream()

                .findFirst()

                .map(element -> element.getAttribute("textContent"))

                .orElse("");

    }



Fuentes:

https://github.com/serenity-bdd/serenity-core/issues/742

https://github.com/serenity-bdd/serenity-core/blob/main/serenity-screenplay-webdriver/src/main/java/net/serenitybdd/screenplay/questions/TextContent.java

https://serenity-bdd.github.io/docs/screenplay/screenplay_webdriver


Comentarios

Entradas populares de este blog

Tiempo de espera "muerto" explicito en Playwright

Como tener un condicional en Playwright en caso que siga aun presente un elemento

Subir mi proyecto local a Azure repos