Selenide Framework for testing automation (segunda parte).

Home » Selenide Framework for testing automation (segunda parte).

Introducción  recordando el post anterior

http://itech.folderit.net/1232/selenide-framework-for-testing-automation/

En la publicación anterior “Selenide Framework for testing automation” se realizó una presentación sobre la librería Selenide y los beneficios que posee por sobre la de Selenium para la realización de tests automatizados. En esta publicación se presentan algunos de los métodos y funcionalidades agregadas que van más allá de las que posee Selenium.

Selenide Profiler Performance report

Mediante anotaciones, Selenide ofrece la posibilidad de generar un reporte, al finalizar cada test, que nos muestra los comandos ejecutados y su tiempo de respuesta. Este tipo de informes es muy útil al momento de evaluar la performance y se mostrará como un output en la consola con este formato:

 

Para habilitar dicho reporte, a partir de la versión 3.6,  debemos agregar a las clases que contienen los tests las siguientes anotaciones:

@Listeners(TextReport.class)
@Report
public class ConferenceDetailTest {
}

El método “Filter”:

Uno de los métodos más útiles que podemos encontrar en esta librería, ya que nos permite filtrar una lista de elementos obtenidos con el método “$$”, basado en diferentes condiciones que podemos pasar como parámetro.

Veamos un ejemplo práctico:

Un problema muy común que podemos encontrarnos a la hora de de programar nuestros tests es la imposibilidad de identificar unívocamente un elemento, en el siguiente caso queremos presionar un botón de “Apply” pero la búsqueda nos devuelve 3, solamente queremos presionar el botón que está actualmente visible.

Con Selenium resolvemos el caso de la siguiente manera utilizando el lenguaje JAVA:

public void clickApplyButton(){
        List<WebElement> listOfElements = driver.findElements(By.cssSelector(".ranges .applyBtn"));
        listOfElements.stream().filter(element -> element.isDisplayed()).forEach(WebElement::click);
}

 

Guardaremos en una lista todos los elementos que coincidan con ese selector y luego recorremos la lista preguntando cual de ellos está visible. Una vez encontrado hacemos un click.

El siguiente reporte de performance nos muestra que las acciones del método “clickApplyButton” se ejecutaron en 124+188 ms = 312 ms

Con Selenide utilizaremos el método filter para resolver el mismo caso:

public void clickApplyButton(){
        $$(By.cssSelector(".ranges .applyBtn")).filter(Condition.visible).get(0).click();
    }

En este caso la condición que pasaremos como parámetro será la de visibilidad. El resultado del siguiente reporte de performance nos muestra que el método “clickApplyButton” se ejecutó en un total de 84 ms.

El método Filter no solamente simplifica la redacción del código sino que también mejora la performance.

En el ejemplo práctico anterior la condición utilizada para el filtro fue la de visibilidad, pero existen otras que pueden ser de mucha utilidad:

Condition.hasText(String text) y Condition.exactText (String text): permiten filtrar la lista según el texto que posean los elementos o sus hijos.

Condition.attribute(String attributeName, String expectedAttributeValue): permite filtrar la lista según el valor de un atributo.

 

Métodos útiles

Existen otros métodos agregados que no se encuentran presentes en Selenium y que son útiles a la hora de desarrollar el flujo de los tests.

scrollTo: Permite  desplazar la pantalla hasta centrarla en el elemento que se provee por parámetro, especialmente útil si se quiere tomar una screenshot.

getSelectedText: Retorna el texto que se encuentra seleccionado de  un SelenideElement específico.

doubleclick: Realiza doble click sobre un SelenideElement

contextclick: Realiza click derecho sobre un SelenideElement

hover: Posiciona el puntero del mouse encima del SelenideElement

dragAndDrop: arrastra el elemento hacia otro elemento que se provee como parámetro.

zoom: realiza zoom sobre la página visible simulando la acción zoom de un usuario real.

 

Refactorización gradual debido a poder interoperar junto a Selenium

El pasaje de Selenium a Selenide para el desarrollo de los tests puede hacerse gradualmente, ya que Selenide está completamente basado en Selenium. Esta es una gran ventaja ya que es posible que ambas librerías trabajen sobre la misma instancia de Webdriver permitiéndonos incluso utilizar métodos de ambas dentro de los mismos tests.

Agregando la siguiente línea al método comúnmente llamado “setUp” (utilizado para crear la instancia de Webdriver) le permitiremos a Selenide interactuar con el browser inicializado por Selenium.

WebDriverRunner.setWebDriver(driver.getWebDriver()); //Selenide is going to use the selenium webdriver

 

Este es el sitio oficial http://selenide.org/, donde se puede encontrar la documentación como así también un foro y toda la información  necesaria.

By | 2017-07-26T13:03:03-03:00 August 26th, 2016|Categories: General|0 Comments

About the Author:

Leave A Comment