Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ref/pn 11378 #176

Draft
wants to merge 10 commits into
base: develop
Choose a base branch
from
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ Lista:
- `logFileName`: nome del file di log. Esempio: `-DlogFileName=nomeFile`
- `cookie.config`: se `true` inietta i cookie ad ogni scenario senza la comparsa del banner OneTrust. Valori
possibili: `true`, `false`
- `loadComponentWaitTime`: valore numerico che stabilisce i secondi di attesa per il caricamento di un componente web

## Altro

Expand Down
8 changes: 6 additions & 2 deletions src/main/java/it/pn/frontend/e2e/common/BasePage.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
import java.util.List;
import java.util.concurrent.TimeUnit;


public class BasePage {
protected WebDriver driver;

protected int loadComponentWaitTime = Integer.parseInt(System.getProperty("loadComponentWaitTime"));

private static final int waitLoadComponentTime = Integer.parseInt(System.getProperty("waitLoadComponentTime"));
private static final Logger loggerBase = LoggerFactory.getLogger("BasePage");

public BasePage(WebDriver driver) {
Expand Down Expand Up @@ -60,6 +60,10 @@ protected WebDriverWait getWebDriverWait(long timeout) {
return new WebDriverWait(this.driver, Duration.ofSeconds(timeout), Duration.ofMillis(500));
}

protected WebDriverWait getWebDriverWait() {
return new WebDriverWait(this.driver, Duration.ofSeconds(waitLoadComponentTime), Duration.ofMillis(500));
}

protected WebElement element(By by) {
return this.driver.findElement(by);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ public void clickOpzioneRevoca() {
public void clickMenuPerRifiuto(String nome, String cognome) {
try {
By menuDelegheBy = By.xpath("//table[@id='notifications-table']//td[div/p[contains(text(),'" + nome + " " + cognome + "')]]/following-sibling::td//button[@data-testid='delegationMenuIcon']");
getWebDriverWait(this.loadComponentWaitTime).until(ExpectedConditions.visibilityOfElementLocated(menuDelegheBy));
getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(menuDelegheBy));
EmanueleBonofiglio marked this conversation as resolved.
Show resolved Hide resolved
logger.info("Si clicca correttamente il menu della delega");
this.element(menuDelegheBy).click();
} catch (TimeoutException e) {
Expand Down Expand Up @@ -233,16 +233,17 @@ public void checkModaleMostraCodice() {

getWebDriverWait(10).withMessage("Non si trova il titolo").until(ExpectedConditions.visibilityOfElementLocated(titoloModale));
getWebDriverWait(10).withMessage("Non si trova il sottotitolo").until(ExpectedConditions.visibilityOfElementLocated(sottotitoloModale));
while(i>=0){
getWebDriverWait(10).withMessage("Non si trova codice verifica").until(ExpectedConditions.visibilityOfElementLocated(By.id("code-input-"+i)));
while (i >= 0) {
getWebDriverWait(10).withMessage("Non si trova codice verifica").until(ExpectedConditions.visibilityOfElementLocated(By.id("code-input-" + i)));
i--;
}
}catch (TimeoutException e ){
} catch (TimeoutException e) {
logger.error("modale mostra codice non caricata con errore: " + e.getMessage());
Assert.fail("modale mostra codice non caricata con errore: " + e.getMessage());
}
}
public void clickAnnullaRevoca(){

public void clickAnnullaRevoca() {
getWebDriverWait(10).withMessage("bottone annulla delega non trovato").until(ExpectedConditions.visibilityOf(annullaButton));
logger.info("click sul pulsante annulla revoca");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ public NotifichePFPage(WebDriver driver) {

public void waitLoadNotificheDEPage() {
try {
this.getWebDriverWait(10).withMessage("Il titolo della pagina Notifiche non è visibile").until(ExpectedConditions.visibilityOf(titleLabel));
this.getWebDriverWait(10).withMessage("La tabella delle Notifiche non è visibile").until(ExpectedConditions.visibilityOf(tableNotifiche));
getWebDriverWait(10).withMessage("Il titolo della pagina Notifiche non è visibile").until(ExpectedConditions.visibilityOf(titleLabel));
getWebDriverWait(10).withMessage("La tabella delle Notifiche non è visibile").until(ExpectedConditions.visibilityOf(tableNotifiche));
logger.info("Notifiche DE Page caricata");
} catch (TimeoutException e) {
logger.error("Notifiche DE Page non caricata con errore : " + e.getMessage());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ public void waitLoadPiattaformaNotificaPage(String ragioneSociale) {
By codiceIunTextFieldBy = By.id("iunMatch");
By dataInizioFieldBy = By.id("startDate");
By dataFineFieldBy = By.id("endDate");
this.getWebDriverWait(this.loadComponentWaitTime).withMessage("Il titolo della pagina Notifiche PG non è visibile").until(ExpectedConditions.visibilityOfElementLocated(titlePageBy));
this.getWebDriverWait(40).withMessage("Il campo codice iun della pagina Notifiche PG non è cliccabile").until(ExpectedConditions.elementToBeClickable(codiceIunTextFieldBy));
this.getWebDriverWait(40).withMessage("Il campo data inizio della pagina Notifiche PG non è cliccabile").until(ExpectedConditions.elementToBeClickable(dataInizioFieldBy));
this.getWebDriverWait(40).withMessage("Il campo data fine della pagina Notifiche PG non è cliccabile").until(ExpectedConditions.elementToBeClickable(dataFineFieldBy));
getWebDriverWait(10).withMessage("Il titolo della pagina Notifiche PG non è visibile").until(ExpectedConditions.visibilityOfElementLocated(titlePageBy));
EmanueleBonofiglio marked this conversation as resolved.
Show resolved Hide resolved
getWebDriverWait(10).withMessage("Il campo codice iun della pagina Notifiche PG non è cliccabile").until(ExpectedConditions.elementToBeClickable(codiceIunTextFieldBy));
EmanueleBonofiglio marked this conversation as resolved.
Show resolved Hide resolved
getWebDriverWait(10).withMessage("Il campo data inizio della pagina Notifiche PG non è cliccabile").until(ExpectedConditions.elementToBeClickable(dataInizioFieldBy));
EmanueleBonofiglio marked this conversation as resolved.
Show resolved Hide resolved
getWebDriverWait(10).withMessage("Il campo data fine della pagina Notifiche PG non è cliccabile").until(ExpectedConditions.elementToBeClickable(dataFineFieldBy));

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

usare waitLoadComponentTime

Copy link
Contributor Author

@leleOFA leleOFA May 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

il metodo waitLoadComponentTime é utilizzato in basePage, é contenuto appunto in questo getWebDriverWait

image

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in questo caso (se ho ben capito) è inutile passare il parametro long timeout al metodo dato che quest'ultimo sarà sovrascritto, preferirei quindi un metodo senza parametri

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in questo caso ci serve, perché potremmo aver bisogno di un tempo maggiore per caricare un componente, in particolare su aws

logger.info("La pagina Piattaforma Notifiche si carica correttamente");
} catch (TimeoutException e) {
logger.error("La pagina Piattaforma Notifiche non si carica correttamente con errore: " + e.getMessage());
Expand Down Expand Up @@ -119,7 +119,6 @@ public void clickRecapitiButton() {
}



public void clickIndietroButton() {
getWebDriverWait(10).withMessage("Il bottone indietro non è visibile").until(ExpectedConditions.visibilityOf(indietroButton));
this.js().executeScript("arguments[0].click()", this.indietroButton);
Expand All @@ -133,6 +132,7 @@ public boolean sezionePagamentoDisplayed() {
return false;
}
}

public boolean messaggioNotificaAnnullataDisplayed() {
try {
return getWebDriverWait(5).withMessage("Il messaggio notifica annullata non è visibile").until(ExpectedConditions.visibilityOf(notificaAnnullata)).isDisplayed();
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/it/pn/frontend/e2e/utility/FactoryProperties.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package it.pn.frontend.e2e.utility;

import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Setter
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public class FactoryProperties {
private final String codiceFiscaleCesare = System.getProperty("codice.fiscale.cesare");
private final String codiceFiscaleLucrezia = System.getProperty("codice.fiscale.lucrezia");
private final String urlLoginPF = System.getProperty("url.login.pf");
private final String urlLoginPG = System.getProperty("url.login.pg");
private final String urlLoginPA = System.getProperty("url.login.pa");


private final String tokenCesare = System.getProperty("token.login.pf.cesare");
private final String tokenLucrezia = System.getProperty("token.login.pf.lucrezia");

private final String tokenConvivio = System.getProperty("token.login.pg.convivio");
private final String tokenEpistolae = System.getProperty("token.login.pg.epistolae");
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
monochrome = true
)
public class RunCucumberTest {
private static final String TEST_CONFIG_FILE = "test-config.properties";
private static final String TEST_CONFIG_FILE = "properties/test-config.properties";
private static final Properties properties = new Properties();
private static final Logger logger = LoggerFactory.getLogger("RunCucumberTest");
private static String testSuite;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@
import it.pn.frontend.e2e.section.destinatario.personaFisica.HeaderPFSection;
import it.pn.frontend.e2e.utility.CookieConfig;
import it.pn.frontend.e2e.utility.DataPopulation;
import it.pn.frontend.e2e.utility.FactoryProperties;
import it.pn.frontend.e2e.utility.WebTool;
import org.junit.Assert;
import org.openqa.selenium.WebDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -49,11 +49,12 @@ public void loginPageDestinatarioVieneVisualizzata(String datipersonaFisica) {
Assert.fail("Non stato possibile trovare l'ambiente inserito, Inserisci in -Denvironment test o dev o uat");
}
}
@Given("Login Page persona fisica test viene visualizzata")
public void loginPageDestinatarioVieneVisualizzataConUrl() {

String url = "https://cittadini.test.notifichedigitali.it/";
this.driver.get(url);
@Given("Login Page persona fisica test viene visualizzata")
public void loginPageDestinatarioVieneVisualizzataConUrl() {

String url = "https://cittadini.test.notifichedigitali.it/";
this.driver.get(url);
}

@Given("PF - Si effettua la login tramite token exchange come {string}, e viene visualizzata la dashboard")
Expand Down Expand Up @@ -89,6 +90,31 @@ public void loginMittenteConTokenExchange(String personaFisica) {
notifichePFPage.waitLoadNotificheDEPage();
}

@Given("PF - Si effettua la login tramite token exchange come {string}, e viene visualizzata la dashboard")
public void loginMittenteConToken(String personaFisica) {
FactoryProperties factoryProperties = new FactoryProperties();
String urlLoginPF = factoryProperties.getUrlLoginPF();
String tokenCesare = factoryProperties.getTokenCesare();
String tokenLucrezia = factoryProperties.getTokenLucrezia();
String urlLogin = "";
if (personaFisica.equalsIgnoreCase("lucrezia")) {
urlLogin = urlLoginPF + tokenLucrezia;
} else {
urlLogin = urlLoginPF + tokenCesare;
}

// Si effettua il login con token exchange
driver.get(urlLogin);
logger.info("Login effettuato con successo");
WebTool.waitTime(10);

// Si visualizza la dashboard e si verifica che gli elementi base siano presenti (header e title della pagina)
HeaderPFSection headerPFSection = new HeaderPFSection(this.driver);
headerPFSection.waitLoadHeaderDESection();
NotifichePFPage notifichePFPage = new NotifichePFPage(this.driver);
notifichePFPage.waitLoadNotificheDEPage();
}

@Given("PF - Si effettua la login tramite token exchange con utente {string} e viene visualizzata la dashboard")
public void loginMittenteConTokenExchangeEUtente(String utente) {
DataPopulation dataPopulation = new DataPopulation();
Expand All @@ -99,8 +125,8 @@ public void loginMittenteConTokenExchangeEUtente(String utente) {
//ToDo add token for dev
}
case "test" -> {
if(utente.equalsIgnoreCase("Cristoforo Colombo")) {
token = dataPopulation.readDataPopulation(FILE_TOKEN_LOGIN).get("tokentestPFColombo").toString();
if (utente.equalsIgnoreCase("Cristoforo Colombo")) {
token = dataPopulation.readDataPopulation(FILE_TOKEN_LOGIN).get("tokentestPFColombo").toString();
}
}
default -> {
Expand Down Expand Up @@ -192,8 +218,9 @@ public void loginConDestinatario(String datipersonaFisica) {
confermaDatiSpidPFPage.selezionaConfermaButton();
headerPFSection.waitUrlToken();
}

@When("Login con persona fisica")
public void loginConDestinatario(Map<String,String> datiPF) {
public void loginConDestinatario(Map<String, String> datiPF) {
logger.info("user persona fisica : " + datiPF.get("user"));
logger.info("cookies start");
CookiesSection cookiesPage;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
Feature:Controllo dati notifica annullata

@TestSuite

@ControlloNotificaAnnullata
Scenario:[NOTIFICA-ANNULLATA] Verifica caratteristiche notifica annullata
Given PF - Si effettua la login tramite token exchange come "delegante", e viene visualizzata la dashboard
And Nella pagina Piattaforma Notifiche di PF si visualizzano correttamente i filtri di ricerca
And Nella pagina Piattaforma Notifiche PF si filtra per codice IUN "DETN-WPNP-EPNJ-202405-D-1"
And Cliccare sul bottone Filtra persona fisica
And Nella pagina Piattaforma Notifiche persona fisica vengo restituite tutte le notifiche con il codice IUN "DETN-WPNP-EPNJ-202405-D-1"
And Cliccare sulla notifica restituita
Then Si visualizza correttamente la section Dettaglio Notifica annullata persona fisica
And Logout da portale persona fisica
Given PF - Si effettua la login tramite token exchange come "delegante", e viene visualizzata la dashboard
And Nella pagina Piattaforma Notifiche di PF si visualizzano correttamente i filtri di ricerca
And Nella pagina Piattaforma Notifiche PF si filtra per codice IUN "DETN-WPNP-EPNJ-202405-D-1"
And Cliccare sul bottone Filtra persona fisica
And Nella pagina Piattaforma Notifiche persona fisica vengo restituite tutte le notifiche con il codice IUN "DETN-WPNP-EPNJ-202405-D-1"
And Cliccare sulla notifica restituita
Then Si visualizza correttamente la section Dettaglio Notifica annullata persona fisica
And Logout da portale persona fisica
Loading