¿Cómo puedo crear una prueba 'Web'?

Marcar una prueba como una prueba "web"

Importe el WebDriverConfig.class en su test framework configurar y proporcionar lo siguiente beans: * una lista de WebPageDefinition s que se utilizan para vincular el MessageType está asociado con una página a una URL relativa y un nombre de página * una implementación de BaseWebSteps que satisface su caso de uso

Utilice el @web enabled anotación en los metadatos de su archivo de historia para crear un contexto de controlador web. Esto abrirá un navegador ventana para que su historia se ejecute al asignar una instancia de controlador web del grupo de controladores disponibles. El tamaño del grupo está definido por el web-driver.pool.size propiedad y valores predeterminados a 4.

Escribiendo pruebas

Similar a otros test framework transporta las acciones principales que han sido divididas en pasos genéricos para permitir la acción de Insertar, verificar o recuperar elementos de la pantalla.

Definición de Paso de Navegación y Página Web

La interfaz de usuario contiene una serie de páginas a las que se puede navegar utilizando URLs web o mosaicos en la pantalla de inicio. Para hacer que el paso de navegación sea más legible para los humanos, una WebPageDefinition.java debe ser creado con un asociado MessageType

Esto permitirá que el paso se lea como:

When the user navigates to the Recall responses needing approval page on the GUI

En lugar de

When the user navigates to the /#/recalls-needing-response page on the GUI

Haciendo clic en un elemento y predicados

La búsqueda de elementos (y la búsqueda de elementos con acción) sigue el mismo patrón que la búsqueda de mensajes. Un conjunto de predicados se pasa para filtrar la lista de elementos recuperados. A continuación, se debe pasar un consumidor a cualquiera de realice una afirmación o procese el resultado

public void fishForElement(String cssSelector, List<Predicate<WebElement>> discriminators, Consumer<WebElement> action) {

    List<WebElement> allElementsMatchingSelector = findElementsByCss(cssSelector);

    assertFalse("No element matching supplied selector: " + cssSelector, allElementsMatchingSelector.isEmpty());
    Optional<WebElement> result = allElementsMatchingSelector.stream()
            .filter(Predicates.and(discriminators))
            .findFirst();

    assertTrue("No element matching supplied predicates", result.isPresent());

    LOGGER.debug("Found a matching element on the page");
    action.accept(result.get());
}

La primera recuperación de la pantalla se realiza en función de un selector CSS Esto recuperará un conjunto de elementos web que pueden ser filtrados adicionalmente al coincidir con cualquiera de los atributos de los elementos.

Ejemplo de paso:

And the user clicks on mat-panel-description with attribute values:
|innerHTML|Respond with Resolution|

La única acción que actualmente se ha pasado es la función de clic, pero esto puede generalizarse.

Recuperando elementos de la pantalla

Para realizar afirmaciones en pantalla basadas en su HTML, utilice el siguiente paso.

Then the user is able to find the following items on the screen with values:
|.mat-column-recordType       |BB_Resolution                                         |
|.mat-column-transactionId    |#CAMT_029. RsltnOfInvstgtn. CxlDtls. TxInfAndSts. CxlStsId|
|.mat-column-transactionStatus|ACCEPTED                                              |

Esto encontrará los elementos por el selector dado e iterará a través de los resultados para coincidir con el valor proporcionado.

Introduciendo datos en elementos de formulario o entrada

Para ingresar datos en los campos en pantalla, utilice:

1 - Este paso para ingresar datos para un solo elemento

When the user populates the $selector input with value $value

2- En este paso, para poblar múltiples valores a la vez, el orden de entrada no debe ser relevante.

And the user populates the inputs with values:
|$selector1|value1|
|$selector2|value2|

Extensibilidad

Si desea crear su propio custom pasos o páginas crean lo siguiente

Una página que extiende BaseWebPage.java. Esto debe ser pasado a su clase Steps que extiende BaseWebSteps.

Para registrar estos en el test framework añádalos como una lista bean a su configuración de prueba:

Página

@Bean
public List<WebPageDefinition> webPageDefinitions() {
    return asList(
            webPageDefinition(RECALL_NEEDING_RESPONSE, "recalls-notrespondedto"),
            webPageDefinition(TRANSACTION_SEARCH, "transactions/action/search"),
            webPageDefinition(TRANSACTION_DETAILS, "transactions")
    );
}

private WebPageDefinition webPageDefinition(MessageType webPageType, String relativePath) {
    return new WebPageDefinition. WebPageDefinitionBuilder()
            .withMessageType(webPageType)
            .withRelativePath(relativePath)
            .build();
}

Defina sus pasos como un Bean como este

@Bean
public CommonWebSteps commonWebSteps(List<WebPageDefinition> webPageDefinitions, GenericObjectPool<WebDriver> webDriverPool) {
    return new CommonWebSteps(webPageDefinitions, webDriverPool, dashboardUrl);
}