¿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);
}