co.edu.uniandes.csw.ClinicaDeProblemas.web.test.ClinicaDeProblemasTest.java Source code

Java tutorial

Introduction

Here is the source code for co.edu.uniandes.csw.ClinicaDeProblemas.web.test.ClinicaDeProblemasTest.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.uniandes.csw.ClinicaDeProblemas.web.test;

import java.util.List;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import org.junit.runner.RunWith;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

/**
 *
 * @author Henry Jaimes
 */
public class ClinicaDeProblemasTest {

    // Es la instancia inicial del web driver que controlar el navegador firefox
    private static WebDriver driver;
    // url en el cual se aloja la pgina web (en este caso localhost:8080)
    private static String baseUrl;
    // variable que indica si varios alert consecutivos (alert javascript) se tomarn
    private static boolean acceptNextAlert = true;
    private static StringBuffer verificationErrors = new StringBuffer();

    /*La anotacin @BeforeClass indica lo que se debe ejecutar ANTES de correr el archivo de pruebas. Este mtodo instancia un nuevo driver firefox (causando la apertura de una ventana fsica de firefox).*/
    @BeforeClass
    public static void setUp() throws Exception {
        driver = new FirefoxDriver();
        // se define el url base del proyecto web
        baseUrl = "http://localhost:8080";
        /* Indica cuanto se espera para la respuesta de cualquier comando realizado hacia el navegador*/
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }
    // La anotacin @AfterClass indica lo que se debe ejecutar DESPUS de ejecutar
    // el archivo de pruebas. Este mtodo cierra la ventana de firefox
    // abierta por @BeforeClass que se utiliz para la prueba.

    @Before
    public void setUpUrl() {
        driver.get(baseUrl + "/ClinicaDeProblemas.web/");
    }

    @Test
    public void testCreateRecurso() throws Exception {

        /**
         * Comando que realiza click sobre el boton "create" del toolbar. La
         * funcin 'find' encuentra el control y posteriormente hace clic en el
         * mismo. La forma en la que se busca el control es utilizando
         * expresiones xPath ya que los id de los mismos nunca son iguales (se
         * generan con junto con el valor de componentId que vara).
         */
        driver.findElement(By.xpath("//button[contains(@id,'button-create')]")).click();

        /**
         * Comando que duerme el Thread del test por 2 segundos para dejar que
         * el efecto 'slide down' de backbone abra el formulario de createSport.
         */
        Thread.sleep(2000);

        /**
         * Comando que busca el elemento 'name' en el html actual.
         * Posteriormente limpia su contenido (comando clean).
         */
        driver.findElement(By.id("name")).clear();
        /**
         * Comando que simula la escritura de un valor en el elemento(sendKeys)
         * con el String de parmetro sobre // el elemento encontrado.
         */
        driver.findElement(By.id("name")).sendKeys("Recurso1");
        driver.findElement(By.id("tema")).clear();
        driver.findElement(By.id("tema")).sendKeys("tema1");
        driver.findElement(By.id("dificultad")).clear();
        driver.findElement(By.id("dificultad")).sendKeys("dificultad1");
        driver.findElement(By.id("tipo")).clear();
        driver.findElement(By.id("tipo")).sendKeys("tipo1");
        driver.findElement(By.id("semestre")).clear();
        driver.findElement(By.id("semestre")).sendKeys("201220");
        driver.findElement(By.id("materia")).clear();
        driver.findElement(By.id("materia")).sendKeys("fisica1");
        driver.findElement(By.id("Url")).clear();
        driver.findElement(By.id("Url")).sendKeys("http://url");

        driver.findElement(By.id("name")).clear();
        driver.findElement(By.id("name")).sendKeys("123123");

        /**
         * Comando que encuentra y hace clic sobre el boton "Save" del toolbar
         * (una vez mas encontrado por una expresin Xpath)
         */
        driver.findElement(By.xpath("//button[contains(@id,'button-save')]")).click();

        /**
         * Comando que duerme el thread para esperar el efecto de slide down que
         * abre la lista
         */
        Thread.sleep(2000);
        /**
         * Comando que obtiene el div azul de creacin exitosa. Si se obtiene,
         * la prueba va bien, si no, saldr un error y la prueba quedar como
         * fllida.
         */
        WebElement dialog = driver.findElement(By.xpath("//div[contains(@style,'display: block;')]"));
        /**
         * Comando que obtiene la tabla con el elemento que se cre
         * anteriormente.
         */
        List<WebElement> table = driver
                .findElements(By.xpath("//table[contains(@class,'table striped')]/tbody/tr"));
        boolean sucess = false;
        /**
         * Se itera sobre los elementos de la tabla para ver si el nuevo
         * elemento creado est en la lista
         */
        for (WebElement webElement : table) {
            List<WebElement> elems = webElement.findElements(By.xpath("td"));

            if (elems.get(0).getText().equals("123123") && elems.get(1).getText().equals("123123")
                    && elems.get(2).getText().equals("123123")) {
                /**
                 * si se encuentra la fila, la variable 'fail' pasa a true,
                 * indicando que el elemento creado esta en la lista.
                 */
                sucess = true;
            }

        }
        /**
         * la prueba es exitosa si se encontr el dialogo de creacin exitosa y
         * el nuevo elemento est en la lista.
         */
        assertTrue(dialog != null && sucess);
    }

