Class TestDescuentoSelenium

java.lang.Object
giis.demo.descuento.it.TestDescuentoSelenium

@SpringBootTest(classes=DescuentoApplication.class, webEnvironment=RANDOM_PORT) @TestPropertySource(locations="classpath:application-test.properties") public class TestDescuentoSelenium extends Object
Pruebas de la interaccion del usuario con la aplicacion web del ejemplo de descuentos a clientes (Problema 3d) utilizando Selenium (https://www.seleniumhq.org/): Ilustra la configuracion para pruebas de integracion con el interfaz web de usuario en Spring Boot y el proceso basico de ejecucion y comparacion de resultados con Selenium.
Las situaciones a cubrir son las mismas que en samples-test-java (giis.demo.descuento.it.assertj).
La configuracion es la siguiente:
SpringBootTest: Al igual que en las pruebas unitarias (TestDescuentoRepository) se reutiliza la configuracion de la aplicacion, pero se anyade la especificacion del entorno (webEnvironment). Esto permite que se ejecute la instancia del servidor tomcat embebido con el que se puede interaccionar. Se especifica RANDOM_PORT para que la prueba no interfiera con otras aplicaciones que puedan estar ejecutandose (por ejemplo en CI).
TestPropertySource: Igual que en las pruebas unitarias (TestDescuentoReposotory) Especifica un fichero de configuracion diferente (localizado en src/test/resources), en este caso solo se omite la carga de datos inicial de data.sql para que se arranque con una base de datos limpia (esto se podria hacer utilizando un profile diferente con su propia configuracion)
RunWith: Se ha de especificar el runner especifico para Spring Booth (si no, las anotaciones son ignoradas)
Notar que no se especifica DataJpaTest pues interfiere con la configuracion especificada de webEnvironment y falla al intentar lanzar el servidor. Si se indica ServletWebServerFactoryAutoConfiguration.class en las clasess de SpringBootTest El servidor se configura pero incorrectamente sin mapear los endpoints (posible bug?)
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private DataSource
     
    (package private) org.openqa.selenium.WebDriver
     
    (package private) int
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    private void
    doStep(boolean initialStep, String edad, String expected)
    La ejecucion de un paso ilustra el uso de las acciones basicas de selenium (findElement, click, sendKeys) y otras utilidades (obtener el contenido de una tabla, tomar imagenes)
    void
    Datos de prueba que se cargaran en el setup para cubrir las situaciones del disenyo de la prueba.
    private void
    Inicializa el WebDriver para el navegador indicado y navega a la pagina principal.
    void
     
    void
     
    void
    Escenario de prueba de la pantalla: Cuatro pasos cambiando el filtro por edad, comprobando en cada uno el valor de la tabla de descuentos.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • datasource

      @Autowired private DataSource datasource
    • port

      @LocalServerPort int port
    • driver

      org.openqa.selenium.WebDriver driver
  • Constructor Details

    • TestDescuentoSelenium

      public TestDescuentoSelenium()
  • Method Details

    • setUp

      public void setUp()
    • tearDown

      public void tearDown()
    • loadMainPage

      private void loadMainPage()
      Inicializa el WebDriver para el navegador indicado y navega a la pagina principal. Inserta sleeps tras cada accion para que se pueda ver la secuencia de pasos en los videos
    • loadCleanDatabase

      public void loadCleanDatabase()
      Datos de prueba que se cargaran en el setup para cubrir las situaciones del disenyo de la prueba. Notar que no se eliminan los datos antes de ejecutar porque el runner establece una transaccion y hace rollback al finalizar el test case, asegurando siempre base de datos limpia.
    • testDescuentoScenario

      public void testDescuentoScenario()
      Escenario de prueba de la pantalla: Cuatro pasos cambiando el filtro por edad, comprobando en cada uno el valor de la tabla de descuentos. Como los pasos son similares, encapsula el proceso de ejecucion y comparacion de resultados en un metodo especifico, eliminando codigo duplicado.
    • doStep

      private void doStep(boolean initialStep, String edad, String expected)
      La ejecucion de un paso ilustra el uso de las acciones basicas de selenium (findElement, click, sendKeys) y otras utilidades (obtener el contenido de una tabla, tomar imagenes)