Java tutorial
/* * 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); } } }