    @Test
    public void testCreateUti() throws Exception {

        /**
         * Comando que realiza click sobre el boton "create" del toolbar. La
         * funcin 'find' encuentra el control y posteriormente hace clic en el
         * mismo. La forma en la que se busca el control es utilizando
         * expresiones xPath ya que los id de los mismos nunca son iguales (se
         * generan con junto con el valor de componentId que vara).
         */
        driver.findElement(By.xpath("//button[contains(@id,'button-create')]")).click();

        /**
         * Comando que duerme el Thread del test por 2 segundos para dejar que
         * el efecto 'slide down' de backbone abra el formulario de createSport.
         */
        Thread.sleep(2000);

        /**
         * Comando que busca el elemento 'name' en el html actual.
         * Posteriormente limpia su contenido (comando clean).
         */
        driver.findElement(By.id("name")).clear();
        /**
         * Comando que simula la escritura de un valor en el elemento(sendKeys)
         * con el String de parmetro sobre // el elemento encontrado.
         */
        driver.findElement(By.id("name")).sendKeys("name");
        driver.findElement(By.id("salon")).clear();
        driver.findElement(By.id("salon")).sendKeys("Salon1");
        driver.findElement(By.id("materia")).clear();
        driver.findElement(By.id("materia")).sendKeys("materia1");
        driver.findElement(By.id("informacion")).clear();
        driver.findElement(By.id("informacion")).sendKeys("info1");

        /**
         * Comandos para llenar el campo maxAge
         */
        driver.findElement(By.id("name")).clear();
        driver.findElement(By.id("name")).sendKeys("123123");

        /**
         * Comando que encuentra y hace clic sobre el boton "Save" del toolbar
         * (una vez mas encontrado por una expresin Xpath)
         */
        driver.findElement(By.xpath("//button[contains(@id,'button-save')]")).click();

        /**
         * Comando que duerme el thread para esperar el efecto de slide down que
         * abre la lista
         */
        Thread.sleep(2000);
        /**
         * Comando que obtiene el div azul de creacin exitosa. Si se obtiene,
         * la prueba va bien, si no, saldr un error y la prueba quedar como
         * fllida.
         */
        WebElement dialog = driver.findElement(By.xpath("//div[contains(@style,'display: block;')]"));
        /**
         * Comando que obtiene la tabla con el elemento que se cre
         * anteriormente.
         */
        List<WebElement> table = driver
                .findElements(By.xpath("//table[contains(@class,'table striped')]/tbody/tr"));
        boolean sucess = false;
        /**
         * Se itera sobre los elementos de la tabla para ver si el nuevo
         * elemento creado est en la lista
         */
        for (WebElement webElement : table) {
            List<WebElement> elems = webElement.findElements(By.xpath("td"));

            if (elems.get(0).getText().equals("123123") && elems.get(1).getText().equals("123123")
                    && elems.get(2).getText().equals("123123")) {
                /**
                 * si se encuentra la fila, la variable 'fail' pasa a true,
                 * indicando que el elemento creado esta en la lista.
                 */
                sucess = true;
            }

        }
        /**
         * la prueba es exitosa si se encontr el dialogo de creacin exitosa y
         * el nuevo elemento est en la lista.
         */
        assertTrue(dialog != null && sucess);
    }

    @AfterClass
    public static void tearDown() throws Exception {
        // Se cierra el navegador.
        driver.quit();
        // Se verifica que se haya cerrado efectivamente el navegador.
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
            fail(verificationErrorString);
        }
    }

}