diff --git a/config/configuration.properties b/config/configuration.properties
new file mode 100644
index 000000000..c4611a29e
--- /dev/null
+++ b/config/configuration.properties
@@ -0,0 +1,92 @@
+# test-config.properties
+spring.profiles.active=uat
+
+browser=chrome
+environment=test
+cookie.config=true
+headless=true
+# the folder path must start with / and end with /
+downloadFilePath=src/test/resources/dataPopulation/downloads/
+loadComponentWaitTime=120
+apiBaseUrl=https://webapi.${environment}.notifichedigitali.it/bff/v1/
+
+#----------------------------------------------------------------
+ragione.sociale.baldassarre = Comune di Milano
+#url.login.pg.dev = https://imprese.dev.notifichedigitali.it/
+url.login.pg.test = https://imprese.${environment}.notifichedigitali.it/
+#url.login.pf.dev = https://cittadini.dev.notifichedigitali.it/
+url.login.pf.test = https://cittadini.${environment}.notifichedigitali.it/
+
+url.selfcare = https://uat.selfcare.pagopa.it/
+url.mittente = https://selfcare.${environment}.notifichedigitali.it
+
+codice.iun = YRUZ-NYXJ-DAJK-20240
+codice.iun.n1 = YRUZ-NYXJ-DAJK-202405-N-1
+codice.iun.n2 = YRUZ-NYXJ-DAJK-202405-N-2
+codice.iun.n3 = YRUZ-NYXJ-DAJK-202405-N-3
+
+
+# | --------- | --------- | ---------------- | ------------------- |
+# | TYPE | PLATFORM | ENVIRONMENT | USER |
+# |-----------|-----------|------------------|---------------------|
+# | DELEGANTE | PF | TEST/DEV | GAIO GIULIO CESARE |
+pn.bearer-token.tokentestPFDelegante = ${pn.external.bearer-token.tokentestPFDelegante}
+pn.bearer-token.tokendevPFDelegante = ${pn.external.bearer-token.tokendevPFDelegante}
+# |-----------|-----------|------------------|---------------------|
+# | DELEGATO | PF | TEST/DEV | LUCREZIA BORGIA |
+pn.bearer-token.tokentestPFDelegato = ${pn.external.bearer-token.tokentestPFDelegato}
+pn.bearer-token.tokendevPFDelegato = ${pn.external.bearer-token.tokendevPFDelegato}
+# |-----------|-----------|------------------|---------------------|
+# | DELEGANTE | PG | TEST/DEV | CONVIVIO SPA |
+pn.bearer-token.tokentestPGDelegante = ${pn.external.bearer-token.tokentestPGDelegante}
+pn.bearer-token.tokendevPGDelegante = ${pn.external.bearer-token.tokendevPGDelegante}
+# |-----------|-----------|------------------|---------------------|
+# | DELEGATO | PG | TEST/DEV | LE EPISTOLAE SRL |
+pn.bearer-token.tokentestPGDelegato = ${pn.external.bearer-token.tokentestPGDelegato}
+pn.bearer-token.tokendevPGDelegato = ${pn.external.bearer-token.tokendevPGDelegato}
+# |-----------|-----------|------------------|---------------------|
+# | MITTENTE | PA | TEST/DEV | COMUNE DI VERONA |
+pn.bearer-token.tokentestMittente = ${pn.external.bearer-token.tokentestMittente}
+pn.bearer-token.tokendevMittente = ${pn.external.bearer-token.tokendevMittente}
+# |-----------|-----------|------------------|----------------------|
+# | DELEGANTE | PF | TEST/DEV | Cristoforo Colombo |
+pn.bearer-token.tokentestPFColombo = ${pn.external.bearer-token.tokentestPFColombo}
+# |-----------|-----------|------------------|----------------------|
+# | RADD | 1 | TEST | null |
+pn.bearer-token.tokentestRaddista1 = ${pn.external.bearer-token.tokentestRaddista1}
+# |-----------|-----------|------------------|----------------------|
+
+
+# | --------- | --------- | ---------------- | ------------------- |
+# | TYPE | PLATFORM | ENVIRONMENT | USER |
+# |-----------|-----------|------------------|---------------------|
+# | DELEGANTE | PF | TEST/DEV | GAIO GIULIO CESARE |
+pn.user.cesare = ${pn.external.user.cesare}
+pn.pwd.cesare = ${pn.external.pwd.cesare}
+# |-----------|-----------|------------------|---------------------|
+# | DELEGATO | PF | TEST/DEV | LUCREZIA BORGIA |
+pn.user.lucrezia = ${pn.external.user.lucrezia}
+pn.pwd.lucrezia = ${pn.external.pwd.lucrezia}
+# |-----------|-----------|------------------|---------------------|
+# | DELEGANTE | PG | TEST/DEV | CONVIVIO SPA |
+pn.user.dante = ${pn.external.user.dante}
+pn.pwd.dante = ${pn.external.pwd.dante}
+# |-----------|-----------|------------------|---------------------|
+# | DELEGATO | PG | TEST/DEV | LE EPISTOLAE SRL |
+pn.user.petrarca = ${pn.external.user.petrarca}
+pn.pwd.petrarca = ${pn.external.pwd.petrarca}
+# |-----------|-----------|------------------|---------------------|
+# | MITTENTE | PA | TEST/DEV | COMUNE DI VERONA |
+pn.user.mittente = ${pn.external.user.mittente}
+pn.pwd.mittente = ${pn.external.pwd.mittente}
+# |-----------|-----------|------------------|----------------------|
+
+
+
+# |----------------------| HELPDESK |----------------------|
+pn.userDev.helpdesk = ${pn.external.userDev.helpdesk}
+pn.pwdDev.helpdesk = ${pn.external.pwdDev.helpdesk}
+pn.userUat.helpdesk = ${pn.external.userUat.helpdesk}
+pn.pwdUat.helpdesk = ${pn.external.pwdUat.helpdesk}
+pn.userTest.helpdesk = ${pn.external.userTest.helpdesk}
+pn.pwdTest.helpdesk = ${pn.external.pwdTest.helpdesk}
\ No newline at end of file
diff --git a/pn-frontend-e2e.iml b/pn-frontend-e2e.iml
new file mode 100644
index 000000000..abe781f78
--- /dev/null
+++ b/pn-frontend-e2e.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 08eb10b83..ac6068b95 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,13 +12,44 @@
http://www.example.com
+
UTF-8
17
17
+ 3.3.4
+ 5.9.2
+ 7.8.1
+ 4.22.0
+ 5.9.1
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.vaadin.external.google
+ android-json
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+ org.yaml
+ snakeyaml
+ 1.33
+
@@ -27,57 +58,64 @@
2.17.2
-
- junit
- junit
- 4.13.2
-
-
org.seleniumhq.selenium
selenium-java
- 4.22.0
+ ${selenium.version}
-
-
org.seleniumhq.selenium
selenium-devtools-v126
- 4.22.0
+ ${selenium.version}
+
+
+
+ io.github.bonigarcia
+ webdrivermanager
+ ${webdriver.version}
-
+
io.cucumber
- cucumber-java
- 7.11.1
+ cucumber-junit-platform-engine
+ ${cucumber.version}
+ test
-
-
io.cucumber
- cucumber-junit
- 7.11.1
+ cucumber-java
-
-
io.cucumber
- gherkin
- 26.0.1
+ cucumber-spring
+ ${cucumber.version}
+ test
+
-
+
- io.github.bonigarcia
- webdrivermanager
- 5.9.1
+ org.junit.platform
+ junit-platform-suite
+ test
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+
+
@@ -86,7 +124,6 @@
4.5.14
-
org.apache.commons
@@ -115,7 +152,6 @@
5.2.1
-
org.apache.logging.log4j
log4j-to-slf4j
@@ -126,14 +162,22 @@
ch.qos.logback
logback-classic
- 1.4.12
+ 1.5.6
ch.qos.logback
logback-core
- 1.4.12
+ 1.5.6
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.30
+ provided
@@ -150,12 +194,17 @@
20231013
-
+
- org.projectlombok
- lombok
- 1.18.30
- provided
+ com.google.code.gson
+ gson
+ 2.10.1
+
+
+
+ org.jsoup
+ jsoup
+ 1.15.4
@@ -165,13 +214,6 @@
3.0.0
-
-
- com.google.code.gson
- gson
- 2.10.1
-
-
com.fasterxml.jackson.dataformat
@@ -185,7 +227,6 @@
jackson-databind
2.14.0
-
com.opencsv
@@ -197,17 +238,12 @@
allure-cucumber7-jvm
2.21.0
-
org.apache.pdfbox
pdfbox
2.0.27
-
- org.jsoup
- jsoup
- 1.15.4
-
+
org.apache.maven.plugins
@@ -220,12 +256,60 @@
zip4j
2.11.5
-
+
+
+
+ org.junit
+ junit-bom
+ 5.9.1
+ pom
+ import
+
+
+ io.cucumber
+ cucumber-bom
+ 7.8.1
+ pom
+ import
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring.boot-version}
+ pom
+ import
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring.boot-version}
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.0.0-M5
+
+
+ **/*Test.java
+
+
+
maven-clean-plugin
@@ -244,10 +328,6 @@
17
-
- maven-surefire-plugin
- 2.22.1
-
maven-jar-plugin
3.0.2
@@ -271,15 +351,6 @@
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- 14
-
-
-
+
-
+
\ No newline at end of file
diff --git a/src/main/java/it/pn/frontend/e2e/common/BasePage.java b/src/main/java/it/pn/frontend/e2e/common/BasePage.java
index 59ad9a2d1..656aefb30 100644
--- a/src/main/java/it/pn/frontend/e2e/common/BasePage.java
+++ b/src/main/java/it/pn/frontend/e2e/common/BasePage.java
@@ -1,58 +1,78 @@
package it.pn.frontend.e2e.common;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import org.openqa.selenium.*;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
import java.time.Duration;
import java.util.List;
import java.util.concurrent.TimeUnit;
+/*
+*Modifiche e Ottimizzazioni
+Costruttore con @Autowired: Iniezione di WebDriver tramite Spring Boot.
+loadComponentWaitTime inizializzato tramite System.getProperty: Permette di definire il valore come variabile di ambiente con un valore predefinito di 10.
+Metodo retryClickAndInsertText: Separato in un metodo privato per evitare codice duplicato.
+Commenti migliorati: Documentazione migliorata per una migliore comprensione di alcune funzioni.
+Thread.currentThread().interrupt() in waitLoadPage(): Gestisce correttamente l’interruzione del thread per conformità alle best practices di Java.
+*
+*
+* */
+
+@Component
public class BasePage {
- protected WebDriver driver;
-
- protected int loadComponentWaitTime = Integer.parseInt(System.getProperty("loadComponentWaitTime"));
- private static final Logger loggerBase = LoggerFactory.getLogger("BasePage");
+ protected WebDriver driver;
+ protected int loadComponentWaitTime;
+ private static final Logger loggerBase = LoggerFactory.getLogger(BasePage.class);
+ @Autowired
public BasePage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(this.driver, this);
+ loadComponentWaitTime = Integer.parseInt(System.getProperty("loadComponentWaitTime", "10"));
}
protected void scrollToElementClickAndInsertText(WebElement element, String text) {
try {
if (!element.isDisplayed()) {
- loggerBase.info("scroll elemento");
- this.js().executeScript("arguments[0].scrollIntoView(true);", element);
+ loggerBase.info("Scrolling to element");
+ js().executeScript("arguments[0].scrollIntoView(true);", element);
}
- this.js().executeScript("arguments[0].click()", element);
+ js().executeScript("arguments[0].click()", element);
if (text != null) {
- loggerBase.info("inserimento testo");
+ loggerBase.info("Inserting text");
element.sendKeys(text);
}
} catch (ElementNotInteractableException e) {
- loggerBase.error("elemento non interagibile");
- this.js().executeScript("arguments[0].click()", element);
- if (text != null) {
- element.sendKeys(text);
- }
+ loggerBase.error("Element not interactable", e);
+ retryClickAndInsertText(element, text);
+ }
+ }
+
+ private void retryClickAndInsertText(WebElement element, String text) {
+ js().executeScript("arguments[0].click()", element);
+ if (text != null) {
+ element.sendKeys(text);
}
}
public void scrollToElementAndClick(WebElement element) {
try {
if (!element.isDisplayed()) {
- loggerBase.info("scroll elemento");
- this.js().executeScript("arguments[0].scrollIntoView(true);", element);
+ loggerBase.info("Scrolling to element");
+ js().executeScript("arguments[0].scrollIntoView(true);", element);
}
- this.js().executeScript("arguments[0].click()", element);
+ js().executeScript("arguments[0].click()", element);
} catch (ElementNotInteractableException e) {
- loggerBase.error("elemento non interagibile");
- this.js().executeScript("arguments[0].click()", element);
+ loggerBase.error("elemento non interagibile", e);
+ js().executeScript("arguments[0].click()", element);
}
}
@@ -61,11 +81,11 @@ protected WebDriverWait getWebDriverWait(long timeout) {
}
protected WebElement element(By by) {
- return this.driver.findElement(by);
+ return driver.findElement(by);
}
protected List elements(By by) {
- return this.driver.findElements(by);
+ return driver.findElements(by);
}
protected JavascriptExecutor js() {
@@ -76,33 +96,33 @@ public void waitLoadPage() {
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
- throw new RuntimeException(e);
+ Thread.currentThread().interrupt();
+ throw new RuntimeException("Interrupted while waiting for page load", e);
}
}
public void vaiInFondoAllaPagina() {
- this.js().executeScript("window.scrollBy(0,document.body.scrollHeight)");
+ js().executeScript("window.scrollBy(0,document.body.scrollHeight)");
}
public void aggiornamentoPagina() {
- this.driver.navigate().refresh();
+ driver.navigate().refresh();
}
public void waitLoadingSpinner() {
- By loadingSpinnerBy = By.xpath("//span[@role = 'loadingSpinner']");
- getWebDriverWait(60).withMessage("la pagina è ancora in caricamento").until(ExpectedConditions.invisibilityOfElementLocated(loadingSpinnerBy));
+ By loadingSpinnerBy = By.xpath("//span[@role='loadingSpinner']");
+ getWebDriverWait(60).withMessage("Page is still loading").until(ExpectedConditions.invisibilityOfElementLocated(loadingSpinnerBy));
}
public void goBack() {
- this.driver.navigate().back();
+ driver.navigate().back();
}
/**
- * Clear the text field of a WebElement
- * Note: this method replace clear() because
- * it does not work with React-controlled inputs
+ * Clears text from a WebElement, compatible with React-controlled inputs.
+ * Replaces the default clear() method for better compatibility.
*
- * @param element WebElement to clear the text field
+ * @param element WebElement to clear
*/
public void clearWebElementField(WebElement element) {
while (!element.getAttribute("value").isEmpty()) {
@@ -110,8 +130,7 @@ public void clearWebElementField(WebElement element) {
}
}
- public boolean checkURL(String url){
+ public boolean checkURL(String url) {
return driver.getCurrentUrl().contains(url);
}
-
-}
\ No newline at end of file
+}
diff --git a/src/main/java/it/pn/frontend/e2e/common/DettaglioNotificaSection.java b/src/main/java/it/pn/frontend/e2e/common/DettaglioNotificaSection.java
index d90046ed4..760537238 100644
--- a/src/main/java/it/pn/frontend/e2e/common/DettaglioNotificaSection.java
+++ b/src/main/java/it/pn/frontend/e2e/common/DettaglioNotificaSection.java
@@ -1,11 +1,7 @@
package it.pn.frontend.e2e.common;
-import io.cucumber.java.en.And;
-import io.cucumber.java.en.Then;
-import it.pn.frontend.e2e.section.mittente.DettaglioNotificaMittenteSection;
-import it.pn.frontend.e2e.utility.NotificationBuilder;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -14,11 +10,17 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import static org.openqa.selenium.support.ui.ExpectedConditions.elementToBeClickable;
+
+@Component
public class DettaglioNotificaSection extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("DettaglioNotificaSection");
@@ -40,6 +42,11 @@ public class DettaglioNotificaSection extends BasePage {
@FindBy(id = "breadcrumb-indietro-button")
WebElement indietroButton;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
+ @Autowired
public DettaglioNotificaSection(WebDriver driver) {
super(driver);
}
@@ -67,7 +74,7 @@ public void waitLoadDettaglioNotificaDESection() {
}
public void clickLinkAttestazioniOpponibile(int numeroLinkAttestazioniOpponibile) {
- WebTool.waitTime(2);
+ webTool.waitTime(2);
attestazioniFile = driver.findElements(By.xpath("//button[contains(text(),'Attestazione opponibile a terzi: notifica presa in carico')]"));
if (attestazioniFile.get(numeroLinkAttestazioniOpponibile).isDisplayed()) {
attestazioniFile.get(numeroLinkAttestazioniOpponibile).click();
@@ -76,6 +83,14 @@ public void clickLinkAttestazioniOpponibile(int numeroLinkAttestazioniOpponibile
}
}
+ public void toBeClickableLinkAttestazioniOpponibile(int numeroLinkAttestazioniOpponibile) {
+ webTool.waitTime(2);
+ attestazioniFile = driver.findElements(By.xpath("//button[contains(text(),'Attestazione opponibile a terzi: notifica presa in carico')]"));
+ if (attestazioniFile.get(numeroLinkAttestazioniOpponibile).isDisplayed()) {
+ getWebDriverWait(10).withMessage("Il link non è cliccabile").until(elementToBeClickable(attestazioniFile.get(numeroLinkAttestazioniOpponibile)));
+ }
+ }
+
public void clickLinkDocumentiAllegati(int numeroLinkDocumentiAllegati) {
if (documentiAllegati.get(numeroLinkDocumentiAllegati).isDisplayed()) {
documentiAllegati.get(numeroLinkDocumentiAllegati).click();
@@ -98,7 +113,7 @@ public void selezioneVediDettaglioButton() {
logger.info("Tutti gli stati sono stati visualizzati correttamente");
} else {
logger.error("Tutti i stati non sono stati visualizzati correttamente");
- Assert.fail("Tutti i stati non sono stati visualizzati correttamente");
+ Assertions.fail("Tutti i stati non sono stati visualizzati correttamente");
}
}
@@ -159,7 +174,7 @@ public void selezioneAvvisoPagoPa() {
logger.info("check su avviso pagopa avvenuto con successo");
} catch (TimeoutException e) {
logger.error("check su avviso pagopa non avvenuto con successo: " + e.getMessage());
- Assert.fail("check su avviso pagopa non avvenuto con successo: " + e.getMessage());
+ Assertions.fail("check su avviso pagopa non avvenuto con successo: " + e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/common/HelpdeskPage.java b/src/main/java/it/pn/frontend/e2e/common/HelpdeskPage.java
index 60aa0e832..ffe459cf7 100644
--- a/src/main/java/it/pn/frontend/e2e/common/HelpdeskPage.java
+++ b/src/main/java/it/pn/frontend/e2e/common/HelpdeskPage.java
@@ -1,10 +1,11 @@
package it.pn.frontend.e2e.common;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import it.pn.frontend.e2e.model.enums.Disservice;
import it.pn.frontend.e2e.model.enums.Status;
import it.pn.frontend.e2e.utility.WebTool;
import org.apache.commons.io.FileUtils;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -30,8 +31,11 @@
import java.util.stream.Stream;
import net.lingala.zip4j.ZipFile;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
-
+@Component
public class HelpdeskPage extends BasePage {
private final Logger logger = LoggerFactory.getLogger("Helpdesk Page");
@@ -73,6 +77,13 @@ public class HelpdeskPage extends BasePage {
private String zipPassword;
private String codiceIdentificativoPF;
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
+ @Autowired
public HelpdeskPage(WebDriver driver) {
super(driver);
}
@@ -97,7 +108,7 @@ public void checkForm() {
this.getWebDriverWait(40).withMessage("submit non presente").until(ExpectedConditions.visibilityOf(this.loginButton));
} catch (TimeoutException e) {
logger.error("Form non presente errore: " + e.getMessage());
- Assert.fail("Form non presente errore: " + e.getMessage());
+ Assertions.fail("Form non presente errore: " + e.getMessage());
}
}
@@ -107,14 +118,14 @@ public void checkHome() {
logger.info("pagina home carica");
} catch (TimeoutException e) {
logger.error("errore caricamento home helpdesk: " + e.getMessage());
- Assert.fail("errore caricamento home helpdesk: " + e.getMessage());
+ Assertions.fail("errore caricamento home helpdesk: " + e.getMessage());
}
}
public void waitLoadServiceTable() {
if (services.size() < 3) {
logger.error("I servizi visualizzati sono meno di 3");
- Assert.fail("I servizi visualizzati sono meno di 3");
+ Assertions.fail("I servizi visualizzati sono meno di 3");
}
getWebDriverWait(10).withMessage("Non è visibile la tabella dei disservizi").until(ExpectedConditions.visibilityOfAllElements(services));
}
@@ -141,7 +152,7 @@ public void clickMonitoraggio() {
this.monitoraggioPN.click();
} catch (TimeoutException e) {
logger.error("Card monitoraggio non cliccabile: " + e.getMessage());
- Assert.fail("Card monitoraggio non cliccabile: " + e.getMessage());
+ Assertions.fail("Card monitoraggio non cliccabile: " + e.getMessage());
}
}
@@ -159,7 +170,7 @@ public void handleDisservizio(Disservice disservizio, Status status) {
WebElement tooltip = this.element(By.xpath(".//div[@role='tooltip']"));
if (!tooltip.isDisplayed()) {
logger.error("Non è stato possibile visualizzare il tooltip per il disservizio");
- Assert.fail("Non è stato possibile visualizzare il tooltip per il disservizio");
+ Assertions.fail("Non è stato possibile visualizzare il tooltip per il disservizio");
}
WebElement button = tooltip.findElement(By.id(status.getValue() + "-insert"));
getWebDriverWait(10).withMessage("Il pulsante: " + status.getValue() + " non è visibile o cliccabile").until(ExpectedConditions.and(
@@ -202,7 +213,7 @@ public boolean checkIsCreatedDisservizio() {
return false;
} catch (TimeoutException e) {
logger.error("disservizio non creato: " + e.getMessage());
- Assert.fail("disservizio non creato: " + e.getMessage());
+ Assertions.fail("disservizio non creato: " + e.getMessage());
return false;
}
}
@@ -215,7 +226,7 @@ public void clickSezioneRicerca() {
this.elements(ricercaButton).get(0).click();
} catch (TimeoutException e) {
logger.error("Card ricerca non cliccabile: " + e.getMessage());
- Assert.fail("Card ricerca non cliccabile: " + e.getMessage());
+ Assertions.fail("Card ricerca non cliccabile: " + e.getMessage());
}
}
@@ -230,7 +241,7 @@ public void checkRicercaPage() {
this.getWebDriverWait(30).withMessage("button reset filtri non trovato").until(ExpectedConditions.visibilityOfElementLocated(buttonResetFiltri));
} catch (TimeoutException e) {
logger.error("home ricerca non caricata correttamente: " + e.getMessage());
- Assert.fail("home ricerca non caricata correttamente: " + e.getMessage());
+ Assertions.fail("home ricerca non caricata correttamente: " + e.getMessage());
}
}
@@ -248,7 +259,7 @@ public void logout() {
this.elements(buttonConfermaLogout).get(0).click();
} catch (TimeoutException e) {
logger.error("logout non riuscito correttamente: " + e.getMessage());
- Assert.fail("logout non riuscito correttamente: " + e.getMessage());
+ Assertions.fail("logout non riuscito correttamente: " + e.getMessage());
}
}
@@ -264,7 +275,7 @@ public void insertCfAndRicercaOnPage(String codiceFiscale) {
buttonRicerca.click();
} catch (TimeoutException e) {
logger.error("bottone non cliccabile:" + e.getMessage());
- Assert.fail("bottone non cliccabile:" + e.getMessage());
+ Assertions.fail("bottone non cliccabile:" + e.getMessage());
}
try {
@@ -291,7 +302,7 @@ public void insertIunAndRicercaOnPage(String iun) {
this.getWebDriverWait(30).withMessage("bottone per la ricerca non trovato").until(ExpectedConditions.elementToBeClickable(buttonRicerca));
buttonRicerca.click();
- WebTool.waitTime(3);
+ webTool.waitTime(3);
}
public void insertIun(String iun) {
@@ -318,7 +329,7 @@ public void checkUid() {
setCodiceIdentificativoPF(Uid.getText().replace("Codice Univoco: ", ""));
} catch (TimeoutException e) {
logger.error("codice univoco non trovato: " + e.getMessage());
- Assert.fail("codice univoco non trovato: " + e.getMessage());
+ Assertions.fail("codice univoco non trovato: " + e.getMessage());
}
}
@@ -348,7 +359,7 @@ public void changeOption() {
this.getWebDriverWait(30).withMessage("input uid non trovato").until(ExpectedConditions.visibilityOfElementLocated(checkUidIsDisplayed));
} catch (TimeoutException e) {
logger.error("opzione ottieni cf non trovata: " + e.getMessage());
- Assert.fail("opzione ottieni cf non trovata: " + e.getMessage());
+ Assertions.fail("opzione ottieni cf non trovata: " + e.getMessage());
}
}
@@ -393,7 +404,7 @@ public void checkMessaggioDiErroreData() {
this.getWebDriverWait(15).withMessage("Messaggio di errore non trovato").until(ExpectedConditions.visibilityOfElementLocated(messaggio));
} catch (TimeoutException e) {
logger.error("Messaggio di errore non trovato: " + e.getMessage());
- Assert.fail("Messaggio di errore non trovato: " + e.getMessage());
+ Assertions.fail("Messaggio di errore non trovato: " + e.getMessage());
}
}
@@ -409,8 +420,9 @@ public void checkMessaggioDiErroreCF() {
this.getWebDriverWait(15).withMessage("Messaggio di errore non trovato").until(ExpectedConditions.visibilityOfElementLocated(messaggio));
}
+
public void checkZipLink() throws IOException, AWTException {
- boolean headless = System.getProperty("headless").equalsIgnoreCase("true");
+ boolean headless = webDriverConfig.getHeadless().equalsIgnoreCase("true");
if (!headless) {
logger.info("controllo esistenza link per scaricare zip");
By zipLink = By.xpath("//a[contains(text(),'Download')]");
@@ -597,7 +609,7 @@ public void clickResettaFiltri() {
}
public void checkCampiPuliti() {
- Assert.assertTrue("I campi non sono puliti", numeroTicketInput.getAttribute("value").isEmpty() && codiceFiscaleInput.getAttribute("value").isEmpty());
+ Assertions.assertTrue(numeroTicketInput.getAttribute("value").isEmpty() && codiceFiscaleInput.getAttribute("value").isEmpty(),"I campi non sono puliti");
logger.info("I campi sono puliti");
}
@@ -615,7 +627,7 @@ public void checkCodiceFiscale() {
logger.info("codice fiscale corrispondente");
} else {
logger.error("codice fiscale diverso");
- Assert.fail("dopo ricerca di corrispondenza il codice fiscale risulta differente");
+ Assertions.fail("dopo ricerca di corrispondenza il codice fiscale risulta differente");
}
}
@@ -641,7 +653,7 @@ public void spuntareDeanonimizzazioneDati() {
public void inserimentoArcoTemporale() {
- WebTool.waitTime(60);
+ webTool.waitTime(60);
logger.info(driver.getPageSource());
By calendarButton = By.xpath("//div[@data-testid='data-range-picker']//div//div//button");
@@ -649,7 +661,7 @@ public void inserimentoArcoTemporale() {
element(calendarButton).click();
By previousMonth = By.xpath("//button[@aria-label='Previous month']");
element(previousMonth).click();
- WebTool.waitTime(1);
+ webTool.waitTime(1);
By dateEleven = By.xpath("//button[contains(text(),'11')]");
element(dateEleven).click();
}
diff --git a/src/main/java/it/pn/frontend/e2e/common/NotificheDestinatarioPage.java b/src/main/java/it/pn/frontend/e2e/common/NotificheDestinatarioPage.java
index d6c3fd22c..b58e77953 100644
--- a/src/main/java/it/pn/frontend/e2e/common/NotificheDestinatarioPage.java
+++ b/src/main/java/it/pn/frontend/e2e/common/NotificheDestinatarioPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.common;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,7 +10,11 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+@Component
public class NotificheDestinatarioPage extends BasePage{
private static final Logger logger = LoggerFactory.getLogger("NotificheDestinatarioPage");
@@ -19,14 +23,18 @@ public class NotificheDestinatarioPage extends BasePage{
@FindBy(xpath = "//button[contains(text(),'Ricevuta di consegna PEC')]")
WebElement ricevutaDiConsegnaButton;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+ @Autowired
public NotificheDestinatarioPage(WebDriver driver) {
super(driver);
}
public void inserisciCodiceIUN(String codiceIUN) throws InterruptedException {
getWebDriverWait(10).withMessage("L'input codice IUN non è visibile").until(ExpectedConditions.visibilityOf(this.codiceIunTextField));
- WebTool.waitTime(1);
+ webTool.waitTime(1);
codiceIunTextField.sendKeys(codiceIUN);
}
public boolean verificaCodiceIUN(String codiceIUNInserito) {
@@ -37,7 +45,7 @@ public boolean verificaCodiceIUN(String codiceIUNInserito) {
return true;
}catch (TimeoutException e){
logger.error("Il codice IUN"+codiceIUNInserito+" non è stato trovato con errore:"+e.getMessage());
- Assert.fail("Il codice IUN"+codiceIUNInserito+" non è stato trovato con errore:"+e.getMessage());
+ Assertions.fail("Il codice IUN"+codiceIUNInserito+" non è stato trovato con errore:"+e.getMessage());
}
return false;
}
diff --git a/src/main/java/it/pn/frontend/e2e/common/RecapitiDestinatarioPage.java b/src/main/java/it/pn/frontend/e2e/common/RecapitiDestinatarioPage.java
index 5f024c9a7..ee11376e1 100644
--- a/src/main/java/it/pn/frontend/e2e/common/RecapitiDestinatarioPage.java
+++ b/src/main/java/it/pn/frontend/e2e/common/RecapitiDestinatarioPage.java
@@ -1,22 +1,26 @@
package it.pn.frontend.e2e.common;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.util.List;
+@Component
public class RecapitiDestinatarioPage extends BasePage {
private final Logger logger = LoggerFactory.getLogger("RecapitiDestinatarioPage");
- @FindBy(id = "add-contact")
- WebElement confermaButton;
+ @FindBy(id = "default_pec-button")
+ WebElement attivaButton;
- @FindBy(xpath = "//button[@data-testid='courtesy-email-button']")
+ @FindBy(id = "default_email-button")
WebElement avvisamiViaEmailButton;
@FindBy(id = "code-confirm-button")
@@ -28,7 +32,7 @@ public class RecapitiDestinatarioPage extends BasePage {
@FindBy(xpath = "//button[@data-testid='add email']")
WebElement avvisamiMailButton;
- @FindBy(xpath = "//button[@data-testid='courtesy-sms-button']")
+ @FindBy(id = "default_sms-button")
WebElement avvisamiSMSButton;
@FindBy(id = "default_email")
@@ -37,13 +41,13 @@ public class RecapitiDestinatarioPage extends BasePage {
@FindBy(id = "default_sms")
WebElement inserimentoPhoneField;
- @FindBy(id = "cancelContact-default")
+ @FindBy(id = "cancelContact-default_pec")
WebElement eliminaPECButton;
@FindBy(xpath = "//button[@id='confirmDialog']")
WebElement confermaButtonPoPUpPec;
- @FindBy(xpath = "//button[@id='modifyContact-default']")
+ @FindBy(id = "modifyContact-default_email")
WebElement modificaEmailButton;
@FindBy(id = "sender")
@@ -77,9 +81,14 @@ public class RecapitiDestinatarioPage extends BasePage {
WebElement pecField;
- @FindBy(xpath = "//div[@data-testid='legalContacts']")
+ @FindBy(id = "default_pec-typography")
WebElement pecEmail;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
+ @Autowired
public RecapitiDestinatarioPage(WebDriver driver) {
super(driver);
}
@@ -100,24 +109,24 @@ public void eliminaPecEsistente() {
public void clickSuChiudiPopUp() {
//By chiudiButtonBy = By.xpath("//button[contains(text(),'Chiudi')]");
logger.info("Log clickSuChiudiPopUp");
- WebTool.waitTime(5);
+ webTool.waitTime(5);
WebElement chiudiButtonBy = driver.findElement(By.xpath("//h2[@id='dialog-title']/following-sibling::div/button[contains(text(),'Annulla')]"));
getWebDriverWait(10).withMessage("Il bottone chiudi non è cliccabile").until(ExpectedConditions.elementToBeClickable(chiudiButtonBy));
this.js().executeScript("arguments[0].click()", chiudiButtonBy);
}
public void insertEmailPEC(String emailPEC) {
- WebTool.waitTime(5);
+ webTool.waitTime(5);
pecField = driver.findElement(By.id("default_pec"));
getWebDriverWait(10).withMessage("input pec field non trovato").until(ExpectedConditions.visibilityOf(pecField));
pecField.sendKeys(emailPEC);
- }
+ }
public void confermaButtonClick() {
- WebTool.waitTime(5);
- confermaButton = driver.findElement(By.id("add-contact"));
- getWebDriverWait(10).withMessage("Il bottone conferma non è cliccabile").until(ExpectedConditions.elementToBeClickable(this.confermaButton));
- this.confermaButton.click();
+ webTool.waitTime(5);
+ By attivaButton = By.id("default_pec-button");
+ getWebDriverWait(10).withMessage("Il bottone Attiva non è cliccabile").until(ExpectedConditions.elementToBeClickable(element(attivaButton)));
+ element(attivaButton).click();
}
public void clickConfermaButtonEliminaPopUp() {
@@ -134,7 +143,7 @@ public void waitLoadPopUp() {
By titleOption = By.xpath("//div[@data-testid='dialog-content']//p[contains(text(), 'Inserisci codice')]");
List inputBoxes = driver.findElements(By.xpath("//input[contains(@id,'code-input-')]"));
// The message is different in PG and PF
- By footerNotReceived = By.xpath("//p[contains(text(), 'Non l’hai ricevuto? Controlla')]");
+ By footerNotReceived = By.xpath("//div[contains(text(), 'Non l’hai ricevuto?')]");
getWebDriverWait(10).withMessage("Non viene visualizzato correttamente il titolo").until(ExpectedConditions.visibilityOfElementLocated(titleBy));
getWebDriverWait(10).withMessage("La descrizione non viene visualizzata e il testo non è corretto").until(ExpectedConditions.and(
ExpectedConditions.visibilityOfElementLocated(descriptionBy),
@@ -142,17 +151,17 @@ public void waitLoadPopUp() {
getWebDriverWait(10).withMessage("La scritta 'Inserisci codice' non viene visualizzata correttamente").until(ExpectedConditions.visibilityOfElementLocated(titleOption));
getWebDriverWait(10).withMessage("Le input boxes non vengono visualizzate").until(ExpectedConditions.visibilityOfAllElements(inputBoxes));
if (inputBoxes.size() != 5) {
- Assert.fail("Il numero di input box non è corretto");
+ Assertions.fail("Il numero di input box non è corretto");
}
getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(footerNotReceived));
boolean checkButton = !confermaButtonPopUp.isEnabled() && annullaButton.isEnabled();
if (!checkButton) {
- Assert.fail("i pulsanti all'interno del pop-up non rispettano le condizioni");
+ Assertions.fail("i pulsanti all'interno del pop-up non rispettano le condizioni");
}
logger.info("Il pop-up di conferma viene visualizzato correttamente");
} catch (TimeoutException e) {
logger.error("Il pop-up di conferma NON viene visualizzato correttamente con errori: " + e.getMessage());
- Assert.fail("Il pop-up di conferma NON viene visualizzato correttamente con errori:" + e.getMessage());
+ Assertions.fail("Il pop-up di conferma NON viene visualizzato correttamente con errori:" + e.getMessage());
}
}
@@ -168,7 +177,7 @@ public void sendOTP(String otp) {
logger.info("Il codice otp viene inserito correttamente");
} catch (TimeoutException e) {
logger.error("Il codice otp NON viene inserito correttamente con errore:" + e.getMessage());
- Assert.fail("Il codice otp NON viene inserito correttamente con errore:" + e.getMessage());
+ Assertions.fail("Il codice otp NON viene inserito correttamente con errore:" + e.getMessage());
}
}
@@ -187,8 +196,8 @@ public void confermaButtonClickPopUp() {
getWebDriverWait(10).until(ExpectedConditions.elementToBeClickable(confermaButtonPopUp));
confermaButtonPopUp.click();
- WebTool.waitTime(5);
- By confermaButtonPostInserimentoBy = By.xpath("//div[@data-testid='dialog-actions']/button[contains(text(), 'Conferma')]");
+ webTool.waitTime(5);
+ By confermaButtonPostInserimentoBy = By.id("code-confirm-button");
if (!driver.findElements(confermaButtonPostInserimentoBy).isEmpty()) {
element(confermaButtonPostInserimentoBy).click();
}
@@ -213,7 +222,7 @@ public void annullaButtonClick() {
this.annullaButton.click();
} catch (TimeoutException e) {
logger.error("Il bottone annulla non è cliccabile con errore: " + e.getMessage());
- Assert.fail("Il bottone annulla non è cliccabile con errore: " + e.getMessage());
+ Assertions.fail("Il bottone annulla non è cliccabile con errore: " + e.getMessage());
}
}
@@ -252,7 +261,7 @@ public void insertPhone(String cellulare) {
public boolean verificaPecAssociata() {
try {
- By pecAssociata = By.id("associatedPEC");
+ By pecAssociata = By.id("default_pec-typography");
getWebDriverWait(10).withMessage("PEC associata non presente").until(ExpectedConditions.visibilityOfElementLocated(pecAssociata));
return true;
} catch (NoSuchElementException | TimeoutException e) {
@@ -285,7 +294,7 @@ public void visualizzaValidazione() {
getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(pecAssociata));
} catch (TimeoutException e) {
logger.error("Pec non associata con errore:" + e.getMessage());
- Assert.fail("Pec non associata con errore:" + e.getMessage());
+ Assertions.fail("Pec non associata con errore:" + e.getMessage());
}
}
@@ -325,7 +334,7 @@ public boolean siVisualizzaPecInserita() {
}
public void clickSuModifica() {
- By modificaMailButton = By.xpath("//button[@id='modifyContact-default']");
+ By modificaMailButton = By.id("modifyContact-default_email");
getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(modificaMailButton));
if (modificaEmailButton.isDisplayed()) {
this.modificaEmailButton.click();
@@ -337,14 +346,14 @@ public void clickSuModifica() {
public void clickSuModificaPEC() {
try {
- By modificaButtonBy = By.xpath("//div[@data-testid='legalContacts']//button[@id='modifyContact-default']");
+ By modificaButtonBy = By.id("modifyContact-default_pec");
this.getWebDriverWait(10).withMessage("Non si riesce a cliccare o vedere il bottone modifica PEC").until(ExpectedConditions.and(
ExpectedConditions.visibilityOfElementLocated(modificaButtonBy),
ExpectedConditions.elementToBeClickable(modificaButtonBy)));
this.element(modificaButtonBy).click();
} catch (TimeoutException e) {
logger.error("Non si riesce a cliccare o vedere il bottone modifica PEC con errore:" + e.getMessage());
- Assert.fail("Non si riesce a cliccare o vedere il bottone modifica PEC con errore:" + e.getMessage());
+ Assertions.fail("Non si riesce a cliccare o vedere il bottone modifica PEC con errore:" + e.getMessage());
}
}
@@ -356,7 +365,7 @@ public void cancellaTesto() {
logger.info("testo email pec cancellata");
} catch (TimeoutException e) {
logger.error("Non si riesce a cancellare il testo della email PEC :" + e.getMessage());
- Assert.fail("Non si riesce a cancellare il testo della email PEC :" + e.getMessage());
+ Assertions.fail("Non si riesce a cancellare il testo della email PEC :" + e.getMessage());
}
}
@@ -404,6 +413,8 @@ public void clickSuConfermaElimina() {
}
public boolean siControllaEliminazionePEC() {
+ webTool.waitTime(3);
+ pecField = driver.findElement(By.id("default_pec"));
return pecField.isDisplayed();
}
@@ -412,7 +423,7 @@ public boolean siControllaPresenzaPEC() {
}
public void insertEnte(String comune) {
- WebTool.waitTime(5);
+ webTool.waitTime(5);
enteField = driver.findElement(By.id("sender"));
this.enteField.sendKeys(comune);
// wait 2seconds for the list to appear
@@ -535,14 +546,13 @@ public String getPecErrorMessage() {
public boolean verificaBottoneConfermaDisabilitato() {
try {
- getWebDriverWait(30).until(ExpectedConditions.visibilityOf(this.confermaButton));
- return Boolean.parseBoolean(this.confermaButton.getAttribute("disabled"));
+ getWebDriverWait(30).until(ExpectedConditions.visibilityOf(this.attivaButton));
+ return Boolean.parseBoolean(this.attivaButton.getAttribute("disabled"));
} catch (NoSuchElementException | TimeoutException e) {
logger.error("bottone non disabilitato " + e.getMessage());
return false;
}
}
-
public void clickHoCapitoCheckBoxPopup() {
By hoCapitoCheckboxBy = By.xpath("//span[contains(text(),'Ho capito')]/preceding-sibling::span/input");
WebElement hoCapitoCheckBox = this.driver.findElement(hoCapitoCheckboxBy);
@@ -551,7 +561,7 @@ public void clickHoCapitoCheckBoxPopup() {
}
public void confermaEmailPopup() {
- By popupConfirmButtonBy = By.id("confirmButton");
+ By popupConfirmButtonBy = By.id("code-confirm-button");
getWebDriverWait(10).until(ExpectedConditions.elementToBeClickable(popupConfirmButtonBy));
this.driver.findElement(popupConfirmButtonBy).click();
}
@@ -576,7 +586,7 @@ public boolean avvisamiViaEmailIsDisabled() {
}
public void visualizzazioneSezioneAltriRecapiti() {
- By altriRecapitiSectionBy = By.id("specialContact");
+ By altriRecapitiSectionBy = By.id("courtesyContactsTitle");
getWebDriverWait(5).withMessage(" Non si visualizza correttamente il titolo della sezione altri recapiti").until(ExpectedConditions.visibilityOfElementLocated(altriRecapitiSectionBy));
}
@@ -616,18 +626,18 @@ public void visualizzazioneCampiSezioneAltriRecapiti() {
public void checkButtonAnnullaEliminazioneInPopUp() {
try {
- WebTool.waitTime(3);
+ webTool.waitTime(3);
buttonAnnullaEliminazioneInPopUp = driver.findElement(By.id("buttonAnnulla"));
getWebDriverWait(10).withMessage("pulsante annulla eliminazione non trovato").until(ExpectedConditions.visibilityOf(buttonAnnullaEliminazioneInPopUp));
logger.info("pulsante annulla eliminazione visibile");
} catch (TimeoutException e) {
logger.error("caricamento pop-up con errore:" + e.getMessage());
- Assert.fail("caricamento pop-up con errore:" + e.getMessage());
+ Assertions.fail("caricamento pop-up con errore:" + e.getMessage());
}
}
public void clickButtonAnnullaEliminazioneInPopUp() {
- WebTool.waitTime(5);
+ webTool.waitTime(5);
buttonAnnullaEliminazioneInPopUp = driver.findElement(By.id("buttonAnnulla"));
getWebDriverWait(10).withMessage("Non è stato possibile cliccare sul bottone annulla").until(ExpectedConditions.elementToBeClickable(buttonAnnullaEliminazioneInPopUp));
buttonAnnullaEliminazioneInPopUp.click();
@@ -638,19 +648,21 @@ public void checkEmailPrecedentementeSalvata(String email) {
logger.info("la mail associata risulta uguale alla precedente");
} else {
logger.error("la mail associata é diversa dalla precedentemente salvata");
- Assert.fail("la mail associata é diversa dalla precedentemente salvata");
+ Assertions.fail("la mail associata é diversa dalla precedentemente salvata");
}
}
public void verificaPecModificabile() {
try {
+ webTool.waitTime(5);
+ pecField = driver.findElement(By.id("default_pec"));
getWebDriverWait(10).until(ExpectedConditions.and(
ExpectedConditions.visibilityOf(pecField),
ExpectedConditions.attributeToBe(pecField, "readonly", "")));
logger.info("pec modificabile");
} catch (TimeoutException e) {
logger.error("pec non modificabile con errore:" + e.getMessage());
- Assert.fail("pec non modificabile con errore:" + e.getMessage());
+ Assertions.fail("pec non modificabile con errore:" + e.getMessage());
}
}
@@ -662,7 +674,7 @@ public void verificaPecNonModificabile() {
logger.info("pec non modificabile");
} catch (TimeoutException e) {
logger.error("pec modificabile con errore:" + e.getMessage());
- Assert.fail("pec modificabile con errore:" + e.getMessage());
+ Assertions.fail("pec modificabile con errore:" + e.getMessage());
}
}
@@ -693,7 +705,7 @@ public void clickSuBottoneCellulareDiCortesia(String actionButton) {
}
public void clickSuBottoneEmailDiCortesia(String actionButton) {
- By bottoneActionBy = By.xpath("//form[contains(., 'Indirizzo e-mail')]//button[contains(text(), '" + actionButton + "')]");
+ By bottoneActionBy = By.xpath("//button[contains(text(), '" + actionButton + "')]");
getWebDriverWait(10).withMessage("Il bottone non è cliccabile").until(ExpectedConditions.visibilityOfElementLocated(bottoneActionBy));
this.element(bottoneActionBy).click();
}
@@ -706,7 +718,7 @@ public void checkNumeroDiCellulareNonPresente() {
));
} catch (TimeoutException e) {
logger.error("Input numero di cellulare non visualizzato o non vuoto con errore: " + e.getMessage());
- Assert.fail("Input numero di cellulare non visualizzato o non vuoto con errore: " + e.getMessage());
+ Assertions.fail("Input numero di cellulare non visualizzato o non vuoto con errore: " + e.getMessage());
}
}
@@ -715,7 +727,7 @@ public void checkCampoEmailModificabile() {
getWebDriverWait(10).withMessage("Campo email non modificabile").until(ExpectedConditions.visibilityOf(inserimentoMailField));
} catch (TimeoutException e) {
logger.error("Campo email non modificabile con errore: " + e.getMessage());
- Assert.fail("Campo email non modificabile con errore: " + e.getMessage());
+ Assertions.fail("Campo email non modificabile con errore: " + e.getMessage());
}
}
@@ -733,7 +745,7 @@ public void checkDisclaimer() {
ExpectedConditions.attributeToBe(confermaButtonBy, "disabled", "true")));
} catch (TimeoutException e) {
logger.error("Qualche componente del pop up non viene visualizzato con errore: " + e.getMessage());
- Assert.fail("Qualche componente del pop up non viene visualizzato con errore: " + e.getMessage());
+ Assertions.fail("Qualche componente del pop up non viene visualizzato con errore: " + e.getMessage());
}
}
@@ -746,7 +758,7 @@ public void checkMessaggioErroreTreTentativiOTPSbagliato() {
logger.info("Si visualizza correttamente il messaggio di errore");
} else {
logger.error("Non si visualizza il messaggio di errore");
- Assert.fail("Non si visualizza il messaggio di errore");
+ Assertions.fail("Non si visualizza il messaggio di errore");
}
By messageContainer = By.id("error-alert");
By modalErrorTitle = By.id("codeModalErrorTitle");
@@ -757,7 +769,7 @@ public void checkMessaggioErroreTreTentativiOTPSbagliato() {
));
} catch (TimeoutException e) {
logger.error("Il messaggio di errore non viene visualizzato correttamente con errore: " + e.getMessage());
- Assert.fail("Il messaggio di errore non viene visualizzato correttamente con errore: " + e.getMessage());
+ Assertions.fail("Il messaggio di errore non viene visualizzato correttamente con errore: " + e.getMessage());
}
}
@@ -799,7 +811,7 @@ public void visualizzazioneSezioneAltriRecapitiPG(String textboxId) {
public void selezionaTipoEmail() {
this.tipoIndirizzoField.click();
- WebTool.waitTime(2);
+ webTool.waitTime(2);
By opzioneEmail = By.id("EMAIL");
getWebDriverWait(10)
.withMessage("Non è visibile l'opzione indirizzo email")
@@ -809,7 +821,7 @@ public void selezionaTipoEmail() {
public void selezionaTipoPec() {
tipoIndirizzoField.click();
- WebTool.waitTime(2);
+ webTool.waitTime(2);
By opzionePEC = By.id("PEC");
getWebDriverWait(10)
.withMessage("Non è visibile l'opzione indirizzo PEC")
@@ -819,7 +831,7 @@ public void selezionaTipoPec() {
public void selezionaTipoCelulare() {
this.tipoIndirizzoField.click();
- WebTool.waitTime(2);
+ webTool.waitTime(2);
By opzioneCelulare = By.id("Celulare");
getWebDriverWait(10)
.withMessage("Non è visibile l'opzione celulare")
@@ -831,16 +843,16 @@ public void checkMessaggioDiErrore(String check){
String id = "";
if (check.equalsIgnoreCase("pec")){
id = "s_pec-helper-text";
- Assert.assertFalse("la textbox non presenta il bordo rosso",indirizzoPecField.getAttribute("aria-invalid").equalsIgnoreCase("false"));
+ Assertions.assertFalse(indirizzoPecField.getAttribute("aria-invalid").equalsIgnoreCase("false"),"la textbox non presenta il bordo rosso");
}
if (check.equalsIgnoreCase("email")){
id = "s_mail-helper-text";
- Assert.assertFalse("la textbox non presenta il bordo rosso",emailField.getAttribute("aria-invalid").equalsIgnoreCase("false"));
+ Assertions.assertFalse(emailField.getAttribute("aria-invalid").equalsIgnoreCase("false"),"la textbox non presenta il bordo rosso");
}
By errorMessage = By.id(id);
getWebDriverWait(5).withMessage("Il messaggio di errore non è visibile").until(ExpectedConditions.visibilityOfElementLocated(errorMessage));
- Assert.assertNotNull("lIl bottone Associa è attivo", associaButton.getAttribute("disabled"));
+ Assertions.assertNotNull("lIl bottone Associa è attivo", associaButton.getAttribute("disabled"));
}
public void clearMailbox(String check){
diff --git a/src/main/java/it/pn/frontend/e2e/config/BearerTokenConfig.java b/src/main/java/it/pn/frontend/e2e/config/BearerTokenConfig.java
new file mode 100644
index 000000000..7ef6790c8
--- /dev/null
+++ b/src/main/java/it/pn/frontend/e2e/config/BearerTokenConfig.java
@@ -0,0 +1,25 @@
+package it.pn.frontend.e2e.config;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+/*
+*Modifiche principali:
+Iniezione di WebDriver: Ho rimosso tutte le istanze di new ChromeDriver(), new FirefoxDriver(), ecc., e ho creato un bean in una classe separata (che andremo a configurare subito dopo) che gestisce la creazione del WebDriver.
+
+Rimozione di new per altre dipendenze: Ho sostituito la creazione di oggetti come CookieConfig, RestDelegation e RestContact con l'iniezione di dipendenze utilizzando @Autowired.
+
+Configurazione di un WebDriver come Bean
+*
+*
+* */
+@Getter
+@Configuration
+@PropertySource( value = "file:config/bearer-token-${environment}.properties", ignoreResourceNotFound = true )
+public class BearerTokenConfig {
+
+
+}
diff --git a/src/main/java/it/pn/frontend/e2e/config/CustomHttpClient.java b/src/main/java/it/pn/frontend/e2e/config/CustomHttpClient.java
index 6e2178930..7e2e41af6 100644
--- a/src/main/java/it/pn/frontend/e2e/config/CustomHttpClient.java
+++ b/src/main/java/it/pn/frontend/e2e/config/CustomHttpClient.java
@@ -3,6 +3,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
+import io.cucumber.java.Before;
import it.pn.frontend.e2e.model.address.DigitalAddress;
import it.pn.frontend.e2e.model.delegate.DelegateResponsePF;
import lombok.Getter;
@@ -17,6 +18,13 @@
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.io.entity.StringEntity;
import org.apache.hc.core5.http.io.support.ClassicRequestBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
@@ -26,11 +34,17 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.logging.Logger;
@Slf4j
+@Component
public class CustomHttpClient {
- private static CustomHttpClient, ?> instance;
+
+ private static CustomHttpClient, ?> instance ;
private final Gson gson = new Gson();
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+
@Setter
@Getter
private String baseUrlApi;
@@ -42,26 +56,39 @@ public class CustomHttpClient {
private final CloseableHttpClient httpClient;
private ClassicHttpRequest httpRequest;
+
public CustomHttpClient() {
+ System.out.println("CustomHttpClient.......");
this.baseUrlApi = "https://api.test.notifichedigitali.it";
this.httpClient = HttpClients.createDefault();
this.apiKey = "2b3d47f4-44c1-4b49-b6ef-54dc1c531311";
}
public CustomHttpClient(String baseUrlApi, String apiKeyTest) {
+ System.out.println("CustomHttpClient1.......");
+
this.baseUrlApi = baseUrlApi;
this.httpClient = HttpClients.createDefault();
this.apiKey = apiKeyTest;
}
+ public CustomHttpClient(CustomHttpClient, ?> customHttpClient) {
+ System.out.println("CustomHttpClient2.......");
+ instance = customHttpClient;
+ this.baseUrlApi = "https://api.test.notifichedigitali.it";
+ this.httpClient = HttpClients.createDefault();
+ this.apiKey = "2b3d47f4-44c1-4b49-b6ef-54dc1c531311";
+ }
+
public CustomHttpClient(String apiKeyTest) {
+ System.out.println("CustomHttpClient2.......");
this.baseUrlApi = "https://api.test.notifichedigitali.it";
this.httpClient = HttpClients.createDefault();
this.apiKey = apiKeyTest;
}
-
- public static CustomHttpClient getInstance() {
+/**
+ public static CustomHttpClient getInstance() {
if (instance == null) {
synchronized (CustomHttpClient.class) {
if (instance == null) {
@@ -71,8 +98,9 @@ public static CustomHttpClient getInstance() {
}
return (CustomHttpClient) instance;
}
-
- public static CustomHttpClient getInstanceWithApiKey(String apiKey) {
+**/
+/**
+ public static CustomHttpClient getInstanceWithApiKey(String apiKey) {
if (instance == null) {
synchronized (CustomHttpClient.class) {
if (instance == null) {
@@ -82,10 +110,9 @@ public static CustomHttpClient getInstanceWithApiKey(String apiKey)
}
return (CustomHttpClient) instance;
}
-
+**/
public ResponseType sendHttpPostRequest(String endpoint, Map headers, RequestType requestObject, Class responseType) throws IOException {
String apiUrl = baseUrlApi + endpoint;
-
try (CloseableHttpClient client = HttpClients.createDefault()) {
ObjectMapper objectMapper = new ObjectMapper();
String jsonBody = objectMapper.writeValueAsString(requestObject);
@@ -246,7 +273,7 @@ public ResponseType sendHttpGetRequest(String endpoint, Map head
}
public String getJwtToken(String TokenExchange) throws IOException {
- String env = System.getProperty("environment");
+ String env = webDriverConfig.getEnvironment();
CloseableHttpClient client = HttpClients.createDefault();
this.httpRequest = ClassicRequestBuilder
.post("https://webapi." + env + ".notifichedigitali.it/token-exchange")
@@ -276,7 +303,7 @@ public String getJwtToken(String TokenExchange) throws IOException {
}
public ResponseType sendHttpDeleteRequest(String endpoint, Map headers, Class responseType) throws IOException {
- String env = System.getProperty("environment");
+ String env = webDriverConfig.getEnvironment();
try (CloseableHttpClient client = HttpClients.createDefault()) {
this.httpRequest = ClassicRequestBuilder
.delete(endpoint)
diff --git a/src/main/java/it/pn/frontend/e2e/config/UserPasswordConfig.java b/src/main/java/it/pn/frontend/e2e/config/UserPasswordConfig.java
new file mode 100644
index 000000000..580cc6c3c
--- /dev/null
+++ b/src/main/java/it/pn/frontend/e2e/config/UserPasswordConfig.java
@@ -0,0 +1,23 @@
+package it.pn.frontend.e2e.config;
+
+import lombok.Getter;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+/*
+*Modifiche principali:
+Iniezione di WebDriver: Ho rimosso tutte le istanze di new ChromeDriver(), new FirefoxDriver(), ecc., e ho creato un bean in una classe separata (che andremo a configurare subito dopo) che gestisce la creazione del WebDriver.
+
+Rimozione di new per altre dipendenze: Ho sostituito la creazione di oggetti come CookieConfig, RestDelegation e RestContact con l'iniezione di dipendenze utilizzando @Autowired.
+
+Configurazione di un WebDriver come Bean
+*
+*
+* */
+@Getter
+@Configuration
+@PropertySource( value = "file:config/user-password-test.properties", ignoreResourceNotFound = true )
+public class UserPasswordConfig {
+
+
+}
diff --git a/src/main/java/it/pn/frontend/e2e/config/WebDriverConfig.java b/src/main/java/it/pn/frontend/e2e/config/WebDriverConfig.java
new file mode 100644
index 000000000..83436a329
--- /dev/null
+++ b/src/main/java/it/pn/frontend/e2e/config/WebDriverConfig.java
@@ -0,0 +1,342 @@
+package it.pn.frontend.e2e.config;
+
+import io.github.bonigarcia.wdm.WebDriverManager;
+import it.pn.frontend.e2e.listeners.HooksNew;
+import it.pn.frontend.e2e.listeners.NetWorkInfo;
+import it.pn.frontend.e2e.utility.CookieConfig;
+import lombok.Getter;
+import lombok.Setter;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.devtools.DevTools;
+import org.openqa.selenium.devtools.HasDevTools;
+import org.openqa.selenium.devtools.v126.network.Network;
+import org.openqa.selenium.devtools.v126.network.model.RequestWillBeSent;
+import org.openqa.selenium.edge.EdgeDriver;
+import org.openqa.selenium.edge.EdgeOptions;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+import org.openqa.selenium.firefox.FirefoxProfile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.*;
+
+import java.time.Duration;
+import java.util.*;
+
+/*
+*Modifiche principali:
+Iniezione di WebDriver: Ho rimosso tutte le istanze di new ChromeDriver(), new FirefoxDriver(), ecc., e ho creato un bean in una classe separata (che andremo a configurare subito dopo) che gestisce la creazione del WebDriver.
+
+Rimozione di new per altre dipendenze: Ho sostituito la creazione di oggetti come CookieConfig, RestDelegation e RestContact con l'iniezione di dipendenze utilizzando @Autowired.
+
+Configurazione di un WebDriver come Bean
+*
+*
+* */
+@Getter
+@Configuration
+@PropertySource( value = "file:config/configuration.properties", ignoreResourceNotFound = true )
+public class WebDriverConfig {
+
+ @Value("${browser}")
+ private String browser;
+
+ @Value("${environment}")
+ private String environment;
+
+ @Value("${cookie.config}")
+ private String cookie;
+
+ @Value("${headless}")
+ @Setter
+ private String headless;
+
+ @Value("${downloadFilePath}")
+ private String downloadFilePath;
+
+ @Value("${loadComponentWaitTime}")
+ private String loadComponentWaitTime;
+
+ @Value("${apiBaseUrl}")
+ private String baseUrl;
+
+ @Value("${ragione.sociale.baldassarre}")
+ private String ragioneSocialeBaldassarre;
+
+ @Value("${url.login.pg.dev}")
+ private String baseUrlPgDev;
+
+ @Value("${url.login.pg.test}")
+ private String baseUrlPgTest;
+
+ @Value("${url.login.pf.dev}")
+ private String baseUrlPfDev;
+
+ @Value("${url.login.pf.test}")
+ private String baseUrlPfTest;
+
+ @Value("${pn.bearer-token.tokentestPFDelegante}")
+ private String tokentestPFDelegante;
+
+ @Value("${ pn.bearer-token.tokendevPFDelegante}")
+ private String tokendevPFDelegante;
+
+ @Value("${pn.bearer-token.tokentestPFDelegato}")
+ private String tokentestPFDelegato;
+
+ @Value("${pn.bearer-token.tokendevPFDelegato}")
+ private String tokendevPFDelegato;
+
+ @Value("${pn.bearer-token.tokentestPGDelegante}")
+ private String tokentestPGDelegante;
+
+ @Value("${pn.bearer-token.tokendevPGDelegante}")
+ private String tokendevPGDelegante;
+
+ @Value("${pn.bearer-token.tokentestPGDelegato}")
+ private String tokentestPGDelegato;
+
+ @Value("${pn.bearer-token.tokendevPGDelegato}")
+ private String tokendevPGDelegato;
+
+ @Value("${pn.bearer-token.tokentestMittente}")
+ private String tokentestMittente;
+
+ @Value("${pn.bearer-token.tokendevMittente}")
+ private String tokendevMittente;
+
+ @Value("${pn.bearer-token.tokentestPFColombo}")
+ private String tokentestPFColombo;
+
+ @Value("${pn.bearer-token.tokentestRaddista1}")
+ private String tokentestRaddista1;
+
+ @Value("${url.selfcare}")
+ private String urlSelfCare;
+
+ @Value("${pn.user.cesare}")
+ private String userCesare;
+
+ @Value("${pn.pwd.cesare}")
+ private String pwdCesare;
+
+ @Value("${pn.user.lucrezia}")
+ private String userLucrezia;
+
+ @Value("${pn.pwd.lucrezia}")
+ private String pwdLucrezia;
+
+ @Value("${pn.user.dante}")
+ private String userDante;
+
+ @Value("${pn.pwd.dante}")
+ private String pwdDante;
+
+ @Value("${pn.user.petrarca}")
+ private String userPetrarca;
+
+ @Value("${pn.pwd.petrarca}")
+ private String pwdPetrarca;
+
+ @Value("${pn.user.mittente}")
+ private String userMittente;
+
+ @Value("${pn.pwd.mittente}")
+ private String pwdMittente;
+
+ @Value("${pn.userDev.helpdesk}")
+ private String userDevHelpdesk;
+
+ @Value("${pn.pwdDev.helpdesk}")
+ private String pwdDevHelpdesk;
+
+ @Value("${pn.userUat.helpdesk}")
+ private String userUatHelpdesk;
+
+ @Value("${pn.pwdUat.helpdesk}")
+ private String pwdUatHelpdesk;
+
+ @Value("${pn.userTest.helpdesk}")
+ private String userTestHelpdesk;
+
+ @Value("${pn.pwdTest.helpdesk}")
+ private String pwdTestHelpdesk;
+
+ @Value("${url.mittente}")
+ private String urlMittente;
+ @Value("${url.helpdesk.test.notifichedigitali}")
+ private String urlHelpdeskTestNotifichedigitali;
+
+ @Value("${codice.iun}")
+ private String codiceIun;
+
+ private final Map requests = new HashMap<>();
+
+ @Getter
+ private final List netWorkInfos = new ArrayList<>();
+
+ private final String os = System.getProperty("os.name");
+
+ private DevTools devTools;
+ @Value("${codice.iun.n1}")
+ private String codiceIunN1;
+
+ @Value("${codice.iun.n2}")
+ private String codiceIunN2;
+
+ @Value("${codice.iun.n3}")
+ private String codiceIunN3;
+
+ @Getter
+ public WebDriver driver;
+
+ @Autowired
+ public CookieConfig cookieConfig;
+
+ /**
+ * Logger
+ */
+ private static final Logger logger = LoggerFactory.getLogger(WebDriverConfig.class);
+
+
+ @Bean
+ @Primary
+ public WebDriver webDriver() {
+
+ var browser = Optional.ofNullable(getBrowser())
+ .orElseThrow(() -> new IllegalArgumentException("Browser must be specified"));
+ // var browser = Optional.ofNullable(System.getProperty("browser"))
+ // .orElseThrow(() -> new IllegalArgumentException("Browser must be specified"));
+ // this.headless = System.getProperty("headless", "false");
+ // webDriverConfig.setHeadless(System.getProperty("headless", "false"));
+ // webDriverConfig.setHeadless("false");
+ switch (browser) {
+ case "firefox" -> setupFirefox();
+ case "chrome" -> setupChrome();
+ case "edge" -> setupEdge();
+ default -> throw new IllegalArgumentException("Unsupported browser: " + browser);
+ }
+
+ cookieConfig.addCookie();
+
+ return driver;
+ }
+
+
+ public void setupFirefox() {
+ WebDriverManager.firefoxdriver().setup();
+ var firefoxProfile = new FirefoxProfile();
+ var firefoxOptions = new FirefoxOptions();
+ firefoxOptions.setProfile(firefoxProfile);
+ firefoxOptions.addArguments("-private");
+
+ if (Boolean.parseBoolean(getHeadless())) {
+ firefoxOptions.addArguments("--width=1200", "--height=800", "--headless");
+ }
+ driver = new FirefoxDriver(firefoxOptions);
+ driver.manage().window().maximize();
+ driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
+ logger.info("Firefox driver started");
+ }
+
+ public void setupChrome() {
+ WebDriverManager.chromedriver().setup();
+ var chromeOptions = new ChromeOptions();
+ chromeOptions.addArguments("--lang=it", "--incognito", "--disable-dev-shm-usage", "--remote-allow-origins=*", "--enable-clipboard");
+ var downloadFilePath = getDownloadFilePath();
+ // var downloadFilePath = System.getProperty("downloadFilePath");
+ var chromePrefs = Map.of("download.default_directory", downloadFilePath);
+ chromeOptions.setExperimentalOption("prefs", chromePrefs);
+
+ if (Boolean.parseBoolean(getHeadless())) {
+ chromeOptions.addArguments("--no-sandbox", "--headless", "window-size=1920,1080");
+ }
+
+ driver = new ChromeDriver(chromeOptions);
+ driver.manage().window().maximize();
+ driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
+
+ setupDevTools();
+ logger.info("Chrome driver started");
+ }
+
+ public void setupEdge() {
+ if (this.os.toLowerCase().contains("windows")) {
+ WebDriverManager.edgedriver().setup();
+ } else {
+ throw new UnsupportedOperationException("Edge browser is not supported on OS: " + this.os);
+ }
+ var edgeOptions = new EdgeOptions();
+ edgeOptions.setCapability("ms:inPrivate", true);
+ if (Boolean.parseBoolean(getHeadless())) {
+ edgeOptions.addArguments("window-size=1920,1080", "--headless");
+ }
+ driver = new EdgeDriver(edgeOptions);
+ driver.manage().window().maximize();
+ driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(20));
+ logger.info("Edge driver started");
+ }
+
+
+ private void setupDevTools() {
+ devTools = ((HasDevTools) driver).getDevTools();
+ devTools.createSession();
+ devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
+ captureHttpRequests();
+ captureHttpResponse();
+ }
+
+ private void captureHttpRequests() {
+ devTools.addListener(Network.requestWillBeSent(), request -> {
+ var url = request.getRequest().getUrl();
+ cookieConfig.getCookies(url).forEach(cookie -> driver.manage().addCookie(cookie));
+ requests.put(request.getRequestId().toString(), request);
+ });
+ }
+
+ private void captureHttpResponse() {
+ devTools.addListener(Network.responseReceived(), response -> {
+ var requestId = response.getRequestId().toString();
+ if (requests.containsKey(requestId)) {
+ var request = requests.get(requestId);
+ var headers = request.getRequest().getHeaders();
+
+ // Controlla il tipo di risorsa come stringa "XHR"
+ if ("XHR".equals(response.getType().toString())) {
+ var netWorkInfo = new NetWorkInfo();
+ if (headers.get("Authorization") != null) {
+ var authHeader = headers.get("Authorization").toString();
+ System.setProperty("token", authHeader);
+ netWorkInfo.setAuthorizationBearer(authHeader);
+ }
+ netWorkInfo.setRequestId(requestId);
+ netWorkInfo.setRequestUrl(request.getRequest().getUrl());
+ netWorkInfo.setRequestMethod(request.getRequest().getMethod());
+ netWorkInfo.setResponseStatus(response.getResponse().getStatus().toString());
+
+ try {
+ var bodyResponse = devTools.send(Network.getResponseBody(response.getRequestId())).getBody();
+ netWorkInfo.setResponseBody(bodyResponse);
+ } catch (Exception ignored) {
+ // Ignorato perché non sempre è disponibile il body della risposta
+ }
+ logger.info("NET_INFO: "+netWorkInfo.getRequestUrl());
+ netWorkInfos.add(netWorkInfo);
+ }
+ }
+ requests.remove(requestId);
+ });
+ }
+
+ public void clearRequest (){
+ requests.clear();
+ }
+ public void clearNetWorkInfos (){
+ netWorkInfos.clear();
+ }
+
+}
diff --git a/src/main/java/it/pn/frontend/e2e/listeners/Hooks.java b/src/main/java/it/pn/frontend/e2e/listeners/Hooks.java
index 21f816dc9..b112dfca2 100644
--- a/src/main/java/it/pn/frontend/e2e/listeners/Hooks.java
+++ b/src/main/java/it/pn/frontend/e2e/listeners/Hooks.java
@@ -1,9 +1,6 @@
package it.pn.frontend.e2e.listeners;
-import io.cucumber.java.After;
-import io.cucumber.java.Before;
+
import io.cucumber.java.Scenario;
-import io.cucumber.java.en.And;
-import io.github.bonigarcia.wdm.WebDriverManager;
import it.pn.frontend.e2e.model.address.DigitalAddress;
import it.pn.frontend.e2e.model.singleton.MandateSingleton;
import it.pn.frontend.e2e.rest.RestContact;
@@ -11,332 +8,35 @@
import it.pn.frontend.e2e.utility.CookieConfig;
import lombok.Getter;
import org.apache.commons.io.FileUtils;
-import org.junit.Assert;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.DevToolsException;
import org.openqa.selenium.devtools.HasDevTools;
import org.openqa.selenium.devtools.v126.network.Network;
-import org.openqa.selenium.devtools.v126.network.model.Headers;
import org.openqa.selenium.devtools.v126.network.model.RequestWillBeSent;
import org.openqa.selenium.devtools.v126.network.model.ResourceType;
-import org.openqa.selenium.edge.EdgeDriver;
-import org.openqa.selenium.edge.EdgeOptions;
-import org.openqa.selenium.firefox.FirefoxDriver;
-import org.openqa.selenium.firefox.FirefoxOptions;
-import org.openqa.selenium.firefox.FirefoxProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.time.Duration;
import java.util.*;
-import java.util.concurrent.TimeUnit;
-
-public class Hooks {
- private static final Logger logger = LoggerFactory.getLogger("Hooks");
- public static WebDriver driver;
- public DevTools devTools;
- public Map requests = new HashMap<>();
- ;
-
- @Getter
- public static String scenario;
- public static List netWorkInfos = new ArrayList<>();
- private String headless;
- private final CookieConfig cookieConfig = new CookieConfig();
- private final String os = System.getProperty("os.name");
-
- protected void firefox() {
- WebDriverManager.firefoxdriver().setup();
- FirefoxProfile profile = new FirefoxProfile();
- FirefoxOptions firefoxOptions = new FirefoxOptions();
- firefoxOptions.setProfile(profile);
- firefoxOptions.addArguments("-private");
-
- if (this.headless != null && this.headless.equalsIgnoreCase("true")) {
- firefoxOptions.addArguments("--width=1200");
- firefoxOptions.addArguments("--height=800");
- firefoxOptions.addArguments("--headless");
- }
- driver = new FirefoxDriver(firefoxOptions);
- if (this.headless != null && this.headless.equalsIgnoreCase("false")) {
- driver.manage().window().maximize();
- }
- driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
- logger.info("firefox driver started");
- }
-
- protected void chrome() {
- WebDriverManager.chromedriver().setup();
- ChromeOptions chromeOptions = new ChromeOptions();
- chromeOptions.addArguments("--lang=it");
- chromeOptions.addArguments("--incognito");
- chromeOptions.addArguments("--disable-dev-shm-usage");
- chromeOptions.addArguments("--remote-allow-origins=*");
- chromeOptions.addArguments("--enable-clipboard");
- String downloadFilepath = System.getProperty("downloadFilePath");
-
- HashMap chromePrefs = new HashMap();
- chromePrefs.put("download.default_directory", downloadFilepath);
-
- chromeOptions.setExperimentalOption("prefs", chromePrefs);
- if (this.headless != null && this.headless.equalsIgnoreCase("true")) {
- chromeOptions.addArguments("--no-sandbox");
- chromeOptions.addArguments("headless");
- chromeOptions.addArguments("window-size=1920,1080");
- }
-
- driver = new ChromeDriver(chromeOptions);
- if (this.headless != null && this.headless.equalsIgnoreCase("false")) {
- driver.manage().window().maximize();
- }
-
- driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
-
- devTools = ((HasDevTools) driver).getDevTools();
- devTools.createSession();
- devTools.send(Network.enable(
- Optional.empty(),
- Optional.empty(),
- Optional.empty()
- ));
-
- this.captureHttpRequests();
- this.captureHttpResponse();
- logger.info("chromedriver started");
- }
-
- private void captureHttpRequests() {
- devTools.addListener(
- Network.requestWillBeSent(),
- request -> {
- String url = request.getRequest().getUrl();
- if (!cookieConfig.getCookies(url).isEmpty()) {
- cookieConfig.getCookies(url).forEach(cookie -> driver.manage().addCookie(cookie));
- }
- requests.put(request.getRequestId().toString(), request);
- }
- );
- }
-
- public void captureHttpResponse() {
- devTools.addListener(
- Network.responseReceived(),
- response -> {
- String requestId = response.getRequestId().toString();
- if (requests.containsKey(requestId)) {
- RequestWillBeSent request = requests.get(requestId);
- Headers headers = request.getRequest().getHeaders();
- if (response.getType().equals(ResourceType.XHR)) {
- NetWorkInfo netWorkInfo = new NetWorkInfo();
- if (headers.get("Authorization") != null) {
- System.setProperty("token", Objects.requireNonNull(headers.get("Authorization")).toString());
- netWorkInfo.setAuthorizationBearer(
- (Objects.requireNonNull(headers.get("Authorization"))).toString());
- }
- netWorkInfo.setRequestId(requestId);
- netWorkInfo.setRequestUrl(request.getRequest().getUrl());
- netWorkInfo.setRequestMethod(request.getRequest().getMethod());
- netWorkInfo.setResponseStatus(response.getResponse().getStatus().toString());
- try {
- String bodyResponse = devTools.send(Network.getResponseBody(response.getRequestId())).getBody();
- netWorkInfo.setResponseBody(bodyResponse);
- } catch (DevToolsException ignored) {
- // Ignored because the response body is not always available.
- }
- netWorkInfos.add(netWorkInfo);
- }
- }
- requests.remove(requestId);
- }
- );
- }
-
- protected void edge() {
- if (this.os.toLowerCase().contains("windows")) {
- WebDriverManager.edgedriver().setup();
- } else {
- Assert.fail("browser edge non compatibile con il os : " + this.os);
- }
- EdgeOptions edgeOptions = new EdgeOptions();
- edgeOptions.setCapability("ms:inPrivate", true);
- if (this.headless != null && this.headless.equalsIgnoreCase("true")) {
- edgeOptions.addArguments("window-size=1920,1080");
- edgeOptions.addArguments("--headless");
- }
- driver = new EdgeDriver(edgeOptions);
- if (this.headless != null && this.headless.equalsIgnoreCase("false")) {
- driver.manage().window().maximize();
- }
+/*
+* Modifiche principali:
+Iniezione di WebDriver: Ho rimosso tutte le istanze di new ChromeDriver(), new FirefoxDriver(), ecc., e ho creato un bean in una classe separata (che andremo a configurare subito dopo) che gestisce la creazione del WebDriver.
- driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(20));
- logger.info("edge driver started");
- }
+Rimozione di new per altre dipendenze: Ho sostituito la creazione di oggetti come CookieConfig, RestDelegation e RestContact con l'iniezione di dipendenze utilizzando @Autowired.*/
- @Before
- public void startScenario(Scenario scenario) {
- logger.info("-------------------------------------------START SCENARIO: " + scenario.getName() + "------------------------------------------------");
- this.scenario = scenario.getName();
- Collection tags = scenario.getSourceTagNames();
- for (String tag : tags) {
- if (tag.startsWith("@TA_")) {
- MDC.put("tag", tag);
- MDC.put("team", "TA-QA");
- }
- }
-
- logger.info("os type : " + this.os);
- logger.info("user language : " + System.getProperty("user.language"));
-
- String browser = null;
- if (System.getProperty("browser") == null) {
- Assert.fail("valorizzare la variabile browser");
- } else {
- browser = System.getProperty("browser");
- }
- if (System.getProperty("headless") != null) {
- this.headless = System.getProperty("headless");
- }
- if (System.getProperty("environment") == null) {
- Assert.fail("valorizzare la variabile environment");
- }
- switch (browser) {
- case "firefox" -> firefox();
- case "chrome" -> chrome();
- case "edge" -> edge();
- default -> {
- logger.error("browser not correct");
- Assert.fail("browser not correct");
- }
- }
- cookieConfig.addCookie();
- }
-
- @After
- public void endScenario(Scenario scenario) {
-
- System.clearProperty("IUN");
-
- for (NetWorkInfo netWorkInfo : netWorkInfos) {
- logger.info(netWorkInfo.getRequestId());
- logger.info(netWorkInfo.getRequestUrl());
- logger.info(netWorkInfo.getRequestMethod());
- logger.info(netWorkInfo.getResponseStatus());
- logger.info(netWorkInfo.getResponseBody());
- }
-
- if (scenario.isFailed()) {
- logger.error("scenario go to error : " + scenario.getName());
- try {
- File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
- byte[] screenshotByte = FileUtils.readFileToByteArray(screenshot);
- Date date = Calendar.getInstance().getTime();
- DateFormat formatter = new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss");
- String today = formatter.format(date);
- String testCaseFailed = "logs/" + scenario.getName() + "_" + today + ".png";
- FileUtils.copyFile(screenshot, new File(testCaseFailed));
- scenario.attach(screenshotByte, "image/png", scenario.getName());
- } catch (IOException e) {
- logger.error(e.getCause().toString());
- }
- }
-
- logger.info("quit driver");
- driver.quit();
- requests.clear();
- netWorkInfos.clear();
- try {
- TimeUnit.SECONDS.sleep(5);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- logger.info("-------------------------------------------END SCENARIO: " + scenario.getName() + "------------------------------------------------");
- }
-
- /**
- * Clear the delegate of PF after the scenario
- * P.S: This will work only if you invoke the feature step that creates the delegate
- */
- @After("@DeleghePF or @DeleghePG")
- public void clearDelegate() {
- logger.info("REVOCA TUTTE LE DELEGHE....");
- MandateSingleton mandateSingleton = MandateSingleton.getInstance();
- String mandateId = mandateSingleton.getMandateId(Hooks.getScenario());
- if (mandateId != null) {
- logger.info("REVOCA DELEGA: "+mandateId);
- RestDelegation restDelegation = RestDelegation.getInstance();
- restDelegation.revokeDelegation(mandateId);
- logger.info("Delega revocata con successo");
- } else {
- logger.info("mandateId non trovato");
- }
- }
-
- /**
- * Clear directory of file downloaded
- * P.S: This will work only if you invoke the feature step that creates the delegate
- */
- @After("@File")
- public void clearDirectory() {
- String folderPath = System.getProperty("downloadFilePath");
-
- File folder = new File(folderPath);
-
- if (folder.isDirectory()) {
- File[] files = folder.listFiles();
- for (File file : files) {
- if (file.isFile()) {
- if (file.delete()) {
- System.out.println("File cancellato: " + file.getAbsolutePath());
- } else {
- System.out.println("Impossibile cancellare il file: " + file.getAbsolutePath());
- }
- }
- }
- }
- }
-
- /**
- * Clear the contacts of PF after the scenario
- * P.S: This will work only if there are any contacts available
- */
-
- @After(value = "@recapitiPF or @recapitiPG")
- @And("Rimuovi tutti i recapiti se esistono")
- public void clearRecapiti() throws IOException {
-
- RestContact restContact = RestContact.getInstance();
- List digitalAddress = restContact.getAllDigitalAddress();
-
- // Check for legal ones and remove them
- if (digitalAddress != null) {
- logger.info("SENDER DIGITAL ADDRESS...." + digitalAddress);
- logger.info("SENDER DIGITAL ADDRESS...." + digitalAddress.size());
- digitalAddress.forEach(addressDigital -> {
- logger.info("SENDER_ID: " + addressDigital.getSenderId());
- if (addressDigital.getSenderId().equalsIgnoreCase("default")) {
+public class Hooks {
- if ("PEC".equalsIgnoreCase(addressDigital.getChannelType())) {
- logger.info("Remove Digital Address LegalPec: " + addressDigital.getSenderId());
- restContact.removeDigitalAddressLegalPec();
- } else {
- logger.info("Remove Digital Address Courtesy Email: " + addressDigital.getSenderId());
- restContact.removeDigitalAddressCourtesyEmail();
- }
- } else {
- logger.info("Remove Special Contact: " + addressDigital.getSenderId());
- restContact.removeSpecialContact(addressDigital);
- }
- });
- }
- }
+//Update HooksNew
}
diff --git a/src/main/java/it/pn/frontend/e2e/listeners/HooksNew.java b/src/main/java/it/pn/frontend/e2e/listeners/HooksNew.java
new file mode 100644
index 000000000..1f82e7a0e
--- /dev/null
+++ b/src/main/java/it/pn/frontend/e2e/listeners/HooksNew.java
@@ -0,0 +1,180 @@
+package it.pn.frontend.e2e.listeners;
+
+
+import static java.lang.Boolean.TRUE;
+import static org.springframework.util.ObjectUtils.isEmpty;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.text.SimpleDateFormat;
+import java.time.Duration;
+import java.util.*;
+
+import io.cucumber.java.After;
+import io.cucumber.java.Before;
+import io.cucumber.java.Scenario;
+import io.cucumber.java.en.And;
+import it.pn.frontend.e2e.config.WebDriverConfig;
+import it.pn.frontend.e2e.model.singleton.MandateSingleton;
+import it.pn.frontend.e2e.rest.RestContact;
+import it.pn.frontend.e2e.rest.RestDelegation;
+import it.pn.frontend.e2e.utility.CookieConfig;
+import lombok.Getter;
+import org.apache.commons.io.FileUtils;
+import org.openqa.selenium.OutputType;
+import org.openqa.selenium.TakesScreenshot;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.devtools.DevTools;
+import org.openqa.selenium.devtools.HasDevTools;
+import org.openqa.selenium.devtools.v126.network.Network;
+import org.openqa.selenium.devtools.v126.network.model.RequestWillBeSent;
+import org.openqa.selenium.edge.EdgeDriver;
+import org.openqa.selenium.edge.EdgeOptions;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+import org.openqa.selenium.firefox.FirefoxProfile;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+
+import io.github.bonigarcia.wdm.WebDriverManager;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+
+
+public class HooksNew {
+
+ /**
+ * Logger
+ */
+ private static final Logger logger = LoggerFactory.getLogger(HooksNew.class);
+
+
+ @Getter
+ public WebDriver driver;
+
+ private WebDriverWait wait;
+
+ private DevTools devTools;
+
+ private final Map requests = new HashMap<>();
+ @Getter
+ public static String scenario;
+
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+
+ @Getter
+ private final List netWorkInfos = new ArrayList<>();
+
+ private final String os = System.getProperty("os.name");
+ @Autowired
+ MandateSingleton mandateSingleton ;
+ @Autowired
+ private RestContact restContact;
+ @Autowired
+ private CookieConfig cookieConfig;
+ @Autowired
+ RestDelegation restDelegation ;
+
+ @Before
+ public void startScenario(Scenario scenario) {
+ logger.info("----- START SCENARIO: {} -----", scenario.getName());
+ HooksNew.scenario = scenario.getName();
+
+ scenario.getSourceTagNames().stream()
+ .filter(tag -> tag.startsWith("@TA_"))
+ .forEach(tag -> {
+ MDC.put("tag", tag);
+ MDC.put("team", "TA-QA");
+ });
+
+ driver = webDriverConfig.webDriver();
+ }
+
+ @After
+ public void endScenario(Scenario scenario) throws IOException {
+ System.clearProperty("IUN");
+ webDriverConfig.getNetWorkInfos().forEach(netWorkInfo -> {
+ logger.info("Request ID: {}", netWorkInfo.getRequestId());
+ logger.info("Request URL: {}", netWorkInfo.getRequestUrl());
+ logger.info("Method: {}", netWorkInfo.getRequestMethod());
+ logger.info("Response Status: {}", netWorkInfo.getResponseStatus());
+ logger.info("Response Body: {}", netWorkInfo.getResponseBody());
+ });
+
+ if (scenario.isFailed()) {
+ logger.error("Scenario failed: {}", scenario.getName());
+ var screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
+ var screenshotBytes = Files.readAllBytes(screenshot.toPath());
+ var formatter = new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss");
+ var timestamp = formatter.format(new Date());
+ var fileName = "logs/" + scenario.getName() + "_" + timestamp + ".png";
+ FileUtils.copyFile(screenshot, new File(fileName));
+ scenario.attach(screenshotBytes, "image/png", scenario.getName());
+ }
+
+ driver.quit();
+ webDriverConfig.clearRequest();
+ webDriverConfig.clearNetWorkInfos();
+ logger.info("----- END SCENARIO: {} -----", scenario.getName());
+ }
+
+
+ @And("Revoca deleghe se esistono")
+ @After("@DeleghePF or @DeleghePG")
+ public void clearDelegate() {
+ logger.info("Revoking all delegations...");
+ var mandateId = mandateSingleton.getMandateId(HooksNew.getScenario());
+ if (mandateId != null) {
+ restDelegation.revokeDelegation(mandateId);
+ logger.info("Delegation revoked: {}", mandateId);
+ } else {
+ logger.info("Mandate ID not found");
+ }
+ }
+
+ @After("@File")
+ public void clearDirectory() {
+ var folderPath = webDriverConfig.getDownloadFilePath();
+ var folder = new File(folderPath);
+ if (folder.isDirectory()) {
+ Arrays.stream(Objects.requireNonNull(folder.listFiles()))
+ .filter(File::isFile)
+ .forEach(file -> {
+ if (file.delete()) {
+ logger.info("Deleted file: {}", file.getAbsolutePath());
+ } else {
+ logger.warn("Failed to delete file: {}", file.getAbsolutePath());
+ }
+ });
+ }
+ }
+
+ @And("Rimuovi tutti i recapiti se esistono")
+ public void clearRecapiti() {
+ var digitalAddresses = restContact.getAllDigitalAddress();
+ if (digitalAddresses != null && !digitalAddresses.isEmpty()) {
+ digitalAddresses.forEach(address -> {
+ if ("default".equalsIgnoreCase(address.getSenderId())) {
+ if ("PEC".equalsIgnoreCase(address.getChannelType())) {
+ restContact.removeDigitalAddressLegalPec();
+ } else {
+ restContact.removeDigitalAddressCourtesyEmail();
+ }
+ } else {
+ restContact.removeSpecialContact(address);
+ }
+ });
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateRequestPF.java b/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateRequestPF.java
index 688905a1f..ad628cc31 100644
--- a/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateRequestPF.java
+++ b/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateRequestPF.java
@@ -2,6 +2,7 @@
import lombok.Builder;
import lombok.Data;
+import org.springframework.stereotype.Component;
import java.util.List;
diff --git a/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateRequestPG.java b/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateRequestPG.java
index 719cb9e44..45a026985 100644
--- a/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateRequestPG.java
+++ b/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateRequestPG.java
@@ -2,6 +2,7 @@
import lombok.Builder;
import lombok.Data;
+import org.springframework.stereotype.Component;
import java.util.List;
diff --git a/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateResponsePF.java b/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateResponsePF.java
index 79b45bf96..d01aa7e88 100644
--- a/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateResponsePF.java
+++ b/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateResponsePF.java
@@ -4,6 +4,7 @@
import lombok.Builder;
import lombok.Data;
import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
diff --git a/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateResponsePG.java b/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateResponsePG.java
index a0b39ea56..4777905cc 100644
--- a/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateResponsePG.java
+++ b/src/main/java/it/pn/frontend/e2e/model/delegate/DelegateResponsePG.java
@@ -4,6 +4,7 @@
import lombok.Builder;
import lombok.Data;
import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
diff --git a/src/main/java/it/pn/frontend/e2e/model/enums/AppPortal.java b/src/main/java/it/pn/frontend/e2e/model/enums/AppPortal.java
index 6d85d09a3..2726afd5e 100644
--- a/src/main/java/it/pn/frontend/e2e/model/enums/AppPortal.java
+++ b/src/main/java/it/pn/frontend/e2e/model/enums/AppPortal.java
@@ -1,5 +1,8 @@
package it.pn.frontend.e2e.model.enums;
+import it.pn.frontend.e2e.config.WebDriverConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+
public enum AppPortal {
PA("https://selfcare.", "#selfCareToken=", TokenLogin.PA_TOKEN.getToken()),
PF("https://cittadini.", "#token=", TokenLogin.PF_DELEGATE_TOKEN.getToken()),
@@ -7,13 +10,16 @@ public enum AppPortal {
HELPDESK("https://helpdesk.");
public final String url;
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+
private AppPortal(String url, String paramToken, String token) {
- String env = System.getProperty("environment");
+ String env = webDriverConfig.getEnvironment();
this.url = url + env + ".notifichedigitali.it/" + paramToken + token;
}
private AppPortal(String url) {
- String env = System.getProperty("environment");
+ String env = webDriverConfig.getEnvironment();
this.url = url + env + ".notifichedigitali.it/";
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/model/enums/TokenLogin.java b/src/main/java/it/pn/frontend/e2e/model/enums/TokenLogin.java
index a54bba3b8..c7701a8c8 100644
--- a/src/main/java/it/pn/frontend/e2e/model/enums/TokenLogin.java
+++ b/src/main/java/it/pn/frontend/e2e/model/enums/TokenLogin.java
@@ -1,5 +1,8 @@
package it.pn.frontend.e2e.model.enums;
+import it.pn.frontend.e2e.config.WebDriverConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+
public enum TokenLogin {
PF_DELEGATE_TOKEN(
"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjBBS3RoQjlYNS1fNHRWUGxNRmZUTHdWSkt1akxuSEhkODdSUkdtX1VTR0EifQ.eyJuYW1lIjoiR2FpbyBHaXVsaW8iLCJmYW1pbHlfbmFtZSI6IkNlc2FyZSIsInVpZCI6ImEwMWI2MmQ0LWUzZjgtNDhmMy1hNGQ4LWNmNjI4YTM0Yjc0NSIsImZpc2NhbF9udW1iZXIiOiJDU1JHR0w0NEwxM0g1MDFFIiwic3BpZF9sZXZlbCI6Imh0dHBzOi8vd3d3LnNwaWQuZ292Lml0L1NwaWRMMiIsImZyb21fYWEiOmZhbHNlLCJhdWQiOiJjaXR0YWRpbmkuZGV2Lm5vdGlmaWNoZWRpZ2l0YWxpLml0IiwibGV2ZWwiOiJMMiIsImlhdCI6MTY5OTg4NjU3OCwiZXhwIjoyMDE1NDQ5MjAwLCJpc3MiOiJodHRwczovL2h1Yi1sb2dpbi5zcGlkLmRldi5ub3RpZmljaGVkaWdpdGFsaS5pdCIsImp0aSI6Il9iMGI5MGYzNjc2ZTA1MjYxMzAzYyJ9.PaTdY6Hl8RmIJdmobl0ahjawsWdmXrehnWEzRgmQT4Wf7i4Lvz8h_FgXUtt9TB8rZ1t92j2XrqOip1Pa_fSXAUv0Gx4wgb1W4ll74iPs7Mf1sXsZxFQyrd_XwTcvnRYHalAsOizbINNckm-NB0Vo-bRzlgpqSN0dnZ2r9lYSryf5H-B7214mlXvmQu-QD64iyLibdmU8cFim9E5A3hIT9vCGdSGZBsLGkC_oYhmMGLz-N4UeChJid98c37mI4EGpFMwJ7sifDgggCzHbaQBdBKlNPzRIosGZLju6zILzZsEpVkIhYNi5suf5sJeHR56adXKlYIkMWUc8Gdh5g5YskA",
@@ -20,13 +23,16 @@ public enum TokenLogin {
private final String devToken;
private final String testToken;
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+
private TokenLogin(String devToken, String testToken) {
this.devToken = devToken;
this.testToken = testToken;
}
public String getToken() {
- String env = System.getProperty("environment");
+ String env = webDriverConfig.getEnvironment();
return env.equalsIgnoreCase("dev") ? devToken : testToken;
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/model/radd/StartTransaction/StartTransactionRequest.java b/src/main/java/it/pn/frontend/e2e/model/radd/StartTransaction/StartTransactionRequest.java
index 161a6f4a5..61c042c1a 100644
--- a/src/main/java/it/pn/frontend/e2e/model/radd/StartTransaction/StartTransactionRequest.java
+++ b/src/main/java/it/pn/frontend/e2e/model/radd/StartTransaction/StartTransactionRequest.java
@@ -1,19 +1,10 @@
package it.pn.frontend.e2e.model.radd.StartTransaction;
import com.fasterxml.jackson.annotation.JsonInclude;
-import com.google.gson.internal.bind.DefaultDateTypeAdapter;
-import io.cucumber.messages.types.Hook;
-import it.pn.frontend.e2e.listeners.Hooks;
import lombok.Data;
-import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
-
import java.time.Instant;
-import java.time.LocalDate;
-import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
-import java.util.UUID;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
diff --git a/src/main/java/it/pn/frontend/e2e/model/singleton/MandateSingleton.java b/src/main/java/it/pn/frontend/e2e/model/singleton/MandateSingleton.java
index a480c872c..2d906eb8e 100644
--- a/src/main/java/it/pn/frontend/e2e/model/singleton/MandateSingleton.java
+++ b/src/main/java/it/pn/frontend/e2e/model/singleton/MandateSingleton.java
@@ -1,36 +1,36 @@
package it.pn.frontend.e2e.model.singleton;
+import org.springframework.stereotype.Component;
+
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-
+/*
+*Modifiche Apportate:
+Annotazione @Component: La classe è annotata con @Component, permettendo a Spring di gestire l'istanza come un Singleton automaticamente.
+Rimozione del metodo getInstance: Con l'uso di @Component, non è necessario implementare il pattern Singleton manualmente. Spring gestirà una sola istanza di questa classe nel contesto dell'applicazione.
+Costruttore privato rimosso: Non è necessario bloccare il costruttore dato che Spring garantisce l’unicità dell’istanza.
+* */
+
+@Component
public class MandateSingleton {
- private Map scenarioMandateId = new ConcurrentHashMap<>();
- private Map verificationCodeMandateId = new ConcurrentHashMap<>();
- private static MandateSingleton instance;
- private void MandateSingleton(){
- }
-
- public static synchronized MandateSingleton getInstance() {
- if (instance == null) {
- instance = new MandateSingleton();
- }
- return instance;
- }
+ private final Map scenarioMandateId = new ConcurrentHashMap<>();
+ private final Map verificationCodeMandateId = new ConcurrentHashMap<>();
- public void setScenarioMandateId(String scenarioName,String mandateId){
- scenarioMandateId.put(scenarioName,mandateId);
+ // Spring Boot gestisce automaticamente l'istanza Singleton per i componenti
+ public void setScenarioMandateId(String scenarioName, String mandateId) {
+ scenarioMandateId.put(scenarioName, mandateId);
}
- public String getMandateId(String scenarioName){
+ public String getMandateId(String scenarioName) {
return scenarioMandateId.get(scenarioName);
}
- public void setScenarioVerificationCode(String mandateId,String verificationCode){
- verificationCodeMandateId.put(mandateId,verificationCode);
+ public void setScenarioVerificationCode(String mandateId, String verificationCode) {
+ verificationCodeMandateId.put(mandateId, verificationCode);
}
- public String getVerificationCode(String mandateId){
+ public String getVerificationCode(String mandateId) {
return verificationCodeMandateId.get(mandateId);
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/model/singleton/NotificationSingleton.java b/src/main/java/it/pn/frontend/e2e/model/singleton/NotificationSingleton.java
index 6a40b4ba0..ef0591920 100644
--- a/src/main/java/it/pn/frontend/e2e/model/singleton/NotificationSingleton.java
+++ b/src/main/java/it/pn/frontend/e2e/model/singleton/NotificationSingleton.java
@@ -1,29 +1,39 @@
package it.pn.frontend.e2e.model.singleton;
+import org.springframework.stereotype.Component;
+
+import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-
+/*
+* Modifiche Effettuate:
+Annotazione @Component: Per rendere la classe un bean Spring, in modo che venga automaticamente gestita come singleton.
+Rimozione del Metodo getInstance: Non è più necessario gestire manualmente l’istanza; Spring gestirà la creazione e l’unicità del bean.
+Documentazione: Ho aggiunto i JavaDoc ai metodi setScenarioIun e getIun per migliorare la comprensibilità.
+* */
+@Component
public class NotificationSingleton {
- private Map scenarioIun = new ConcurrentHashMap<>();
- private static NotificationSingleton instance;
-
- private void NotificationSingleton(){
- }
-
- public static synchronized NotificationSingleton getInstance() {
- if (instance == null) {
- instance = new NotificationSingleton();
- }
- return instance;
- }
+ private final Map scenarioIun = new ConcurrentHashMap<>();
- public void setScenarioIun(String scenarioName,String iun){
- scenarioIun.put(scenarioName,iun);
+ /**
+ * Setta un identificatore unico di notifica (IUN) per uno specifico scenario.
+ *
+ * @param scenarioName nome dello scenario
+ * @param iun identificatore unico della notifica
+ */
+ public void setScenarioIun(String scenarioName, String iun) {
+ scenarioIun.put(scenarioName, iun);
}
- public String getIun(String scenarioName){
+ /**
+ * Recupera l'identificatore unico di notifica (IUN) per uno specifico scenario.
+ *
+ * @param scenarioName nome dello scenario
+ * @return l'identificatore unico della notifica, o null se non trovato
+ */
+ public String getIun(String scenarioName) {
return scenarioIun.get(scenarioName);
}
}
\ No newline at end of file
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/DestinatarioPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/DestinatarioPage.java
index 0663295d6..2dfb7b39a 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/DestinatarioPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/DestinatarioPage.java
@@ -4,11 +4,12 @@
import it.pn.frontend.e2e.common.BasePage;
import it.pn.frontend.e2e.exceptions.RestNotificationException;
import it.pn.frontend.e2e.listeners.Hooks;
+import it.pn.frontend.e2e.listeners.HooksNew;
import it.pn.frontend.e2e.model.documents.Document;
-import it.pn.frontend.e2e.model.notification.NewNotificationRequest;
-import it.pn.frontend.e2e.model.notification.NewNotificationResponse;
import it.pn.frontend.e2e.model.enums.NotificationFeePolicyEnum;
import it.pn.frontend.e2e.model.enums.PhysicalCommunicationTypeEnum;
+import it.pn.frontend.e2e.model.notification.NewNotificationRequest;
+import it.pn.frontend.e2e.model.notification.NewNotificationResponse;
import it.pn.frontend.e2e.model.singleton.NotificationSingleton;
import it.pn.frontend.e2e.rest.RestNotification;
import it.pn.frontend.e2e.rest.RestRaddAlternative;
@@ -17,31 +18,43 @@
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
-import org.junit.Assert;
-import org.openqa.selenium.By;
-import org.openqa.selenium.TimeoutException;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
+import org.junit.jupiter.api.Assertions;
+import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Slf4j
+@Component
public class DestinatarioPage extends BasePage {
@Getter
@Setter
private NewNotificationRequest notificationRequest;
- private final NotificationSingleton notificationSingleton = NotificationSingleton.getInstance();
- private final RestNotification restNotification = new RestNotification();
- private static final NotificationBuilder notificationBuilder = new NotificationBuilder();
- private int destinatariNumber;
- private final WebDriver driver = Hooks.driver;
+
+ @Autowired
+ private NotificationSingleton notificationSingleton;
+
+ @Autowired
+ private RestNotification restNotification;
+
+ @Autowired
+ private NotificationBuilder notificationBuilder;
+
+ @Autowired
+ @Lazy
+ private HooksNew hooks;
+
+ private int destinatariNumber;
//Questa classe è utilizzata per metodi in comune tra PF e PG
+ @Autowired
public DestinatarioPage(WebDriver driver) {
super(driver);
}
@@ -55,34 +68,39 @@ public DestinatarioPage(WebDriver driver) {
@FindBy(id = "notificationsTable.body.row")
List listaNotificheDelegante;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
public void inserimentoDataErrato() {
String data = "01/01/1111";
- getWebDriverWait(10).withMessage("Il campo data inizio non è visibile").until(ExpectedConditions.visibilityOfAllElements(this.dataInizioField));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOfAllElements(this.dataInizioField));
dataInizioField.click();
dataInizioField.sendKeys(data);
- getWebDriverWait(3).withMessage("Il valore della data che si vuole inserire non corrisponde").until(ExpectedConditions.attributeToBe(this.dataInizioField, "value", data));
- getWebDriverWait(10).withMessage("Il campo data fine non è visibile").until(ExpectedConditions.visibilityOfAllElements(this.dataFineField));
+ getWebDriverWait(3).until(ExpectedConditions.attributeToBe(this.dataInizioField, "value", data));
+
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOfAllElements(this.dataFineField));
dataFineField.click();
dataFineField.sendKeys(data);
- getWebDriverWait(3).withMessage("Il valore della data che si vuole inserire non corrisponde").until(ExpectedConditions.attributeToBe(this.dataFineField, "value", data));
+ getWebDriverWait(3).until(ExpectedConditions.attributeToBe(this.dataFineField, "value", data));
}
public boolean isDateBoxInvalid() {
- final String isTextboxInvalid = "true";
+ String isTextboxInvalid = "true";
boolean invalidBoxDate = true;
try {
- getWebDriverWait(10).withMessage("Il campo data inizio non è visibile").until(ExpectedConditions.visibilityOfAllElements(this.dataInizioField, this.dataFineField));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOfAllElements(this.dataInizioField, this.dataFineField));
String ariaInvalidInizio = dataInizioField.getAttribute("aria-invalid");
String ariaInvalidFine = dataFineField.getAttribute("aria-invalid");
if (isTextboxInvalid.equals(ariaInvalidInizio) || isTextboxInvalid.equals(ariaInvalidFine)) {
log.info("Almeno un campo data è in stato invalido");
} else {
log.error("Nessuno dei campi data è passato allo stato invalido");
- Assert.fail("Nessuno dei campi data è passato allo stato invalido");
+ Assertions.fail("Nessuno dei campi data è passato allo stato invalido");
}
} catch (TimeoutException e) {
log.error("Campi data non visualizzati correttamente con errore: " + e.getMessage());
- Assert.fail("Campi data non visualizzati correttamente con errore: " + e.getMessage());
+ Assertions.fail("Campi data non visualizzati correttamente con errore: " + e.getMessage());
}
return invalidBoxDate;
}
@@ -95,60 +113,28 @@ public void clickButtonNotificheDelegateOnSideMenu(String nomeDelegante) {
String id = "side-item-" + nomeDelegante;
By buttonNotificheOnSideMenu = By.id(id);
- getWebDriverWait(10).withMessage("bottone notifiche nel layout non visibile").until(ExpectedConditions.visibilityOfElementLocated(buttonNotificheOnSideMenu));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(buttonNotificheOnSideMenu));
this.js().executeScript("arguments[0].click()", this.element(buttonNotificheOnSideMenu));
-
}
public void clickSulDettaglioNotificaDelegante() {
WebElement singolaNotificaDelegante = listaNotificheDelegante.get(0);
- getWebDriverWait(10).withMessage("la prima notifica della tabella non è visibile").until(ExpectedConditions.visibilityOf(singolaNotificaDelegante));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOf(singolaNotificaDelegante));
log.info("Si clicca sulla prima notifica del delegante");
singolaNotificaDelegante.click();
}
public void clickProdotto(String xpath) {
By prodottoDestinatario = By.xpath(xpath);
- getWebDriverWait(10).withMessage("prodotto non disponbile").until(ExpectedConditions.visibilityOfElementLocated(prodottoDestinatario));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(prodottoDestinatario));
element(prodottoDestinatario).click();
}
- public void clickTuttiGliEnti() {
- By tuttiGliEnti = By.id("tutti-gli-enti-selezionati");
- getWebDriverWait(10).withMessage("Il radio button 'tutti gli enti selezionati' non è visibile").until(ExpectedConditions.visibilityOfElementLocated(tuttiGliEnti));
- element(tuttiGliEnti).click();
- }
-
- public void clickSoloEntiSelezionati() {
- By soloEntiSelezionati = By.id("enti-selezionati");
- getWebDriverWait(10).withMessage("Il radio button 'solo enti selezionati' non è visibile").until(ExpectedConditions.visibilityOfElementLocated(soloEntiSelezionati));
- element(soloEntiSelezionati).click();
- }
-
- public void clickListaEnti() {
- By listaEnti = By.id("enti");
- getWebDriverWait(10).withMessage("Il menù a tendina degli enti non è visibile").until(ExpectedConditions.visibilityOfElementLocated(listaEnti));
- element(listaEnti).click();
- }
-
- public void controlloEntiRadice(List enti) {
- for (String ente : enti) {
- By enteRadice = By.xpath("//li//p[contains(text(),'" + ente + "')]");
- getWebDriverWait(10).withMessage("Ente: " + ente + " non visibile").until(ExpectedConditions.visibilityOfElementLocated(enteRadice));
- }
- }
-
- public void checkBannerAnnullamentoNotifica() {
- By bannerAnnullamentoNotificaBy = By.xpath("//div[@data-testid='cancelledAlertText']");
- getWebDriverWait(10).withMessage("Il banner di annullamento della notifica non è presente").until(ExpectedConditions.visibilityOfElementLocated(bannerAnnullamentoNotificaBy));
- getWebDriverWait(10).withMessage("Il banner di annullamento della notifica presenta la corretta descrizione").until(
- ExpectedConditions.attributeToBe(bannerAnnullamentoNotificaBy, "textContent", "Questa notifica è stata annullata dall’ente mittente. Puoi ignorarne il contenuto."));
- }
-
public void checkCreateNewNotification() throws RestNotificationException {
int maxAttempts = 4;
int attempt = 1;
- Assert.assertNotNull("Non può essere creata una notifica senza alcun destinatario", notificationRequest.getRecipients());
+ Assertions.assertNotNull(notificationRequest.getRecipients(), "Non può essere creata una notifica senza alcun destinatario");
+
while (attempt <= maxAttempts) {
NewNotificationResponse responseOfCreateNotification = restNotification.newNotificationWithOneRecipientAndDocument(notificationRequest);
@@ -158,18 +144,18 @@ public void checkCreateNewNotification() throws RestNotificationException {
LinkedTreeMap getNotificationStatus;
String notificationStatus;
do {
- Assert.assertTrue("La notifica risulta ancora in stato WAITING dopo 5 tentativi", maxAttemptsPolling <= 4);
+ Assertions.assertTrue(maxAttemptsPolling <= 4, "La notifica risulta ancora in stato WAITING dopo 5 tentativi");
log.info(responseOfCreateNotification.getNotificationRequestId());
getNotificationStatus = restNotification.getNotificationStatus(responseOfCreateNotification.getNotificationRequestId());
notificationStatus = getNotificationStatus.get("notificationRequestStatus").toString();
if (!notificationStatus.equals("ACCEPTED")) {
- WebTool.waitTime(90);
+ webTool.waitTime(90);
log.info("Tentativo n. " + maxAttemptsPolling + " - Stato notifica: " + notificationStatus);
maxAttemptsPolling++;
} else {
log.info("Notifica per destinatario creata con successo");
- notificationSingleton.setScenarioIun(Hooks.getScenario(), WebTool.decodeNotificationRequestId(responseOfCreateNotification.getNotificationRequestId()));
- log.info("Il codice IUN della notifica creata è il seguente: {}", notificationSingleton.getIun(Hooks.getScenario()));
+ notificationSingleton.setScenarioIun(HooksNew.getScenario(), WebTool.decodeNotificationRequestId(responseOfCreateNotification.getNotificationRequestId()));
+ log.info("Il codice IUN della notifica creata è il seguente: {}", notificationSingleton.getIun(HooksNew.getScenario()));
driver.navigate().refresh();
return;
}
@@ -181,21 +167,22 @@ public void checkCreateNewNotification() throws RestNotificationException {
}
}
log.error("Errore nella creazione della notifica per PF dopo {} tentativi", maxAttempts);
- Assert.fail("Errore nella creazione della notifica dopo " + maxAttempts + " tentativi");
+ Assertions.fail("Errore nella creazione della notifica dopo " + maxAttempts + " tentativi");
}
public void aggiuntaDestinatarioANotifica(Map datiDestinatario) {
- Assert.assertTrue("Non è possibile aggiungere un ulteriore destinatario", destinatariNumber <= 4);
+ Assertions.assertTrue(destinatariNumber <= 4, "Non è possibile aggiungere un ulteriore destinatario");
log.info("Si procede con l'inserimento del destinatario nella notifica");
- String costiNotifica = "false";
- if (notificationRequest.getNotificationFeePolicy() == NotificationFeePolicyEnum.DELIVERY_MODE) {
- costiNotifica = "true";
- }
+ String costiNotifica = notificationRequest.getNotificationFeePolicy() == NotificationFeePolicyEnum.DELIVERY_MODE ? "true" : "false";
notificationRequest.setRecipients(notificationBuilder.destinatarioBuilder(datiDestinatario, notificationRequest.getRecipients()));
- WebTool.waitTime(15);
- log.info("NUMERO DESTINATARI...: " + notificationRequest.getRecipients().size());
- log.info("DESTINATARIO...: " + destinatariNumber);
- notificationRequest.getRecipients().get(destinatariNumber).setPayments(notificationBuilder.paymentsBuilder(Integer.parseInt(datiDestinatario.getOrDefault("avvisoPagoPa", "0")), Integer.parseInt(datiDestinatario.getOrDefault("F24", "0")), costiNotifica));
+
+ log.info("NUMERO DESTINATARI: " + notificationRequest.getRecipients().size());
+ notificationRequest.getRecipients().get(destinatariNumber).setPayments(
+ notificationBuilder.paymentsBuilder(
+ Integer.parseInt(datiDestinatario.getOrDefault("avvisoPagoPa", "0")),
+ Integer.parseInt(datiDestinatario.getOrDefault("F24", "0")),
+ costiNotifica
+ ));
destinatariNumber++;
}
@@ -212,4 +199,35 @@ public void raddFlow(String token, String tipoDestinatario, String codiceFiscale
restRaddAlternative.completeTransactionRaddAlternative(operationId);
}
+ public void clickTuttiGliEnti() {
+ By tuttiGliEnti = By.id("tutti-gli-enti-selezionati");
+ getWebDriverWait(10).withMessage("Il radio button 'tutti gli enti selezionati' non è visibile").until(ExpectedConditions.visibilityOfElementLocated(tuttiGliEnti));
+ element(tuttiGliEnti).click();
+ }
+
+ public void clickSoloEntiSelezionati() {
+ By soloEntiSelezionati = By.id("enti-selezionati");
+ getWebDriverWait(10).withMessage("Il radio button 'solo enti selezionati' non è visibile").until(ExpectedConditions.visibilityOfElementLocated(soloEntiSelezionati));
+ element(soloEntiSelezionati).click();
+ }
+
+ public void clickListaEnti() {
+ By listaEnti = By.id("enti");
+ getWebDriverWait(10).withMessage("Il menù a tendina degli enti non è visibile").until(ExpectedConditions.visibilityOfElementLocated(listaEnti));
+ element(listaEnti).click();
+ }
+
+ public void controlloEntiRadice(List enti) {
+ for (String ente : enti) {
+ By enteRadice = By.xpath("//li//p[contains(text(),'" + ente + "')]");
+ getWebDriverWait(10).withMessage("Ente: " + ente + " non visibile").until(ExpectedConditions.visibilityOfElementLocated(enteRadice));
+ }
+ }
+
+ public void checkBannerAnnullamentoNotifica() {
+ By bannerAnnullamentoNotificaBy = By.xpath("//div[@data-testid='cancelledAlertText']");
+ getWebDriverWait(10).withMessage("Il banner di annullamento della notifica non è presente").until(ExpectedConditions.visibilityOfElementLocated(bannerAnnullamentoNotificaBy));
+ getWebDriverWait(10).withMessage("Il banner di annullamento della notifica presenta la corretta descrizione").until(
+ ExpectedConditions.attributeToBe(bannerAnnullamentoNotificaBy, "textContent", "Questa notifica è stata annullata dall’ente mittente. Puoi ignorarne il contenuto."));
+ }
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/AccediAPiattaformaNotifichePage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/AccediAPiattaformaNotifichePage.java
index d6ec222e1..047042b9f 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/AccediAPiattaformaNotifichePage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/AccediAPiattaformaNotifichePage.java
@@ -2,15 +2,18 @@
import it.pn.frontend.e2e.common.BasePage;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.util.List;
+@Component
public class AccediAPiattaformaNotifichePage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("AccediAPiattaformaNotifichePage");
@@ -77,19 +80,23 @@ public class AccediAPiattaformaNotifichePage extends BasePage {
@FindBy(xpath = "//*[@id=\"root\"]/div[1]/div/main/div/div/div[1]/div[3]/div[4]/div/button[2]")
List pagopaAllegatoItems;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+ @Autowired
public AccediAPiattaformaNotifichePage(WebDriver driver) {
super(driver);
}
public void waitLoadAccediAPiattaformaNotifichePage() {
- By titleLabel = By.id("login-mode-page-title");
- By loginBy = By.id("spidButton");
- getWebDriverWait(30).withMessage("Il titolo della pagina accedi a piattaforma notifiche non è visibile").until(ExpectedConditions.visibilityOfElementLocated(titleLabel));
- getWebDriverWait(30).withMessage("Il bottone login della pagina accedi a piattaforma notifiche non è visibile e cliccabile").until(ExpectedConditions.and(ExpectedConditions.visibilityOfElementLocated(loginBy),ExpectedConditions.elementToBeClickable(loginBy)));
- logger.info("Accedi A Piattaforma Notifiche Page caricata");
+ By titleLabel = By.id("login-mode-page-title");
+ By loginBy = By.id("spidButton");
+ getWebDriverWait(30).withMessage("Il titolo della pagina accedi a piattaforma notifiche non è visibile").until(ExpectedConditions.visibilityOfElementLocated(titleLabel));
+ getWebDriverWait(30).withMessage("Il bottone login della pagina accedi a piattaforma notifiche non è visibile e cliccabile").until(ExpectedConditions.and(ExpectedConditions.visibilityOfElementLocated(loginBy), ExpectedConditions.elementToBeClickable(loginBy)));
+ logger.info("Accedi A Piattaforma Notifiche Page caricata");
}
@@ -194,7 +201,7 @@ public boolean scaricaAvvisoDisplayed() {
//TODO Verificare....
public boolean piuAvvisiDisplayed() {
- if (pagopaItems.isEmpty()){
+ if (pagopaItems.isEmpty()) {
logger.info("Avvisi pagoPa sono trovati");
return true;
}
@@ -202,7 +209,7 @@ public boolean piuAvvisiDisplayed() {
if (pagopaItems.size() < 2) {
logger.info("Avvisi pagoPa non sono trovati");
return false;
- }else {
+ } else {
logger.info("Avvisi pagoPa sono trovati");
return true;
}
@@ -212,7 +219,7 @@ public boolean allegatoPagoPaDisplayed() {
if (pagopaAllegatoItems.isEmpty()) {
logger.info("Allegati pagoPa non sono trovati");
return true;
- }else {
+ } else {
return false;
}
}
@@ -250,7 +257,7 @@ public boolean siControllaCostiDiNotifica() {
public void cliccaPaga() {
logger.info("Si clicca su bottone paga");
- WebTool.waitTime(5);
+ webTool.waitTime(5);
pagaAvviso = driver.findElement(By.cssSelector("[data-testid='pay-button']"));
pagaAvviso.click();
}
@@ -266,16 +273,17 @@ public void inserireDatiPagamento(String email) {
public void checkoutPagamento() throws InterruptedException {
logger.info("Si procede con il pagamento");
- WebTool.waitTime(5);
+ webTool.waitTime(5);
element(By.cssSelector("[data-qaid='CP']")).click();
- WebTool.waitTime(5);
+ webTool.waitTime(5);
// frame of the card number
WebElement iframeCardNumber = driver.findElement(By.xpath("//iframe[@id='frame_CARD_NUMBER']"));
driver.switchTo().frame(iframeCardNumber);
- WebTool.waitTime(5);
+ webTool.waitTime(5);
getWebDriverWait(10).withMessage("Il textbox numero di carta non è visibile").until(ExpectedConditions.visibilityOf(creditCardNumber));
creditCardNumber.click();
creditCardNumber.clear();
+ logger.info("Si inserisce numero di CC");
creditCardNumber.sendKeys("5127390031101597");
driver.switchTo().defaultContent();
@@ -309,42 +317,40 @@ public void checkoutPagamento() throws InterruptedException {
element(titolare).sendKeys("Titolare");
driver.switchTo().defaultContent();
- WebTool.waitTime(5);
-
- WebElement continuaBottone = driver.findElement(By.xpath("//button[@aria-label='Continua']") );
- getWebDriverWait(7).withMessage("Il bottone Continua non è cliccabile").until(ExpectedConditions.elementToBeClickable(continuaBottone));
+ webTool.waitTime(5);
+ WebElement continuaBottone = driver.findElement(By.xpath("//button[@aria-label='Continue']")); //for local test use //button[@aria-label='Continua']
+ getWebDriverWait(8).withMessage("Il bottone Continua non è cliccabile").until(ExpectedConditions.elementToBeClickable(continuaBottone));
continuaBottone.click();
- WebTool.waitTime(2);
+ webTool.waitTime(10);
//Select Nexi
- WebElement modificaButton = driver.findElement(By.xpath("//button[@aria-label='Modifica PSP']"));
+ WebElement modificaButton = driver.findElement(By.xpath("//button[@aria-label='Change payment service provider (PSP)']")); //for local test use //button[@aria-label='Modifica PSP']
getWebDriverWait(5).withMessage("Il bottone modifica non è cliccabile").until(ExpectedConditions.elementToBeClickable(modificaButton));
modificaButton.click();
- WebTool.waitTime(2);
-
- List nexiButton = driver.findElements(By.xpath("//div[contains(text(),'Nexi')]"));
- WebTool.waitTime(10);
+ webTool.waitTime(10);
+ List nexiButton = driver.findElements(By.xpath("//div[contains(text(),'Intesa Sanpaolo S.p.A')]"));
+ webTool.waitTime(10);
//getWebDriverWait(10).withMessage("Il bottone Nexi non è cliccabile").until(ExpectedConditions.elementToBeClickable(nexiButton));
- if (nexiButton.size()==2){
+ if (nexiButton.size() == 2) {
nexiButton.get(1).click();
- }else {
+ } else {
nexiButton.get(0).click();
}
- WebTool.waitTime(2);
+ webTool.waitTime(5);
- WebElement pagaButton = driver.findElement(By.xpath("//button[@id='paymentCheckPageButtonPay']"));
+ WebElement pagaButton = driver.findElement(By.xpath("//button[@id='paymentCheckPageButtonPay']"));
getWebDriverWait(5).withMessage("Il bottone Paga non è cliccabile").until(ExpectedConditions.elementToBeClickable(pagaButton));
pagaButton.click();
- WebTool.waitTime(35);
- List chiudi = driver.findElements(By.xpath("//button[contains(text(),'Chiudi')]"));
+ webTool.waitTime(50);
+ List chiudi = driver.findElements(By.xpath("//button[contains(text(),'Continue')]")); //for local test use //button[@aria-label='Continua']
getWebDriverWait(10).withMessage("Il bottone Chiudi non è cliccabile").until(ExpectedConditions.elementToBeClickable(chiudi.get(0)));
chiudi.get(0).click();
}
public void siVisualizzaStatoPagato() {
- WebTool.waitTime(10);
+ webTool.waitTime(20);
By statoPagamento = By.xpath("//div[@id='status-chip-Pagato']");
getWebDriverWait(5).withMessage("Lo stato di pagamento non è visibile").until(ExpectedConditions.visibilityOfElementLocated(statoPagamento));
logger.info("Lo stato di pagamento è Pagato");
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ComeVuoiAccederePage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ComeVuoiAccederePage.java
index 45718e777..8217ee89a 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ComeVuoiAccederePage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ComeVuoiAccederePage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.destinatario.personaFisica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,7 +10,10 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class ComeVuoiAccederePage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("ComeVuoiAccederePage");
@@ -18,6 +21,7 @@ public class ComeVuoiAccederePage extends BasePage {
@FindBy(id = "spidButton")
WebElement spidButton;
+ @Autowired
public ComeVuoiAccederePage(WebDriver driver) {
super(driver);
}
@@ -29,7 +33,7 @@ public void waitLoadComeVuoiAccederePage(){
logger.info("Come Vuoi Accedere Page caricata");
}catch (TimeoutException e){
logger.error("Come Vuoi Accedere Page non caricata con errore : "+e.getMessage());
- Assert.fail("Come Vuoi Accedere Page non caricata con errore : "+e.getMessage());
+ Assertions.fail("Come Vuoi Accedere Page non caricata con errore : "+e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ConfermaDatiSpidPFPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ConfermaDatiSpidPFPage.java
index 64c10c4af..a58dd3da7 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ConfermaDatiSpidPFPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ConfermaDatiSpidPFPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.destinatario.personaFisica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,7 +10,10 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class ConfermaDatiSpidPFPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("ConfermaDatiSpidPFPage");
@@ -27,7 +30,7 @@ public class ConfermaDatiSpidPFPage extends BasePage {
@FindBy(css = "input[value='Conferma']")
WebElement confermaButton;
-
+ @Autowired
public ConfermaDatiSpidPFPage(WebDriver driver) {
super(driver);
}
@@ -41,7 +44,7 @@ public void waitLoadConfermaDatiSpidDEPage(){
logger.info("Conferma Dati Spid DE Page caricata");
}catch (TimeoutException e){
logger.error("Conferma Dati Spid DE Page non caricata con errore : "+e.getMessage());
- Assert.fail("Conferma Dati Spid DE Page non caricata con errore : "+e.getMessage());
+ Assertions.fail("Conferma Dati Spid DE Page non caricata con errore : "+e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/DeleghePage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/DeleghePage.java
index b40c7670d..9ab11ed21 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/DeleghePage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/DeleghePage.java
@@ -1,20 +1,28 @@
package it.pn.frontend.e2e.pages.destinatario.personaFisica;
import it.pn.frontend.e2e.common.BasePage;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.util.List;
+@Component
public class DeleghePage extends BasePage {
private final Logger logger = LoggerFactory.getLogger("DeleghePage");
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+
@FindBy(id = "add-delegation-button")
WebElement addDelegaButton;
@@ -27,7 +35,11 @@ public class DeleghePage extends BasePage {
@FindBy(id = "dialog-close-button")
WebElement annullaButton;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+ @Autowired
public DeleghePage(WebDriver driver) {
super(driver);
}
@@ -39,7 +51,7 @@ public void waitDeleghePage() {
this.logger.info("Il titolo o il bottone aggiungi delega è visibile nella pagina aggiungiDeleghe");
} catch (TimeoutException e) {
logger.error("Il titolo o il bottone aggiungi delega non è visibile nella pagina aggiungiDeleghe con errore : " + e.getMessage());
- Assert.fail("Il titolo o il bottone aggiungi delega non è visibile nella pagina aggiungiDeleghe con errore : " + e.getMessage());
+ Assertions.fail("Il titolo o il bottone aggiungi delega non è visibile nella pagina aggiungiDeleghe con errore : " + e.getMessage());
}
}
@@ -47,7 +59,7 @@ public void clickAggiungiDelegaButton() {
getWebDriverWait(10).withMessage("Il bottone aggiungi delega non è visualizzato").until(ExpectedConditions.elementToBeClickable(addDelegaButton));
logger.info("click sul bottone add deleghe");
- WebTool.waitTime(3);
+ webTool.waitTime(3);
this.addDelegaButton.click();
}
@@ -59,7 +71,7 @@ public void controlloCreazioneDelega() {
this.logger.info("Si visualizza la delega creata");
} catch (TimeoutException e) {
logger.error("Non si visualizza la delega creata");
- Assert.fail("Non si visualizza la delega creata");
+ Assertions.fail("Non si visualizza la delega creata");
}
}
@@ -108,7 +120,7 @@ public void clickMenuDelegante(String fullName) {
}
} else {
logger.error("Non è stato trovato nessun delegato con il nome: " + fullName);
- Assert.fail("Non è stato trovato nessun delegato con il nome: " + fullName);
+ Assertions.fail("Non è stato trovato nessun delegato con il nome: " + fullName);
}
}
@@ -123,7 +135,7 @@ public void clickMenuDelegato(String fullName) {
logger.info("Cliccato correttamente su menu delega button");
} else {
logger.error("Non è stato trovato nessun delegato con il nome: " + fullName);
- Assert.fail("Non è stato trovato nessun delegato con il nome: " + fullName);
+ Assertions.fail("Non è stato trovato nessun delegato con il nome: " + fullName);
}
}
@@ -139,7 +151,7 @@ public void siCliccaSulBottoneChiudi() {
this.element(closeCodiceButtonBy).click();
} catch (TimeoutException e) {
logger.error("Il bottone chiudi viene visualizzato NON correttamente con errore:" + e.getMessage());
- Assert.fail("Il bottone chiudi viene visualizzato NON correttamente con errore:" + e.getMessage());
+ Assertions.fail("Il bottone chiudi viene visualizzato NON correttamente con errore:" + e.getMessage());
}
}
@@ -149,13 +161,14 @@ public void clickOpzioneRevoca() {
public void clickMenuPerRifiuto(String nome, String cognome) {
try {
+ webTool.waitTime(5);
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(Integer.parseInt(webDriverConfig.getLoadComponentWaitTime())).until(ExpectedConditions.visibilityOfElementLocated(menuDelegheBy));
logger.info("Si clicca correttamente il menu della delega");
this.element(menuDelegheBy).click();
} catch (TimeoutException e) {
logger.error("Non si visualizza correttamente il menu della delega con errore:" + e.getMessage());
- Assert.fail("Non si visualizza correttamente il menu della delega con errore:" + e.getMessage());
+ Assertions.fail("Non si visualizza correttamente il menu della delega con errore:" + e.getMessage());
}
}
@@ -167,7 +180,7 @@ public void clickRifiuta() {
logger.info("Si visualizza il bottone rifiuta");
} catch (TimeoutException e) {
logger.error("Non si visualizza correttamente il bottone rifiuta con errore: " + e.getMessage());
- Assert.fail("Non si visualizza correttamente il bottone rifiuta con errore: " + e.getMessage());
+ Assertions.fail("Non si visualizza correttamente il bottone rifiuta con errore: " + e.getMessage());
}
}
@@ -179,7 +192,7 @@ public void clickRifiutaPopUp() {
logger.info("Si visualizza il bottone rifiuta nel pop-up");
} catch (TimeoutException e) {
logger.error("Non si visualizza correttamente il bottone rifiuta pop-up con errore: " + e.getMessage());
- Assert.fail("Non si visualizza correttamente il bottone rifiuta pop-up errore: " + e.getMessage());
+ Assertions.fail("Non si visualizza correttamente il bottone rifiuta pop-up errore: " + e.getMessage());
}
}
@@ -191,7 +204,7 @@ public void clickAnnullaPopUp() {
logger.info("Si visualizza il bottone Annulla nel pop-up");
} catch (TimeoutException e) {
logger.error("Non si clicca correttamente sul bottone Annulla pop-up con errore: " + e.getMessage());
- Assert.fail("Non si clicca correttamente sul bottone Annulla pop-up errore: " + e.getMessage());
+ Assertions.fail("Non si clicca correttamente sul bottone Annulla pop-up errore: " + e.getMessage());
}
}
@@ -209,7 +222,7 @@ public boolean verificaEsistenzaDelega(String nome, String cognome) {
public boolean siVisualizzaUnaDelegaConNome(String nome, String cognome) {
try {
- WebTool.waitTime(5);
+ webTool.waitTime(5);
By delegaBy = By.xpath("//tr[@id = 'delegatesTable.body.row']//p[contains(text(),'"+ nome +" "+ cognome +"')]");
this.getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(delegaBy));
@@ -255,7 +268,7 @@ public void checkModaleMostraCodice() {
}
}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());
+ Assertions.fail("modale mostra codice non caricata con errore: " + e.getMessage());
}
}
public void clickAnnullaRevoca(){
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ITuoiRecapitiPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ITuoiRecapitiPage.java
index f354fb6f1..de6138826 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ITuoiRecapitiPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ITuoiRecapitiPage.java
@@ -1,15 +1,17 @@
package it.pn.frontend.e2e.pages.destinatario.personaFisica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
import java.util.List;
-
+@Component
public class ITuoiRecapitiPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("ITuoiRecapitiPage");
@@ -19,15 +21,16 @@ public class ITuoiRecapitiPage extends BasePage {
@FindBy(id = "default_sms")
WebElement phoneNumInputField;
- @FindBy(xpath = "//button[@data-testid='courtesy-sms-button']")
+ @FindBy(id = "default_sms-button")
WebElement avvisamiViaSMSButton;
@FindBy(id = "addressType")
WebElement tipoIndirizzoField;
- @FindBy(id = "subtitle-page")
- List subTitlesSection;
+ @FindBy(xpath = "//*[@id='legalContactsSection']/p")
+ WebElement subTitlesSection;
+ @Autowired
public ITuoiRecapitiPage(WebDriver driver) {
super(driver);
}
@@ -38,7 +41,7 @@ public void iTuoiRecapitiButtonClick() {
this.js().executeScript("arguments[0].click()", this.iTuoiRecapitiButton);
} catch (TimeoutException e) {
logger.error("il bottone i tuoi Recapiti non trovato o non è cliccabile: " + e.getMessage());
- Assert.fail("il bottone i tuoi Recapiti non trovato o non è cliccabile: " + e.getMessage());
+ Assertions.fail("il bottone i tuoi Recapiti non trovato o non è cliccabile: " + e.getMessage());
}
}
@@ -55,7 +58,7 @@ public void waitLoadITuoiRecapitiPage() {
logger.info("La pagina I Tuoi Recapiti si vede correttamente");
} catch (TimeoutException e) {
logger.error("La pagina I Tuoi Recapiti NON si vede correttamente con errori:" + e.getMessage());
- Assert.fail("La pagina I Tuoi Recapiti NON si vede correttamente con errori:" + e.getMessage());
+ Assertions.fail("La pagina I Tuoi Recapiti NON si vede correttamente con errori:" + e.getMessage());
}
}
@@ -86,7 +89,7 @@ public void waitLoadCourtesyContacts() {
logger.info("Il contatto di cortesia si visualizza correttamente");
} catch (TimeoutException e) {
logger.error("il contatto di cortesia non si visualizza correttamente con errori:" + e.getMessage());
- Assert.fail("il contatto di cortesia non si visualizza correttamente con errori:" + e.getMessage());
+ Assertions.fail("il contatto di cortesia non si visualizza correttamente con errori:" + e.getMessage());
}
}
@@ -103,7 +106,7 @@ public void sendOTP(String otp) {
logger.info("Il codice otp viene inserito correttamente");
} catch (TimeoutException e) {
logger.error("Il codice otp NON viene inserito correttamente con errore:" + e.getMessage());
- Assert.fail("Il codice otp NON viene inserito correttamente con errore:" + e.getMessage());
+ Assertions.fail("Il codice otp NON viene inserito correttamente con errore:" + e.getMessage());
}
}
@@ -114,10 +117,9 @@ public void clickSalvaEmail() {
}
public void eliminaEmailEsistente() {
- By eliminaMailButton = By.xpath("//button[@id='cancelContact-default']");
+ By eliminaMailButton = By.xpath("//button[@id='cancelContact-default_email']");
getWebDriverWait(10).withMessage("il Bottone elimina e-mail non presente").until(ExpectedConditions.elementToBeClickable(eliminaMailButton));
this.js().executeScript("arguments[0].click();", this.element(eliminaMailButton));
- logger.info("Log eliminaEmailEsistente: " + driver.getPageSource());
}
public void insertEmail(String emailPEC) {
@@ -165,7 +167,7 @@ public void cancellaTesto() {
}
} catch (TimeoutException e) {
logger.error("Non si riesce ad cancellare il testo della email :" + e.getMessage());
- Assert.fail("Non si riesce ad cancellare il testo della email :" + e.getMessage());
+ Assertions.fail("Non si riesce ad cancellare il testo della email :" + e.getMessage());
}
}
@@ -206,7 +208,7 @@ public void selezionaTipoPec() {
}
public void checkPostModifica() {
- By saveButton = By.id("saveModifyButton-default");
+ By saveButton = By.id("saveContact-default_email");
By cancelButton = By.xpath("//button[contains(text(),'Annulla')]");
By emailField = By.id("default_email");
getWebDriverWait(10).withMessage("Non si visualizza il bottone salva e non è cliccabile").until(ExpectedConditions.and(
@@ -223,30 +225,29 @@ public void checkPostModifica() {
public void checkRiquadroPEC() {
try {
- By titleSection = By.xpath("//div[@data-testid='DigitalContactsCardBody']//*/div/div");
+ By titleSection = By.id("legalContactsTitle");
By pecField = By.id("default_pec");
- By confirmButton = By.id("add-contact");
- By infoBanner = By.xpath("//span[@data-testid='legal-contact-disclaimer']");
+ By confirmButton = By.id("default_pec-button");
+ By infoBanner = By.xpath("//p[@data-testid='DigitalContactsCardDescription']");
getWebDriverWait(10).withMessage("Non si visualizza il titolo della sezione recapito legale o il contenuto è errato").until(ExpectedConditions.and(
ExpectedConditions.visibilityOfElementLocated(titleSection),
- ExpectedConditions.attributeToBe(this.element(titleSection), "innerText", "Recapito legale")));
+ ExpectedConditions.attributeToBe(this.element(titleSection), "innerText", "Recapito a valore legale")));
getWebDriverWait(10).withMessage("Non si visualizza il sottotitolo della sezione recapito legale o il contenuto è errato").until(ExpectedConditions.and(
- ExpectedConditions.visibilityOf(subTitlesSection.get(1)),
- ExpectedConditions.attributeToBe(subTitlesSection.get(1), "innerText", "Quando c’è una notifica per te, ti inviamo qui l’avviso di avvenuta ricezione. Accedi a SEND per leggerla e pagare eventuali spese.")));
+ ExpectedConditions.visibilityOf(subTitlesSection),
+ ExpectedConditions.attributeToBe(subTitlesSection, "innerText", "È il recapito ufficiale che scegli per ricevere comunicazioni a valore legale dalla PA. Se attivi un recapito a valore legale riceverai le notifiche di SEND solo in digitale, senza più preoccuparti dei documenti cartacei.")));
getWebDriverWait(10).withMessage("Non si visualizza il campo pec o non è modificabile").until(ExpectedConditions.and(
ExpectedConditions.visibilityOfElementLocated(pecField),
- ExpectedConditions.attributeToBe(this.element(pecField), "readonly", ""),
- ExpectedConditions.attributeToBe(this.element(pecField), "placeholder", "Il tuo indirizzo PEC")));
+ ExpectedConditions.attributeToBe(this.element(pecField), "placeholder", "La tua PEC")));
getWebDriverWait(10).withMessage("Non si visualizza il bottone conferma o non è cliccabile").until(ExpectedConditions.and(
ExpectedConditions.visibilityOfElementLocated(confirmButton),
ExpectedConditions.not(ExpectedConditions.elementToBeClickable(confirmButton))));
getWebDriverWait(10).withMessage("Non si visualizza il banner informativo o il suo contenuto è errato").until(ExpectedConditions.and(
- ExpectedConditions.visibilityOfElementLocated(infoBanner),
- ExpectedConditions.attributeToBe(this.element(infoBanner), "innerText", "Questo è l’indirizzo principale che verrà utilizzato per inviarti gli avvisi di avvenuta ricezione in via digitale. Inserendolo, non riceverai più raccomandate cartacee.")));
+ ExpectedConditions.visibilityOf(elements(infoBanner).get(0)),
+ ExpectedConditions.attributeToBe(this.elements(infoBanner).get(0), "innerText", "Quando un ente invia una comunicazione per te su SEND, ricevi l’avviso ufficiale sulla PEC che hai scelto.")));
logger.info("Il riquadro PEC si visualizza correttamente");
} catch (TimeoutException e) {
logger.error("Il riquadro PEC NON si visualizza correttamente con errori:" + e.getMessage());
- Assert.fail("Il riquadro PEC NON si visualizza correttamente con errori:" + e.getMessage());
+ Assertions.fail("Il riquadro PEC NON si visualizza correttamente con errori:" + e.getMessage());
}
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/LoginSpidPFPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/LoginSpidPFPage.java
index f16f8b4ba..d34fbe7af 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/LoginSpidPFPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/LoginSpidPFPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.destinatario.personaFisica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,7 +10,10 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class LoginSpidPFPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("LoginSpidPFPage");
@@ -24,7 +27,7 @@ public class LoginSpidPFPage extends BasePage {
@FindBy(xpath = "//button[contains(@class,'button-spid')]")
WebElement entraConSpidButton;
-
+ @Autowired
public LoginSpidPFPage(WebDriver driver) {
super(driver);
}
@@ -36,7 +39,7 @@ public void waitLoadLoginSpidDEPage(){
logger.info("Login Spid DE Page caricata");
}catch (TimeoutException e){
logger.error("Login Spid DE Page non caricata con errore : "+e.getMessage());
- Assert.fail("Login Spid DE Page non caricata con errore : "+e.getMessage());
+ Assertions.fail("Login Spid DE Page non caricata con errore : "+e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/NotifichePFPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/NotifichePFPage.java
index e927f6876..1a5346a9c 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/NotifichePFPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/NotifichePFPage.java
@@ -2,72 +2,84 @@
import it.pn.frontend.e2e.common.BasePage;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.util.List;
+@Component
public class NotifichePFPage extends BasePage {
- private static final Logger logger = LoggerFactory.getLogger("NotifichePFPage");
+ private static final Logger logger = LoggerFactory.getLogger(NotifichePFPage.class);
+
+ @Autowired
+ private WebDriver driver;
@FindBy(id = "Le tue notifiche-page")
- WebElement titleLabel;
+ private WebElement titleLabel;
@FindBy(id = "notifications-table")
- WebElement tableNotifiche;
+ private WebElement tableNotifiche;
@FindBy(id = "iunMatch")
- WebElement codiceIunTextField;
+ private WebElement codiceIunTextField;
@FindBy(id = "filter-notifications-button")
- WebElement filtraButton;
+ private WebElement filtraButton;
@FindBy(id = "startDate")
- WebElement dataInizioField;
+ private WebElement dataInizioField;
@FindBy(id = "endDate")
- WebElement dataFineField;
+ private WebElement dataFineField;
@FindBy(id = "side-item-Notifiche")
- WebElement notificheDeButton;
+ private WebElement notificheDeButton;
@FindBy(id = "side-item-Gaio Giulio Cesare")
- WebElement nomeDeleganteButton;
+ private WebElement nomeDeleganteButton;
@FindBy(id = "next")
- WebElement paginaSuccessivaButton;
+ private WebElement paginaSuccessivaButton;
@FindBy(id = "page3")
- WebElement numeroPaginaTreButton;
+ private WebElement numeroPaginaTreButton;
@FindBy(id = "page2")
- WebElement paginaSeconda;
+ private WebElement paginaSeconda;
@FindBy(id = "page1")
- WebElement paginaPrima;
+ private WebElement paginaPrima;
@FindBy(id = "rows-per-page")
- WebElement numeroPagineButton;
+ private WebElement numeroPagineButton;
@FindBy(id = "iunMatch-helper-text")
- WebElement notValidIunMessage;
+ private WebElement notValidIunMessage;
@FindBy(css = "[data-testid='cancelButton']")
- WebElement rimuoviFiltriButton;
+ private WebElement rimuoviFiltriButton;
@FindBy(xpath = "//button[@data-testid='download-f24-button']")
- WebElement buttonDownloadF24;
+ private WebElement buttonDownloadF24;
@FindBy(xpath = "//button[@data-testid='download-pagoPA-notice-button']")
- WebElement buttonDownloadAvvisoPagoPA;
+ private WebElement buttonDownloadAvvisoPagoPA;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+ @Autowired
public NotifichePFPage(WebDriver driver) {
super(driver);
+ this.driver = driver;
}
public void waitLoadNotificheDEPage() {
@@ -96,7 +108,7 @@ public void waitESelectDelegheButton() {
}
public void selectFiltraButton() {
- WebTool.waitTime(5);
+ webTool.waitTime(5);
filtraButton = driver.findElement(By.id("filter-notifications-button"));
getWebDriverWait(40).withMessage("Il bottone filtra sulla pagina notifiche non è cliccabile").until(ExpectedConditions.elementToBeClickable(filtraButton));
filtraButton.click();
@@ -236,7 +248,7 @@ public void waitLoadSecondaPagina() {
logger.info("Si visualizza una pagina differente dalla precedente");
} else {
logger.error("Non si visualizza una pagina differente dalla precedente");
- Assert.fail("Non si visualizza una pagina differente dalla precedente");
+ Assertions.fail("Non si visualizza una pagina differente dalla precedente");
}
}
@@ -247,7 +259,7 @@ public void siSceglieUnaPaginaDiversaConNumeroESiFiltra(String iun) {
codiceIunTextField.click();
codiceIunTextField.sendKeys(iun);
clickFiltraButton();
- WebTool.waitTime(2);
+ webTool.waitTime(2);
clickRimuoviFiltriButton();
}
@@ -274,7 +286,7 @@ public int conteggioNotifiche() {
public void selezionaNotifica() {
By notificaBy = By.xpath("//td[contains(@class,'MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-1cpwezh')]");
- WebTool.waitTime(2);
+ webTool.waitTime(2);
getWebDriverWait(30).withMessage("Non viene visualizzata la prima riga della tabella delle notifiche").until(ExpectedConditions.elementToBeClickable(notificaBy));
elements(notificaBy).get(0).click();
}
@@ -313,7 +325,7 @@ public void clickRimuoviFiltriButton() {
public void firstPageDisplayed() {
String isPageSelected = paginaPrima.getAttribute("aria-current");
- Assert.assertTrue(isPageSelected.equalsIgnoreCase("true"));
+ Assertions.assertTrue(isPageSelected.equalsIgnoreCase("true"));
logger.info("Si visualizza prima pagina");
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ScegliSpidPFPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ScegliSpidPFPage.java
index 78f967336..9af22333b 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ScegliSpidPFPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaFisica/ScegliSpidPFPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.destinatario.personaFisica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,7 +10,10 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class ScegliSpidPFPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("ScegliSpidPFPage");
@@ -18,6 +21,7 @@ public class ScegliSpidPFPage extends BasePage {
@FindBy(id = "spid-select-xx_testenv2")
WebElement testButton;
+ @Autowired
public ScegliSpidPFPage(WebDriver driver) {
super(driver);
}
@@ -29,7 +33,7 @@ public void waitLoadScegliSpidDEPage(){
logger.info("Scegli Spid DE Page caricata");
}catch (TimeoutException e){
logger.error("Scegli Spid DE Page non caricata con errore : "+e.getMessage());
- Assert.fail("Scegli Spid DE Page non caricata con errore : "+e.getMessage());
+ Assertions.fail("Scegli Spid DE Page non caricata con errore : "+e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/AccediAreaRiservataPGPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/AccediAreaRiservataPGPage.java
index 13561b348..518b6f289 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/AccediAreaRiservataPGPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/AccediAreaRiservataPGPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,13 +10,17 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class AccediAreaRiservataPGPage extends BasePage {
private final Logger logger = LoggerFactory.getLogger("AccediAreaRiservataPGPage");
@FindBy(id = "spidButton")
WebElement spidButton;
+ @Autowired
public AccediAreaRiservataPGPage(WebDriver driver) {
super(driver);
}
@@ -29,7 +33,7 @@ public void waitLoadAccediAreaRiservataPGPage() {
logger.info("AccediAreaRiservaPage caricata correttamente");
} catch (TimeoutException e ){
logger.error("Accedi Area Riservata Page non caricata correttamente con errore: "+e.getMessage());
- Assert.fail("Accedi Area Riservata Page non caricata correttamente con errore: "+e.getMessage());
+ Assertions.fail("Accedi Area Riservata Page non caricata correttamente con errore: "+e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/AutorizzaInvioDatiPGPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/AutorizzaInvioDatiPGPage.java
index 700ba8052..d457d3f86 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/AutorizzaInvioDatiPGPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/AutorizzaInvioDatiPGPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,10 +10,14 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class AutorizzaInvioDatiPGPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("AutorizzaInvioDatiPGPage");
+ @Autowired
public AutorizzaInvioDatiPGPage(WebDriver driver) {
super(driver);
}
@@ -29,7 +33,7 @@ public void waitLoadAutorizzaInvioDatiPGPage() {
logger.info("AutorizzaInviaDatiPGPage caricata correttamente");
} catch (TimeoutException e){
logger.error("AutorizzaInviaDatiPGPage non caricata correttamente con errore: "+e.getMessage());
- Assert.fail("AutorizzaInviaDatiPGPage non caricata correttamente con errore: "+e.getMessage());
+ Assertions.fail("AutorizzaInviaDatiPGPage non caricata correttamente con errore: "+e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/DeleghePGPagoPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/DeleghePGPagoPAPage.java
index 60d408b05..9dcc80072 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/DeleghePGPagoPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/DeleghePGPagoPAPage.java
@@ -1,17 +1,18 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
-import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
import java.util.List;
-
+@Component
public class DeleghePGPagoPAPage extends BasePage {
private final Logger logger = LoggerFactory.getLogger("DeleghePGPagoPAPage");
@@ -84,7 +85,7 @@ public class DeleghePGPagoPAPage extends BasePage {
@FindBy(id = "error-alert")
WebElement errorCodeInPopUp;
-
+ @Autowired
public DeleghePGPagoPAPage(WebDriver driver) {
super(driver);
}
@@ -98,7 +99,7 @@ public void waitLoadDeleghePage() {
logger.info("Deleghe page si visualizza correttamente");
} catch (TimeoutException e) {
logger.error("Deleghe page non si visualizza correttamente con errore: " + e.getMessage());
- Assert.fail("Deleghe page non si visualizza correttamente con errore: " + e.getMessage());
+ Assertions.fail("Deleghe page non si visualizza correttamente con errore: " + e.getMessage());
}
}
@@ -109,7 +110,7 @@ public void clickDelegatiImpresa() {
logger.info("Bottone delegati dell impresa cliccato");
} catch (TimeoutException e) {
logger.error("il bottone delegati imprese non è cliccabile" + e.getMessage());
- Assert.fail("il bottone delegati imprese non è cliccabile" + e.getMessage());
+ Assertions.fail("il bottone delegati imprese non è cliccabile" + e.getMessage());
}
}
@@ -151,7 +152,7 @@ public void verificaPresenzaElencoDeleghe() {
logger.info("L'elenco delle deleghe si visualizza correttamente");
} catch (TimeoutException e) {
logger.error("L'elenco delle deleghe non si visualizza correttamente con errore: " + e.getMessage());
- Assert.fail("L'elenco delle deleghe non si visualizza correttamente con errore: " + e.getMessage());
+ Assertions.fail("L'elenco delle deleghe non si visualizza correttamente con errore: " + e.getMessage());
}
}
@@ -170,7 +171,7 @@ public boolean controlloDelegaRestituita(String ragioneSociale) {
logger.info("controllo ragione sociale");
} catch (TimeoutException e) {
logger.error("ragione sociale non caricata" + e.getMessage());
- Assert.fail("ragione sociale non caricata" + e.getMessage());
+ Assertions.fail("ragione sociale non caricata" + e.getMessage());
}
logger.info("ragione sociale caricata correttamente");
return this.elements(delegaBy).size() == 1;
@@ -190,7 +191,7 @@ public void waitLoadPopUpGruppo() {
this.logger.info("Si vede correttamente il pop-up di assegnazione gruppo");
} catch (TimeoutException e) {
this.logger.error("Non si vede correttamente il pop-up di assegnazione gruppo con errore: " + e.getMessage());
- Assert.fail("Non si vede correttamente il pop-up di assegnazione gruppo con errore: " + e.getMessage());
+ Assertions.fail("Non si vede correttamente il pop-up di assegnazione gruppo con errore: " + e.getMessage());
}
}
@@ -239,7 +240,7 @@ public void controlloStatoAttiva(String ragioneSociale) {
logger.info("La delega ha lo stato Attiva");
} catch (TimeoutException e) {
logger.error("La delega NON ha lo stato Attiva con errore: " + e.getMessage());
- Assert.fail("La delega NON ha lo stato Attiva con errore: " + e.getMessage());
+ Assertions.fail("La delega NON ha lo stato Attiva con errore: " + e.getMessage());
}
}
@@ -266,7 +267,7 @@ public void waitLoadPopUpRevoca() {
this.logger.info("Si visualizza il pop-up rifiuta delega");
} catch (TimeoutException e) {
this.logger.error("Non si visualizza il pop-up rifiuta delega con errore: " + e.getMessage());
- Assert.fail("Non si visualizza il pop-up rifiuta delega con errore: " + e.getMessage());
+ Assertions.fail("Non si visualizza il pop-up rifiuta delega con errore: " + e.getMessage());
}
}
@@ -276,7 +277,7 @@ public void clickOpzioneModifica() {
this.opzioneModifica.click();
} catch (TimeoutException e) {
logger.error(" errore: " + e.getMessage());
- Assert.fail(" errore: " + e.getMessage());
+ Assertions.fail(" errore: " + e.getMessage());
}
}
@@ -287,7 +288,7 @@ public void waitLoadPopUpModifica() {
logger.info("Si visualizza correttamente il pop-up");
} catch (TimeoutException e) {
logger.error("NON Si visualizza correttamente il pop-up con errore: " + e.getMessage());
- Assert.fail("NON Si visualizza correttamente il pop-up con errore: " + e.getMessage());
+ Assertions.fail("NON Si visualizza correttamente il pop-up con errore: " + e.getMessage());
}
}
@@ -324,6 +325,9 @@ public void inserimentoCodiceDelegaACaricoDellImpresaAPI(String codiceDelega) {
public boolean siVisualizzaUnaDelegaPG() {
try {
+ By menuDelegati = By.id("tab-1");
+ this.getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(menuDelegati));
+ element(menuDelegati).click();
By menuDelega = By.xpath("//button[@data-testid='delegationMenuIcon']");
this.getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(menuDelega));
logger.info("Trovato correttamente almeno una delega");
@@ -344,7 +348,7 @@ public void checkAlertWrongDelegationCode() {
logger.info("Alert chiusa");
} catch (TimeoutException e) {
logger.error("Alert non visualizzato con errore: " + e.getMessage());
- Assert.fail("Alert non visualizzato con errore: " + e.getMessage());
+ Assertions.fail("Alert non visualizzato con errore: " + e.getMessage());
}
}
@@ -358,7 +362,7 @@ public void clickButtonIndietroDaAssegnaGruppo() {
logger.info("Bottone indietro cliccato");
} catch (TimeoutException e) {
logger.error("Bottone non visualizzato con errore " + e.getMessage());
- Assert.fail("Bottone non visualizzato con errore: " + e.getMessage());
+ Assertions.fail("Bottone non visualizzato con errore: " + e.getMessage());
}
}
@@ -390,7 +394,7 @@ public void checkTextboxCodiceSonoRosse() {
logger.info("Textbox di input codice delega invalido");
} else {
logger.error("Almeno una textbox di input codice delega non in stato invalido");
- Assert.fail("Almeno una textbox di input codice delega non in stato invalido");
+ Assertions.fail("Almeno una textbox di input codice delega non in stato invalido");
}
}
@@ -402,7 +406,7 @@ public void checkErroreInSelezioneGruppo() {
logger.info("testo di errore gruppo trovato con successo");
}catch (TimeoutException e){
logger.error("errore in cattura testo di errore ricerca gruppo per assegnazione con errore:" + e.getMessage());
- Assert.fail("errore in cattura testo di errore ricerca gruppo per assegnazione con errore:" + e.getMessage());
+ Assertions.fail("errore in cattura testo di errore ricerca gruppo per assegnazione con errore:" + e.getMessage());
}
}
@@ -436,7 +440,7 @@ public void checkTabellaDelegheACaricoDellImpresa() {
getWebDriverWait(10).withMessage("menu non caricato correttamente").until(ExpectedConditions.visibilityOfElementLocated(menuDelega));
} catch (TimeoutException e) {
logger.error("tabella deleghe a carico dell impresa non caricata correttamente" + e.getMessage());
- Assert.fail("tabella deleghe a carico dell impresa non caricata correttamente" + e.getMessage());
+ Assertions.fail("tabella deleghe a carico dell impresa non caricata correttamente" + e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/DisserviziAppPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/DisserviziAppPage.java
index 928283d80..61884d01e 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/DisserviziAppPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/DisserviziAppPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,9 +10,12 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
import java.util.List;
+@Component
public class DisserviziAppPage extends BasePage {
@FindBy(id = "Stato della piattaforma-page")
@@ -20,6 +23,7 @@ public class DisserviziAppPage extends BasePage {
private final Logger logger = LoggerFactory.getLogger("Disservizi Page");
+ @Autowired
public DisserviziAppPage(WebDriver driver) {
super(driver);
}
@@ -30,7 +34,7 @@ public void waitLoadStatoDellaPiattaformaPage() {
logger.info("Si visualizza correttamente la sezione disservizi");
} catch (TimeoutException e) {
logger.error("Non si visualizza correttamente la sezione disservizi con errore:" + e.getMessage());
- Assert.fail("Non si visualizza correttamente la sezione disservizi con errore" + e.getMessage());
+ Assertions.fail("Non si visualizza correttamente la sezione disservizi con errore" + e.getMessage());
}
}
@@ -45,7 +49,7 @@ public void checkDatiPaginaDisservizi() {
this.getWebDriverWait(10).withMessage("ultimo aggiornamento stato piattaforma non presente").until(ExpectedConditions.visibilityOfElementLocated(dateLastCheck));
} catch (TimeoutException e) {
logger.error("Dati presenti nella pagina stato della piattaforma non corretti: " + e.getMessage());
- Assert.fail("Dati presenti nella pagina stato della piattaforma non corretti: " + e.getMessage());
+ Assertions.fail("Dati presenti nella pagina stato della piattaforma non corretti: " + e.getMessage());
}
}
@@ -66,7 +70,7 @@ public void checkElencoDisservizi() {
logger.info("Si visualizza correttamente l'elenco dei disservizi");
} catch (Exception e) {
logger.error("NON si visualizza correttamente l'elenco dei disservizi con errore:" + e.getMessage());
- Assert.fail("NON si visualizza correttamente l'elenco dei disservizi con errore:" + e.getMessage());
+ Assertions.fail("NON si visualizza correttamente l'elenco dei disservizi con errore:" + e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/GruppiPGPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/GruppiPGPage.java
index b97386fd9..fda16ea8d 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/GruppiPGPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/GruppiPGPage.java
@@ -1,15 +1,18 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
+import it.pn.frontend.e2e.listeners.HooksNew;
import it.pn.frontend.e2e.utility.WebTool;
import lombok.extern.slf4j.Slf4j;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
import java.time.Instant;
import java.time.LocalDate;
@@ -18,9 +21,9 @@
import java.util.Map;
@Slf4j
+@Component
public class GruppiPGPage extends BasePage {
- private final AccediAreaRiservataPGPage accediAreaRiservataPGPage = new AccediAreaRiservataPGPage(driver);
private final Actions actions = new Actions(driver);
@FindBy(id = "side-item-Gruppi")
@@ -41,6 +44,18 @@ public class GruppiPGPage extends BasePage {
@FindBy(xpath = "//button[contains(text(), 'Conferma')]")
WebElement buttonConferma;
+ @Autowired
+ private WebTool webTool;
+ @Autowired
+ private AccediAreaRiservataPGPage accediAreaRiservataPGPage;
+ @Autowired
+ private ScegliSpidPGPage scegliSpidPGPage ;
+ @Autowired
+ private LoginPGPagoPAPage loginPGPagoPAPage;
+ @Autowired
+ private AutorizzaInvioDatiPGPage autorizzaInvioDatiPGPage ;
+
+ @Autowired
public GruppiPGPage(WebDriver driver) {
super(driver);
}
@@ -49,21 +64,21 @@ public void clickGruppiButton() {
js().executeScript("arguments[0].scrollIntoView(true);", gruppiButton);
getWebDriverWait(10).withMessage("Il bottone gruppi non è visibile").until(ExpectedConditions.visibilityOf(gruppiButton));
gruppiButton.click();
- WebTool.waitTime(5);
- WebTool.switchToOtherTab();
+ webTool.waitTime(5);
+ webTool.switchToOtherTab();
}
public void loginGruppi(String nome, String pwd) {
accediAreaRiservataPGPage.waitLoadAccediAreaRiservataPGPage();
accediAreaRiservataPGPage.clickSpidButton();
- ScegliSpidPGPage scegliSpidPGPage = new ScegliSpidPGPage(driver);
+
scegliSpidPGPage.clickTestButton();
- LoginPGPagoPAPage loginPGPagoPAPage = new LoginPGPagoPAPage(driver);
+
loginPGPagoPAPage.waitLoadLoginPGPage();
loginPGPagoPAPage.insertUsername(nome);
loginPGPagoPAPage.insertPassword(pwd);
loginPGPagoPAPage.clickInviaButton();
- AutorizzaInvioDatiPGPage autorizzaInvioDatiPGPage = new AutorizzaInvioDatiPGPage(driver);
+
autorizzaInvioDatiPGPage.waitLoadAutorizzaInvioDatiPGPage();
autorizzaInvioDatiPGPage.clickInviaButton();
}
@@ -121,7 +136,7 @@ public void creazioneNuovoGruppo(Map datiGruppo) {
}
public void checkButtonConfermaAndClick() {
- WebTool.waitTime(5);
+ webTool.waitTime(5);
buttonConferma = driver.findElement(By.xpath("//button[contains(text(), 'Conferma')]"));
getWebDriverWait(10).withMessage("Il bottone conferma non è abilitato").until(ExpectedConditions.elementToBeClickable(buttonConferma));
log.info("Il bottone è abilitato e lo si clicca");
@@ -212,7 +227,7 @@ public void siModificaUnCampoDelGruppo(String campo, String modifica) {
}
} catch (InterruptedException e) {
log.error("È fallita l'attesa prima della modifica del campo con errore: {}", e.getMessage());
- Assert.fail("È fallita l'attesa prima della modifica del campo con errore: " + e.getMessage());
+ Assertions.fail("È fallita l'attesa prima della modifica del campo con errore: " + e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/HomePagePG.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/HomePagePG.java
index 8c7d6c6d3..21a56f548 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/HomePagePG.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/HomePagePG.java
@@ -1,19 +1,23 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
import java.util.List;
+@Component
public class HomePagePG extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("HomePagePG");
+ @Autowired
public HomePagePG(WebDriver driver) {
super(driver);
}
@@ -54,7 +58,7 @@ public void checkBottoneDeleghe() {
isDisplayed = false; // Elemento non trovato
}
- Assert.assertTrue("Il side menu deleghe non è visibile", !isDisplayed);
+ Assertions.assertTrue(!isDisplayed,"Il side menu deleghe non è visibile");
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/LoginPGPagoPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/LoginPGPagoPAPage.java
index d6251d014..353ed6d0f 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/LoginPGPagoPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/LoginPGPagoPAPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,7 +10,10 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class LoginPGPagoPAPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("LoginPGPagoPAPage");
@@ -24,6 +27,7 @@ public class LoginPGPagoPAPage extends BasePage {
@FindBy(xpath = "//button[@name = 'confirm']")
WebElement inviaButton;
+ @Autowired
public LoginPGPagoPAPage(WebDriver driver) {
super(driver);
}
@@ -38,7 +42,7 @@ public void waitLoadLoginPGPage() {
logger.info("LoginPGPage caricata correttamente");
} catch (TimeoutException e){
logger.error("LoginPGPage non caricata correttamente con errore :" +e.getMessage());
- Assert.fail("LoginPGPage non caricata correttamente con errore :" +e.getMessage());
+ Assertions.fail("LoginPGPage non caricata correttamente con errore :" +e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/PiattaformaNotifichePGPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/PiattaformaNotifichePGPAPage.java
index 6121788ba..09b0021b7 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/PiattaformaNotifichePGPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/PiattaformaNotifichePGPAPage.java
@@ -3,17 +3,21 @@
import it.pn.frontend.e2e.common.BasePage;
import it.pn.frontend.e2e.common.DettaglioNotificaSection;
import it.pn.frontend.e2e.common.HelpdeskPage;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import it.pn.frontend.e2e.section.mittente.DettaglioNotificaMittenteSection;
import it.pn.frontend.e2e.utility.DownloadFile;
import it.pn.frontend.e2e.utility.WebTool;
import net.lingala.zip4j.ZipFile;
import org.apache.commons.io.FileUtils;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.URL;
@@ -28,6 +32,7 @@
import java.util.Map;
import java.util.stream.Stream;
+@Component
public class PiattaformaNotifichePGPAPage extends BasePage {
private final Logger logger = LoggerFactory.getLogger("PiattaformaNotifichePGPAPage");
@@ -71,6 +76,21 @@ public class PiattaformaNotifichePGPAPage extends BasePage {
@FindBy(xpath = "//button[contains(text(), 'Ricevuta di consegna')]")
WebElement ricevutaDiConsegnaButton;
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+ @Autowired
+ private DownloadFile downloadFile;
+ @Autowired
+ private DettaglioNotificaMittenteSection dettaglioNotificaMittenteSection;
+ @Autowired
+ private HelpdeskPage helpdeskPage ;
+ @Autowired
+ private DettaglioNotificaSection dettaglioNotificaSection ;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
+ @Autowired
public PiattaformaNotifichePGPAPage(WebDriver driver) {
super(driver);
}
@@ -102,7 +122,7 @@ public void waitLoadPiattaformaNotificaPage(String ragioneSociale) {
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());
- Assert.fail("La pagina Piattaforma Notifiche non si carica correttamente con errore: " + e.getMessage());
+ Assertions.fail("La pagina Piattaforma Notifiche non si carica correttamente con errore: " + e.getMessage());
}
}
@@ -113,21 +133,29 @@ public void clickSuDelegeButton() {
logger.info("click sul bottone Deleghe effetuato");
} catch (TimeoutException e) {
logger.error("il bottone deleghe non è stato trovato " + e.getMessage());
- Assert.fail("il bottone deleghe non è stato trovato" + e.getMessage());
+ Assertions.fail("il bottone deleghe non è stato trovato" + e.getMessage());
}
}
- public void clickNotificheDelegate() {
- WebTool.waitTime(5);
+ public void clickNotificheENotificheDelegate() {
+ webTool.waitTime(5);
getWebDriverWait(10).until(ExpectedConditions.visibilityOf(this.sideItemNotificheButton));
sideItemNotificheButton.click();
- WebTool.waitTime(10);
- By notificheDelegateButton = By.id("side-item-Notifiche delegate");
+ webTool.waitTime(10);
+ By notificheDelegateButton = By.id("menu-item(notifiche delegate)");
this.getWebDriverWait(10).until(ExpectedConditions.elementToBeClickable(notificheDelegateButton));
this.js().executeScript("arguments[0].click()", this.element(notificheDelegateButton));
logger.info("Si clicca correttamente sulla voce notifiche delegate");
}
+ public void clickNotificheDelegate() {
+ webTool.waitTime(5);
+ By notificheDelegateButton = By.id("menu-item(notifiche delegate)");
+ this.getWebDriverWait(10).until(ExpectedConditions.elementToBeClickable(notificheDelegateButton));
+ this.js().executeScript("arguments[0].click()", this.element(notificheDelegateButton));
+ logger.info("Si clicca correttamente sulla voce notifiche delegate");
+ }
+
public void waitLoadSezioneNotificheDelegate(String ragioneSociale) {
try {
By notificheDelegatePageTitle = By.id("Notifiche delegate a " + ragioneSociale + "-page");
@@ -135,7 +163,7 @@ public void waitLoadSezioneNotificheDelegate(String ragioneSociale) {
logger.info("Si visualizza correttamente la sezione notifiche delegate");
} catch (TimeoutException e) {
logger.error("Non si visualizza correttamente la sezione notifiche delegate con errore:" + e.getMessage());
- Assert.fail("Non si visualizza correttamente la sezione notifiche delegate con errore" + e.getMessage());
+ Assertions.fail("Non si visualizza correttamente la sezione notifiche delegate con errore" + e.getMessage());
}
}
@@ -201,7 +229,7 @@ public boolean modelloF24Displayed() {
public void clickModelloF24Numero(int numOfF24) {
List f24 = driver.findElements(By.xpath("//button[@data-testid='download-f24-button']"));
logger.info("F24 trovato:" + f24.size());
- WebTool.waitTime(3);
+ webTool.waitTime(3);
getWebDriverWait(30).withMessage("Il sezione scarica modello F24 non è cliccabile").until(ExpectedConditions.elementToBeClickable(f24.get(numOfF24 - 1)));
f24.get(numOfF24 - 1).click();
}
@@ -212,12 +240,12 @@ public void checkBoxModelloF24PG() {
getWebDriverWait(10).withMessage("Non si visualizza il box allegati modelli F24").until(ExpectedConditions.visibilityOfElementLocated(boxModelloF24));
} catch (TimeoutException e) {
logger.error("Box del modello F24 non visualizzato correttamente con errore: " + e.getMessage());
- Assert.fail("Box del modello F24 non visualizzato correttamente con errore: " + e.getMessage());
+ Assertions.fail("Box del modello F24 non visualizzato correttamente con errore: " + e.getMessage());
}
}
public void clickRicevutaDiConsegna() throws AWTException, IOException {
- boolean headless = System.getProperty("headless").equalsIgnoreCase("true");
+ boolean headless = webDriverConfig.getHeadless().equalsIgnoreCase("true");
if (!headless) {
logger.info("controllo esistenza bottone per scaricare zip");
getWebDriverWait(10).withMessage("Il bottone Ricevuta di consegna non cliccabile").until(ExpectedConditions.elementToBeClickable(ricevutaDiConsegnaButton));
@@ -253,15 +281,13 @@ public void clickRicevutaDiConsegna() throws AWTException, IOException {
// Generate a unique filename for the downloaded ZIP file
String fileName = "downloaded_" + System.currentTimeMillis() + ".zip";
- DownloadFile downloadFile = new DownloadFile(this.driver);
- DettaglioNotificaMittenteSection dettaglioNotificaMittenteSection = new DettaglioNotificaMittenteSection(this.driver);
String codiceIUN;
- WebTool.waitTime(1);
+ webTool.waitTime(1);
codiceIUN = dettaglioNotificaMittenteSection.getInfoNotifica(3);
File file = new File(downloadDirectory, fileName);
ricevutaDiConsegnaButton.click();
- WebTool.waitTime(1);
+ webTool.waitTime(1);
final String urlFileRicevuta = downloadFile.getUrl("https://webapi.test.notifichedigitali.it/bff/v1/notifications/received/" + codiceIUN + "/documents/");
FileUtils.copyURLToFile(new URL(urlFileRicevuta), file, 1000, 1000);
logger.info("ZIP file downloaded successfully.");
@@ -324,7 +350,6 @@ public void extractZipWithoutPassword() throws IOException {
String zipDirectoryPath = workingDirectory + "/src/test/resources/dataPopulation/zip";
String extractDirectoryPath = zipDirectoryPath + "/extract";
- HelpdeskPage helpdeskPage = new HelpdeskPage(this.driver);
// Find the latest ZIP file
File latestZipFile = helpdeskPage.findLatestZipFile(zipDirectoryPath);
if (latestZipFile == null) {
@@ -344,22 +369,21 @@ public void extractZipWithoutPassword() throws IOException {
}
public void controllaTesto(String nomeFile) {
- DettaglioNotificaSection dettaglioNotificaSection = new DettaglioNotificaSection(this.driver);
- DettaglioNotificaMittenteSection dettaglioNotificaMittenteSection = new DettaglioNotificaMittenteSection(this.driver);
+
Map infoNotifiche = dettaglioNotificaSection.recuperoInfoNotificheDestinatario();
if (nomeFile.contains("PN_NOTIFICATION_ATTACHMENTS")) {
if (dettaglioNotificaMittenteSection.controlloTestoFile(nomeFile, "A Simple PDF File")) {
logger.info("Il testo all'interno del file è corretto");
} else {
logger.error("Il testo all'interno del file NON è corretto");
- Assert.fail("Il testo all'interno del file NON è corretto");
+ Assertions.fail("Il testo all'interno del file NON è corretto");
}
} else if (nomeFile.contains("Avviso di avvenuta ricezione")) {
if (dettaglioNotificaMittenteSection.controlloTestoFile(nomeFile, "A Simple PDF File")) {
logger.info("Il testo all'interno del file è corretto");
} else {
logger.error("Il testo all'interno del file NON è corretto");
- Assert.fail("Il testo all'interno del file NON è corretto");
+ Assertions.fail("Il testo all'interno del file NON è corretto");
}
} else {
if (nomeFile.equals("Attestazione_opponibile_a_terzi_notifica_presa_in_carico")) {
@@ -367,7 +391,7 @@ public void controllaTesto(String nomeFile) {
logger.info("Il nome del mittente all'interno del file è corretto");
} else {
logger.error("Il nome del mittente all'interno del file NON è corretto");
- Assert.fail("Il nome del mittente all'interno del file NON è corretto");
+ Assertions.fail("Il nome del mittente all'interno del file NON è corretto");
}
}
@@ -375,7 +399,7 @@ public void controllaTesto(String nomeFile) {
logger.info("Il nome del destinatario all'interno del file è corretto");
} else {
logger.error("Il nome del destinatario all'interno del file NON è corretto");
- Assert.fail("Il nome del destinatario all'interno del file NON è corretto");
+ Assertions.fail("Il nome del destinatario all'interno del file NON è corretto");
}
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/PreAccediAreaRiservataPGPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/PreAccediAreaRiservataPGPage.java
index 9053d37d3..c60fdd061 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/PreAccediAreaRiservataPGPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/PreAccediAreaRiservataPGPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -29,7 +29,7 @@ public void waitLoadPreAccediPage() {
logger.info("PreAccediAreaRiservataPGPage caricata corretamente");
} catch (TimeoutException e ){
logger.error("PreAccediAreaRiservataPGPage non caricata corretamente con errore: " +e.getMessage());
- Assert.fail("PreAccediAreaRiservataPGPage non caricata corretamente con errore: " +e.getMessage());
+ Assertions.fail("PreAccediAreaRiservataPGPage non caricata corretamente con errore: " +e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/RecapitiPGPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/RecapitiPGPage.java
index 55dedd4cf..259a1270c 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/RecapitiPGPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/RecapitiPGPage.java
@@ -1,6 +1,6 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -24,7 +24,7 @@ public void waitLoadRecapitiPage() {
logger.info("Si visualizza correttamente recapiti page");
}catch (TimeoutException e){
logger.error("Non si visualizza correttamente recapiti page con errore:"+e.getMessage());
- Assert.fail("Non si visualizza correttamente recapiti page con errore:"+e.getMessage());
+ Assertions.fail("Non si visualizza correttamente recapiti page con errore:"+e.getMessage());
}
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/RicercaNotifichePGPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/RicercaNotifichePGPage.java
index afeb7b6f1..22738de9e 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/RicercaNotifichePGPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/RicercaNotifichePGPage.java
@@ -2,12 +2,14 @@
import it.pn.frontend.e2e.common.BasePage;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import java.sql.Driver;
@@ -28,6 +30,10 @@ public RicercaNotifichePGPage(WebDriver driver) {
@FindBy(id = "notificationsTable.body.row")
WebElement primaNotifica;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
public void clickNotificheImpresa() {
try {
By notificheImpresaButton = By.xpath("//div[@data-testid=\"sideMenuItem-Notifiche dell'impresa\"]");
@@ -36,7 +42,7 @@ public void clickNotificheImpresa() {
this.element(notificheImpresaButton).click();
} catch (Exception e) {
logger.error("Non si clicca sulla voce notifiche dell'impresa con errore:" + e.getMessage());
- Assert.fail("Non si clicca sulla voce notifiche dell'impresa con errore:" + e.getMessage());
+ Assertions.fail("Non si clicca sulla voce notifiche dell'impresa con errore:" + e.getMessage());
}
}
@@ -47,7 +53,7 @@ public void cliccaNotificaRestituita(String codiceIun) {
this.js().executeScript("arguments[0].click()", this.element(notificaBy));
} catch (TimeoutException e) {
logger.error("Notifica non trovata con errore: " + e.getMessage());
- Assert.fail("Notifica non trovata con errore: " + e.getMessage());
+ Assertions.fail("Notifica non trovata con errore: " + e.getMessage());
} catch (StaleElementReferenceException e) {
this.getWebDriverWait(30).until(ExpectedConditions.elementToBeClickable(notificaBy));
this.js().executeScript("arguments[0].click()", this.element(notificaBy));
@@ -72,7 +78,7 @@ public void waitLoadDettaglioNotificaPGDelegato() {
logger.info("La pagina dettaglio notifica si è caricata correttamente");
} catch (TimeoutException e) {
logger.error("La pagina dettaglio notifica NON si è caricata correttamente con errore:" + e.getMessage());
- Assert.fail("La pagina dettaglio notifica NON si è caricata correttamente con errore:" + e.getMessage());
+ Assertions.fail("La pagina dettaglio notifica NON si è caricata correttamente con errore:" + e.getMessage());
}
}
@@ -97,20 +103,20 @@ public void waitLoadNotifichePGPage() {
logger.info("Notifiche PG Page caricata");
} catch (TimeoutException e) {
logger.error("Notifiche PG Page non caricata con errore : " + e.getMessage());
- Assert.fail("Notifiche PG Page non caricata con errore : " + e.getMessage());
+ Assertions.fail("Notifiche PG Page non caricata con errore : " + e.getMessage());
}
}
public void cliccaSuPrimaNotifica(){
try {
- WebTool.waitTime(10);
+ webTool.waitTime(10);
primaNotifica = driver.findElement(By.id("notificationsTable.body.row"));
getWebDriverWait(10).until(ExpectedConditions.elementToBeClickable(primaNotifica));
logger.info("Si clicca sulla prima notifica");
primaNotifica.click();
} catch (Exception e) {
logger.error("Non si clicca sulla prima notifica con errore:" + e.getMessage());
- Assert.fail("Non si clicca sulla prima notifica con errore:" + e.getMessage());
+ Assertions.fail("Non si clicca sulla prima notifica con errore:" + e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/ScegliSpidPGPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/ScegliSpidPGPage.java
index c622c43bb..6aebc30c3 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/ScegliSpidPGPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/ScegliSpidPGPage.java
@@ -1,7 +1,8 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,13 +11,17 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class ScegliSpidPGPage extends BasePage {
private final Logger logger = LoggerFactory.getLogger("ScegliSpidPGPage");
@FindBy(id = "xx_testenv2")
WebElement testButton;
+ @Autowired
public ScegliSpidPGPage(WebDriver driver) {
super(driver);
}
@@ -29,7 +34,7 @@ public void waitLoadScegliSpidPGPage() {
logger.info("ScegliSpidPGPage caricata correttamente");
} catch (TimeoutException e){
logger.error("ScegliSpidPGPage non caricata correttamente con errore: " +e.getMessage());
- Assert.fail("ScegliSpidPGPage non caricata correttamente con errore: " +e.getMessage());
+ Assertions.fail("ScegliSpidPGPage non caricata correttamente con errore: " +e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/SelezionaImpresaPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/SelezionaImpresaPage.java
index b44e00dc7..aff2567d6 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/SelezionaImpresaPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/SelezionaImpresaPage.java
@@ -2,13 +2,16 @@
import it.pn.frontend.e2e.common.BasePage;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+@Component
public class SelezionaImpresaPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("SelezionaImpresaPage");
@@ -16,13 +19,18 @@ public class SelezionaImpresaPage extends BasePage {
@FindBy(xpath = "//button[contains(text(),'Accedi')]")
WebElement accediButton;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
+ @Autowired
public SelezionaImpresaPage(WebDriver driver) {
super(driver);
}
public void waitLoadSelezionaImpresaPage() {
- WebTool.waitTime(5);
+ webTool.waitTime(10);
By titlePageBy = By.xpath("//h3[contains(text(),'Seleziona la tua impresa')]");
this.getWebDriverWait(30).withMessage("Il titolo della pagina Seleziona la tua impresa non è visibile").until(ExpectedConditions.visibilityOfElementLocated(titlePageBy));
this.getWebDriverWait(30).withMessage("Il bottone accedi della pagina Seleziona la tua impresa non è visibile").until(ExpectedConditions.visibilityOf(this.accediButton));
diff --git a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/UtentiPGPage.java b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/UtentiPGPage.java
index fb80f65f7..838bdb324 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/UtentiPGPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/destinatario/personaGiuridica/UtentiPGPage.java
@@ -1,24 +1,29 @@
package it.pn.frontend.e2e.pages.destinatario.personaGiuridica;
import it.pn.frontend.e2e.common.BasePage;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Set;
-
+@Component
public class UtentiPGPage extends BasePage {
private final Logger logger = LoggerFactory.getLogger("UtentiPGPage");
- private final AccediAreaRiservataPGPage accediAreaRiservataPGPage = new AccediAreaRiservataPGPage(this.driver);
+
private final Actions actions = new Actions(this.driver);
+
@FindBy(xpath = "//button[contains(text(),'Aggiungi utente')]")
WebElement addUserButton;
@FindBy(xpath = "//button[contains(text(),'Indietro')]")
@@ -70,6 +75,22 @@ public class UtentiPGPage extends BasePage {
@FindBy(xpath = "//span[contains(text(),'Utenti')]")
WebElement sezioneUtenti;
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+ @Autowired
+ private ScegliSpidPGPage scegliSpidPGPage ;
+ @Autowired
+ private AccediAreaRiservataPGPage accediAreaRiservataPGPage;
+ @Autowired
+ private LoginPGPagoPAPage loginPGPagoPAPage;
+ @Autowired
+ private AutorizzaInvioDatiPGPage autorizzaInvioDatiPGPage;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
+
+ @Autowired
public UtentiPGPage(WebDriver driver) {
super(driver);
}
@@ -79,7 +100,7 @@ public void clickSezioneUtenti() {
sezioneUtenti.click();
//build url
String companyId = "d0f52c7d-76d5-4520-8971-edffeb5b46d5";
- String environment = System.getProperty("environment");
+ String environment = webDriverConfig.getEnvironment();
String utentiUrl = "https://imprese." + environment + ".notifichedigitali.it/dashboard/" + companyId + "/users";
//switch tab
String parentWindowHandle = driver.getWindowHandle();
@@ -102,23 +123,23 @@ public void loginUtenti(String nome, String pwd) {
accediAreaRiservataPGPage.waitLoadAccediAreaRiservataPGPage();
accediAreaRiservataPGPage.clickSpidButton();
- ScegliSpidPGPage scegliSpidPGPage = new ScegliSpidPGPage(this.driver);
+
scegliSpidPGPage.clickTestButton();
- LoginPGPagoPAPage loginPGPagoPAPage = new LoginPGPagoPAPage(this.driver);
+
loginPGPagoPAPage.waitLoadLoginPGPage();
loginPGPagoPAPage.insertUsername(nome);
loginPGPagoPAPage.insertPassword(pwd);
loginPGPagoPAPage.clickInviaButton();
- AutorizzaInvioDatiPGPage autorizzaInvioDatiPGPage = new AutorizzaInvioDatiPGPage(this.driver);
+
autorizzaInvioDatiPGPage.waitLoadAutorizzaInvioDatiPGPage();
autorizzaInvioDatiPGPage.clickInviaButton();
}
public void waitLoadUtentiPage() {
try {
- WebTool.waitTime(15);
+ webTool.waitTime(15);
WebElement utentiPageTitle = driver.findElement(By.xpath("//div/h4[contains(text(),'Utenti')]"));
WebElement sottoTitolo = driver.findElement(By.xpath("//div/p[contains(text(),'Gestisci gli utenti')]"));
WebElement addUserButton = driver.findElement(By.xpath("//button[contains(text(),'Aggiungi utente')]"));
@@ -132,7 +153,7 @@ public void waitLoadUtentiPage() {
logger.info("Si visualizza correttamente utenti page");
} catch (TimeoutException e) {
logger.error("Non si visualizza correttamente utenti page con errore:" + e.getMessage());
- Assert.fail("Non si visualizza correttamente utenti page con errore:" + e.getMessage());
+ Assertions.fail("Non si visualizza correttamente utenti page con errore:" + e.getMessage());
}
}
@@ -157,12 +178,12 @@ public void waitLoadAggiungiUtentePage() {
public void insertData(String codiceFiscale, String name, String surname, String email) throws InterruptedException {
codiceFiscaleBox.sendKeys(codiceFiscale);
- WebTool.waitTime(2);
+ webTool.waitTime(2);
if (nameBox.getAttribute("value").equalsIgnoreCase(name) && surnameBox.getAttribute("value").equalsIgnoreCase(surname)) {
logger.info("Il nome e il cognome è generato correttamente");
} else {
logger.error("Il nome e il cognome non è generato correttamente");
- Assert.fail("Il nome e il cognome non è generato correttamente");
+ Assertions.fail("Il nome e il cognome non è generato correttamente");
}
this.js().executeScript("arguments[0].setAttribute('autocomplete', 'off')", emailBox);
emailBox.sendKeys(Keys.chord(Keys.CONTROL, "a"), Keys.DELETE);
@@ -237,7 +258,7 @@ public void waitLoadRecapPage() {
logger.info("Si visualizza correttamente pagina riepilogativa");
} catch (TimeoutException e) {
logger.error("Non si visualizza correttamente pagina riepilogativa con errore:" + e.getMessage());
- Assert.fail("Non si visualizza correttamente pagina riepilogativa con errore:" + e.getMessage());
+ Assertions.fail("Non si visualizza correttamente pagina riepilogativa con errore:" + e.getMessage());
}
}
@@ -254,7 +275,7 @@ public void checkEmailBoxActive() {
logger.info("il campo email e il campo conferma email sono attivi");
} else {
logger.error("il campo email e il campo conferma email sono disattivi");
- Assert.fail("il campo email e il campo conferma email sono disattivi");
+ Assertions.fail("il campo email e il campo conferma email sono disattivi");
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/AcccediAreaRiservataPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/AcccediAreaRiservataPAPage.java
index 5de17680d..4b8a95a76 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/AcccediAreaRiservataPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/AcccediAreaRiservataPAPage.java
@@ -2,13 +2,22 @@
import it.pn.frontend.e2e.common.BasePage;
-import it.pn.frontend.e2e.section.CookiesSection;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+/*
+* Modifiche principali
+Iniezione WebDriver con Spring: Il costruttore della classe utilizza @Autowired, permettendo a Spring di gestire automaticamente il driver.
+Annotazione @Component: Aggiunta per registrare la classe come bean Spring, rendendo l'istanza accessibile in altre parti dell’applicazione.
+Logging migliorato: La sintassi dei log logger.error è stata modificata per sfruttare il placeholder {} di SLF4J, migliorando la leggibilità.*/
+
+
+@Component
public class AcccediAreaRiservataPAPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("AccediAreaRiservataPAPage");
@FindBy(id = "spidButton")
@@ -17,6 +26,7 @@ public class AcccediAreaRiservataPAPage extends BasePage {
@FindBy (id = "forward_prod-pn-test")
WebElement testButton;
+ @Autowired
public AcccediAreaRiservataPAPage(WebDriver driver) {
super(driver);
}
@@ -28,7 +38,7 @@ public void waitLoadLoginPageMittente(){
logger.info("Accedi Area Riservata Page caricata");
}catch (TimeoutException e){
logger.error("Il titolo nella pagina Accedi Area Riservata non è presente con errore : "+e.getMessage());
- Assert.fail("Il titolo nella pagina Accedi Area Riservata non è presente con errore : "+e.getMessage());
+ Assertions.fail("Il titolo nella pagina Accedi Area Riservata non è presente con errore : "+e.getMessage());
}
}
@@ -41,7 +51,7 @@ public void selezionareSpidButton(){
logger.info("click sul bottone SPID effettuato");
}catch (TimeoutException e){
logger.error("Il bottone SPID non è cliccabile con errore : "+e.getMessage());
- Assert.fail("Il bottone SPID non è cliccabile con errore : "+e.getMessage());
+ Assertions.fail("Il bottone SPID non è cliccabile con errore : "+e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/ApiKeyPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/ApiKeyPAPage.java
index ccc330a4a..b41bb4ee0 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/ApiKeyPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/ApiKeyPAPage.java
@@ -1,71 +1,92 @@
package it.pn.frontend.e2e.pages.mittente;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import it.pn.frontend.e2e.utility.WebTool;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.util.List;
-
+/*
+* Principali Modifiche
+Spring Boot Integration: La classe è annotata con @Component per essere riconosciuta come bean.
+Iniezione del WebDriver: Il driver viene iniettato tramite @Autowired nel costruttore.
+Logging Ottimizzato: Utilizzo di placeholder {} con SLF4J nei metodi di logging per migliore leggibilità e prestazioni.
+* dubbio su Action per capire come iniettarlo in Spring
+*
+* */
+@Component
public class ApiKeyPAPage extends BasePage {
- private static final Logger logger = LoggerFactory.getLogger("ApiKeyPAPage");
+
+ private static final Logger logger = LoggerFactory.getLogger(ApiKeyPAPage.class);
@FindBy(id = "generate-api-key")
- WebElement generateApiKeyButton;
+ private WebElement generateApiKeyButton;
@FindBy(id = "name")
- WebElement apiKeyNameInput;
+ private WebElement apiKeyNameInput;
@FindBy(id = "button-view-groups-id")
- WebElement visualizzaIdGruppo;
+ private WebElement visualizzaIdGruppo;
@FindBy(id = "continue-button")
- WebElement apiContinuaButton;
+ private WebElement apiContinuaButton;
@FindBy(id = "go-to-api-keys")
- WebElement tornaApiButton;
+ private WebElement tornaApiButton;
@FindBy(id = "button-block")
- WebElement blockButton;
+ private WebElement blockButton;
@FindBy(id = "close-modal-button")
- WebElement annullaButtonNelPopUp;
+ private WebElement annullaButtonNelPopUp;
@FindBy(id = "action-modal-button")
- WebElement confermaButtonNelPopUp;
+ private WebElement confermaButtonNelPopUp;
@FindBy(xpath = "//li[contains(@data-testid,'buttonEnable')]")
- WebElement attivaButtonNelMenu;
+ private WebElement attivaButtonNelMenu;
@FindBy(id = "button-rotate")
- WebElement ruotaButtonNelMenu;
+ private WebElement ruotaButtonNelMenu;
@FindBy(id = "groups")
- WebElement gruppoInput;
+ private WebElement gruppoInput;
@FindBy(id = "button-view")
- WebElement visualizzaApiButton;
+ private WebElement visualizzaApiButton;
@FindBy(id = "close-modal-button")
- WebElement closeButtonPopUpVisualizza;
+ private WebElement closeButtonPopUpVisualizza;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
+ @Autowired
public ApiKeyPAPage(WebDriver driver) {
super(driver);
}
+
public void waitLoadApikeyPage() {
try {
By apiKeyTitle = By.id("API Key-page");
- this.getWebDriverWait(30).withMessage("il titolo della pagina Apikey non è visibile").until(ExpectedConditions.visibilityOfElementLocated(apiKeyTitle));
- this.getWebDriverWait(40).withMessage("il bottone genera ApiKey non è cliccabile").until(ExpectedConditions.elementToBeClickable(this.generateApiKeyButton));
+ this.getWebDriverWait(30).withMessage("Il titolo della pagina ApiKey non è visibile")
+ .until(ExpectedConditions.visibilityOfElementLocated(apiKeyTitle));
+ this.getWebDriverWait(40).withMessage("Il bottone genera ApiKey non è cliccabile")
+ .until(ExpectedConditions.elementToBeClickable(this.generateApiKeyButton));
logger.info("Api Key Page caricata");
} catch (TimeoutException e) {
- logger.error("Api Key Page NON caricata con errore : " + e.getMessage());
- Assert.fail("Api Key Page NON caricata con errore : " + e.getMessage());
+ logger.error("Api Key Page NON caricata con errore: {}", e.getMessage());
+ Assertions.fail("Api Key Page NON caricata con errore: " + e.getMessage());
}
}
@@ -74,23 +95,26 @@ public void clickSulBottoneGeneraApiKey() {
}
public void inserireUnNomePerApiKey(String nomeApiKey) {
- getWebDriverWait(30).withMessage("Il campo Nome Apikey non è visibile").until(ExpectedConditions.visibilityOf(this.apiKeyNameInput));
+ getWebDriverWait(30).withMessage("Il campo Nome Apikey non è visibile")
+ .until(ExpectedConditions.visibilityOf(this.apiKeyNameInput));
this.apiKeyNameInput.sendKeys(nomeApiKey);
}
public void clickSulBottoneContinua() {
- getWebDriverWait(40).withMessage("Il bottone Continua non è cliccabile").until(ExpectedConditions.elementToBeClickable(this.apiContinuaButton));
+ getWebDriverWait(40).withMessage("Il bottone Continua non è cliccabile")
+ .until(ExpectedConditions.elementToBeClickable(this.apiContinuaButton));
this.apiContinuaButton.click();
}
public void siVisualizzaCorrettamenteConfermaPage() {
try {
By confirmationApiPageTitle = By.id("go-to-api-keys");
- this.getWebDriverWait(30).withMessage("Il titolo della pagina conferma Apikey non è visibile").until(ExpectedConditions.visibilityOfElementLocated(confirmationApiPageTitle));
- logger.info("Api Key ConfirmationPage caricata");
+ this.getWebDriverWait(30).withMessage("Il titolo della pagina conferma Apikey non è visibile")
+ .until(ExpectedConditions.visibilityOfElementLocated(confirmationApiPageTitle));
+ logger.info("Api Key Confirmation Page caricata");
} catch (TimeoutException e) {
- logger.error("Il titolo della Api Key ConfirmationPage NON caricata con errore : " + e.getMessage());
- Assert.fail("Il titolo della Api Key ConfirmationPage NON caricata con errore : " + e.getMessage());
+ logger.error("Il titolo della Api Key ConfirmationPage NON caricata con errore: {}", e.getMessage());
+ Assertions.fail("Il titolo della Api Key ConfirmationPage NON caricata con errore: " + e.getMessage());
}
}
@@ -101,30 +125,31 @@ public void clickSulBottoneTornaApiKey() {
public void siVisualizzaNuovaApiAttiva(String nomeApiKey) {
try {
By statoAttivoField = By.xpath("//div[@data-testid='statusChip-Attiva']");
- this.getWebDriverWait(30).withMessage("lo stato dell'ApiKey non è Attiva").until(ExpectedConditions.visibilityOfElementLocated(statoAttivoField));
+ this.getWebDriverWait(30).withMessage("lo stato dell'ApiKey non è Attiva")
+ .until(ExpectedConditions.visibilityOfElementLocated(statoAttivoField));
By apiNameAttivoField = By.xpath("//p[contains(text(),'" + nomeApiKey + "')]");
- this.getWebDriverWait(30).withMessage("Il nome del ApiKey attiva non è: " + nomeApiKey).until(ExpectedConditions.visibilityOfElementLocated(apiNameAttivoField));
- logger.info("Api Key ConfirmationPage caricata");
+ this.getWebDriverWait(30).withMessage("Il nome del ApiKey attiva non è: " + nomeApiKey)
+ .until(ExpectedConditions.visibilityOfElementLocated(apiNameAttivoField));
+ logger.info("Api Key Confirmation Page caricata");
} catch (TimeoutException e) {
- logger.error("Api Key ConfirmationPage NON caricata con errore : " + e.getMessage());
- Assert.fail("Api Key ConfirmationPage NON caricata con errore : " + e.getMessage());
+ logger.error("Api Key Confirmation Page NON caricata con errore: {}", e.getMessage());
+ Assertions.fail("Api Key Confirmation Page NON caricata con errore: " + e.getMessage());
}
}
public String getNomi(int i) {
By nomiApiKeyBy = By.xpath("//tbody/tr/td[contains(@class,'MuiTableCell-root MuiTableCell-body MuiTableCell-sizeMedium css-1kqk1ww')]/div/p");
- this.getWebDriverWait(30).withMessage("la lista dei nomi ApiKey non è visibile ").until(ExpectedConditions.visibilityOfElementLocated(nomiApiKeyBy));
+ this.getWebDriverWait(30).withMessage("la lista dei nomi ApiKey non è visibile")
+ .until(ExpectedConditions.visibilityOfElementLocated(nomiApiKeyBy));
List nomiApiKeyList = this.elements(nomiApiKeyBy);
-
return nomiApiKeyList.get(i).getText();
-
}
public int getPosizioneMenuButton() {
By statiApiKeyBy = By.xpath("//div[contains(@id,'status-chip-')]");
- this.getWebDriverWait(30).withMessage("lista stati ApiKey non trovata").until(ExpectedConditions.visibilityOfElementLocated(statiApiKeyBy));
+ this.getWebDriverWait(30).withMessage("lista stati ApiKey non trovata")
+ .until(ExpectedConditions.visibilityOfElementLocated(statiApiKeyBy));
List statiApiKeyList = this.elements(statiApiKeyBy);
-
for (int i = 0; i < statiApiKeyList.size(); i++) {
if (statiApiKeyList.get(i).getAttribute("id").equalsIgnoreCase("status-chip-Attiva")) {
if (!getNomi(i).equalsIgnoreCase("fe-TA-apikey-test")) {
@@ -132,25 +157,21 @@ public int getPosizioneMenuButton() {
}
}
}
-
return -1;
-
}
public void clickMenuButton() {
-
By menuAttivaButtonBy = By.xpath("//button[@data-testid='contextMenuButton' and @aria-label='Opzioni su API Key']");
List menuAttivaButton = this.elements(menuAttivaButtonBy);
- this.getWebDriverWait(30).withMessage("menu Apikey da Bloccare non trovato").until(ExpectedConditions.visibilityOfElementLocated(menuAttivaButtonBy));
-
+ this.getWebDriverWait(30).withMessage("menu Apikey da Bloccare non trovato")
+ .until(ExpectedConditions.visibilityOfElementLocated(menuAttivaButtonBy));
int posizioneMenuButton = getPosizioneMenuButton();
if (posizioneMenuButton >= 0) {
menuAttivaButton.get(posizioneMenuButton).click();
} else {
logger.error("Nessuna Api Key diversa da 'fe-TA-apikey-test' da bloccare");
- Assert.fail("Nessuna Api Key diversa da 'fe-TA-apikey-test' da bloccare");
+ Assertions.fail("Nessuna Api Key diversa da 'fe-TA-apikey-test' da bloccare");
}
-
}
public void clickSuBlocca() {
@@ -165,7 +186,7 @@ public void siVisualizzaPopUp() {
logger.info("Il popup si visualizza correttamente");
} catch (TimeoutException e) {
logger.error("Il popup NON si visualizza correttamente con errore:" + e.getMessage());
- Assert.fail("Il popup NON si visualizza correttamente con errore:" + e.getMessage());
+ Assertions.fail("Il popup NON si visualizza correttamente con errore:" + e.getMessage());
}
}
@@ -186,7 +207,7 @@ public void notificaSelezionataStatoBloccata() {
logger.info("La notifica è in stato bloccata");
} catch (TimeoutException e) {
logger.error("La notifica è in stato bloccata con errore:" + e.getMessage());
- Assert.fail("La notifica è in stato bloccata con errore:" + e.getMessage());
+ Assertions.fail("La notifica è in stato bloccata con errore:" + e.getMessage());
}
}
@@ -202,7 +223,7 @@ public void siVisualizzaPoPUpAttiva() {
logger.info("Si visualizza correttamente il popup attiva");
} catch (TimeoutException e) {
logger.error("NON si visualizza correttamente il popup attiva con errore:" + e.getMessage());
- Assert.fail("NON si visualizza correttamente il popup attiva con errore:" + e.getMessage());
+ Assertions.fail("NON si visualizza correttamente il popup attiva con errore:" + e.getMessage());
}
}
@@ -213,7 +234,7 @@ public void siVisualizzaNotificaSelezionataBloccata() {
logger.info("La notifica è in stato bloccata");
} catch (TimeoutException e) {
logger.error("La notifica è in stato bloccata con errore:" + e.getMessage());
- Assert.fail("La notifica è in stato bloccata con errore:" + e.getMessage());
+ Assertions.fail("La notifica è in stato bloccata con errore:" + e.getMessage());
}
}
@@ -229,7 +250,7 @@ public void siVisualizzaPoPUpRuota() {
logger.info("Si visualizza correttamente il popup ruota");
} catch (TimeoutException e) {
logger.error("NON si visualizza correttamente il popup ruota con errore:" + e.getMessage());
- Assert.fail("NON si visualizza correttamente il popup ruota con errore:" + e.getMessage());
+ Assertions.fail("NON si visualizza correttamente il popup ruota con errore:" + e.getMessage());
}
}
@@ -240,7 +261,7 @@ public void siVisualizzaNotificaSelezionataRuotata() {
logger.info("Si visualizza correttamente il popup ruota");
} catch (TimeoutException e) {
logger.error("NON si visualizza correttamente il popup ruota con errore:" + e.getMessage());
- Assert.fail("NON si visualizza correttamente il popup ruota con errore:" + e.getMessage());
+ Assertions.fail("NON si visualizza correttamente il popup ruota con errore:" + e.getMessage());
}
}
@@ -396,7 +417,7 @@ public void waitLoadMessaggioData() {
logger.info("Il messaggio con la data di creazione si vede correttamente");
} catch (TimeoutException e) {
logger.error("Il messaggio con la data di creazione NON si vede correttamente con errore: " + e.getMessage());
- Assert.fail("Il messaggio con la data di creazione NON si vede correttamente con errore: " + e.getMessage());
+ Assertions.fail("Il messaggio con la data di creazione NON si vede correttamente con errore: " + e.getMessage());
}
}
@@ -424,7 +445,7 @@ public void cancellareTestoInserito() {
logger.info("Il testo è stato cancellato correttamente");
} catch (TimeoutException e) {
logger.error("Il testo NON è stato cancellato correttamente" + e.getMessage());
- Assert.fail("Il testo è NON stato cancellato correttamente" + e.getMessage());
+ Assertions.fail("Il testo è NON stato cancellato correttamente" + e.getMessage());
}
}
@@ -435,7 +456,7 @@ public void siVisualizzaMessaggioErroreApiName() {
logger.info("Si visualizza correttamente il messaggio di errore");
} catch (TimeoutException e) {
logger.error("NON si visualizza correttamente il messaggio di errore" + e.getMessage());
- Assert.fail("NON si visualizza correttamente il messaggio di errore" + e.getMessage());
+ Assertions.fail("NON si visualizza correttamente il messaggio di errore" + e.getMessage());
}
}
@@ -451,7 +472,7 @@ public void siVisualizzaPopUpVisualizza() {
logger.info("Si visualizza correttamente il sotto titolo del pop up");
} catch (TimeoutException e) {
logger.error("NON si visualizza correttamente il sotto titolo pop up: " + e.getMessage());
- Assert.fail("NON si visualizza correttamente il sotto titolo pop up: " + e.getMessage());
+ Assertions.fail("NON si visualizza correttamente il sotto titolo pop up: " + e.getMessage());
}
}
@@ -462,8 +483,10 @@ public void chiudiPopUpVisualizza() {
}
public void clickVisualizzaIdApiKey() {
+ webTool.waitTime(5);
+ visualizzaIdGruppo = driver.findElement(By.id("button-view-groups-id"));
this.getWebDriverWait(30).withMessage("Il bottone visualizza Id api key non è cliccabile")
- .until(ExpectedConditions.elementToBeClickable(this.visualizzaIdGruppo));
+ .until(ExpectedConditions.elementToBeClickable(visualizzaIdGruppo));
this.visualizzaIdGruppo.click();
}
@@ -474,7 +497,7 @@ public void popUpGruppiAssociati() {
logger.info("Si visualizza correttamente il titolo popup Gruppi associati alla API");
} catch (TimeoutException e) {
logger.error("Non si visualizza correttamente il titolo popup Gruppi associati alla API con errore:" + e.getMessage());
- Assert.fail("Non si visualizza correttamente il titolo popup Gruppi associati alla API con errore:" + e.getMessage());
+ Assertions.fail("Non si visualizza correttamente il titolo popup Gruppi associati alla API con errore:" + e.getMessage());
}
}
@@ -494,7 +517,7 @@ public String copiaApiKey() {
return inputFieldApiKey.getAttribute("value");
} catch (TimeoutException e) {
logger.error("NON si visualizza correttamente il campo ApiKey con errore:" + e.getMessage());
- Assert.fail("NON si visualizza correttamente il campo ApiKey con errore:" + e.getMessage());
+ Assertions.fail("NON si visualizza correttamente il campo ApiKey con errore:" + e.getMessage());
return null;
} finally {
this.chiudiPopUpVisualizza();
@@ -511,7 +534,23 @@ public void mouseHoverGroups() {
logger.info("mouse hover sopra gruppi effetuato correttamente");
} else {
logger.error("Non è stato possibile trovare la colonna gruppi della prima riga");
- Assert.fail("Non è stato possibile trovare la colonna gruppi della prima riga");
+ Assertions.fail("Non è stato possibile trovare la colonna gruppi della prima riga");
}
}
+
+ public String copiaApiKeyESalva(){
+ By apiKeyField = By.id("apiKeyId");
+ return element(apiKeyField).getAttribute("value");
+ }
+
+ public String visualizzaApiKeyInElenco(){
+ By contextMenu = By.xpath("//button[@data-testid='contextMenuButton']");
+ elements(contextMenu).get(0).click();
+ webTool.waitTime(1);
+ By visualizzaCodiceButton = By.xpath("//li[@data-testid='buttonView']");
+ element(visualizzaCodiceButton).click();
+ webTool.waitTime(1);
+ By apiKeyDaElenco = By.xpath("//input[@aria-invalid='false']");
+ return element(apiKeyDaElenco).getAttribute("value");
+ }
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/AreaRiservataPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/AreaRiservataPAPage.java
index 76a43e3d4..41768ec90 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/AreaRiservataPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/AreaRiservataPAPage.java
@@ -1,52 +1,58 @@
package it.pn.frontend.e2e.pages.mittente;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
import java.util.List;
-
+/*
+*Iniezione Spring: La classe è ora annotata con @Component per permettere a Spring Boot di gestirla come un bean, e il costruttore AreaRiservataPAPage riceve WebDriver tramite iniezione automatica.
+Gestione WebElement: Gli elementi WebElement definiti con @FindBy vengono iniettati automaticamente grazie a Spring e Selenium, senza ulteriori istanze di driver nella classe.
+* */
+@Component
public class AreaRiservataPAPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("AreaRiservataPAPage");
@FindBy(xpath = "//p[contains(@class,'MuiTypography-root MuiTypography-body1 ShowDots')]")
- List infoLabel;
+ private List infoLabel;
@FindBy(id = "forward_prod-pn-dev")
- WebElement piattaformaNotificaDevGestisciButton;
+ private WebElement piattaformaNotificaDevGestisciButton;
@FindBy(id = "forward_prod-pn-test")
- WebElement piattaformaNotificaTestGestisciButton;
+ private WebElement piattaformaNotificaTestGestisciButton;
@FindBy(id = "forward_prod-pn")
- WebElement piattaformaNotificaUatGestisciButton;
-
+ private WebElement piattaformaNotificaUatGestisciButton;
+ @Autowired
public AreaRiservataPAPage(WebDriver driver) {
super(driver);
}
- public void waitLoadAreaRiservataPAPage(){
- try{
+ public void waitLoadAreaRiservataPAPage() {
+ try {
By panoramicaLabel = By.cssSelector(".MuiTypography-root.MuiTypography-h4");
- this.getWebDriverWait(30).until(ExpectedConditions.visibilityOfElementLocated(panoramicaLabel));
+ getWebDriverWait(30).until(ExpectedConditions.visibilityOfElementLocated(panoramicaLabel));
logger.info("Titolo Panoramica dell'area Riservata PA Page caricato");
- }catch (TimeoutException e){
- logger.error("Titolo 'Panoramica' dell'area Riservata PA Page non caricato con errore : "+e.getMessage());
- Assert.fail("Titolo 'Panoramica' dell'area Riservata PA Page non caricato con errore : "+e.getMessage());
+ } catch (TimeoutException e) {
+ logger.error("Titolo 'Panoramica' dell'area Riservata PA Page non caricato con errore: " + e.getMessage());
+ Assertions.fail("Titolo 'Panoramica' dell'area Riservata PA Page non caricato con errore: " + e.getMessage());
}
}
- public boolean verificaCodiceFiscale(String codiceFiscale){
+ public boolean verificaCodiceFiscale(String codiceFiscale) {
boolean codiceFiscaleFound = false;
- for(WebElement element : infoLabel){
- logger.info("Info ente presente nella pagina Aria Riservata: "+element.getText());
- if(element.getText().equals(codiceFiscale)){
+ for (WebElement element : infoLabel) {
+ logger.info("Info ente presente nella pagina Area Riservata: " + element.getText());
+ if (element.getText().equals(codiceFiscale)) {
codiceFiscaleFound = true;
break;
}
@@ -54,49 +60,48 @@ public boolean verificaCodiceFiscale(String codiceFiscale){
return codiceFiscaleFound;
}
- public void selezionaPiattaformaNotificaDev(){
+ public void selezionaPiattaformaNotificaDev() {
try {
getWebDriverWait(30).until(ExpectedConditions.elementToBeClickable(piattaformaNotificaDevGestisciButton));
- if (this.piattaformaNotificaDevGestisciButton.isDisplayed()) {
- this.piattaformaNotificaDevGestisciButton.click();
+ if (piattaformaNotificaDevGestisciButton.isDisplayed()) {
+ piattaformaNotificaDevGestisciButton.click();
} else {
- this.js().executeScript("arguments[0].scrollIntoView(true);", this.piattaformaNotificaDevGestisciButton);
- this.piattaformaNotificaDevGestisciButton.click();
+ js().executeScript("arguments[0].scrollIntoView(true);", piattaformaNotificaDevGestisciButton);
+ piattaformaNotificaDevGestisciButton.click();
}
- }catch(TimeoutException | NoSuchElementException | ElementClickInterceptedException e){
- logger.error("il bottone piattaforma notifica dev non è presente o non è cliccabile, "+e.getMessage());
- Assert.fail("il bottone piattaforma notifica dev non è presente o non è cliccabile. "+e.getMessage());
+ } catch (TimeoutException | NoSuchElementException | ElementClickInterceptedException e) {
+ logger.error("Il bottone piattaforma notifica dev non è presente o non è cliccabile: " + e.getMessage());
+ Assertions.fail("Il bottone piattaforma notifica dev non è presente o non è cliccabile: " + e.getMessage());
}
}
- public void selezionaPiattaformaNotificaTest() {
- try{
- getWebDriverWait(30).until(ExpectedConditions.elementToBeClickable(piattaformaNotificaTestGestisciButton));
- if(this.piattaformaNotificaTestGestisciButton.isDisplayed()){
- this.piattaformaNotificaTestGestisciButton.click();
- }else{
- this.js().executeScript("arguments[0].scrollIntoView(true);",this.piattaformaNotificaDevGestisciButton);
- this.piattaformaNotificaTestGestisciButton.click();
- }
- }catch(TimeoutException e){
- logger.error("il bottone piattaforma notifica test non è presente o non è cliccabile, "+e.getMessage());
- Assert.fail("il bottone piattaforma notifica test non è presente o non è cliccabile. "+e.getMessage());
+ public void selezionaPiattaformaNotificaTest() {
+ try {
+ getWebDriverWait(30).until(ExpectedConditions.elementToBeClickable(piattaformaNotificaTestGestisciButton));
+ if (piattaformaNotificaTestGestisciButton.isDisplayed()) {
+ piattaformaNotificaTestGestisciButton.click();
+ } else {
+ js().executeScript("arguments[0].scrollIntoView(true);", piattaformaNotificaTestGestisciButton);
+ piattaformaNotificaTestGestisciButton.click();
+ }
+ } catch (TimeoutException | NoSuchElementException | ElementClickInterceptedException e) {
+ logger.error("Il bottone piattaforma notifica test non è presente o non è cliccabile: " + e.getMessage());
+ Assertions.fail("Il bottone piattaforma notifica test non è presente o non è cliccabile: " + e.getMessage());
}
}
public void selezionaPiattaformaNotificaUat() {
- try{
- getWebDriverWait(30).until(ExpectedConditions.elementToBeClickable(piattaformaNotificaUatGestisciButton));
-
- if(this.piattaformaNotificaUatGestisciButton.isDisplayed()){
- this.piattaformaNotificaUatGestisciButton.click();
- }else{
- this.js().executeScript("arguments[0].scrollIntoView(true);",this.piattaformaNotificaDevGestisciButton);
- this.piattaformaNotificaUatGestisciButton.click();
- }
- }catch(TimeoutException | NoSuchElementException | ElementClickInterceptedException e){
- logger.error("il bottone piattaforma notifica uat non è presente o non è cliccabile, "+e.getMessage());
- Assert.fail("il bottone piattaforma notifica uat non è presente o non è cliccabile. "+e.getMessage());
+ try {
+ getWebDriverWait(30).until(ExpectedConditions.elementToBeClickable(piattaformaNotificaUatGestisciButton));
+ if (piattaformaNotificaUatGestisciButton.isDisplayed()) {
+ piattaformaNotificaUatGestisciButton.click();
+ } else {
+ js().executeScript("arguments[0].scrollIntoView(true);", piattaformaNotificaUatGestisciButton);
+ piattaformaNotificaUatGestisciButton.click();
+ }
+ } catch (TimeoutException | NoSuchElementException | ElementClickInterceptedException e) {
+ logger.error("Il bottone piattaforma notifica uat non è presente o non è cliccabile: " + e.getMessage());
+ Assertions.fail("Il bottone piattaforma notifica uat non è presente o non è cliccabile: " + e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/AutorizziInvioDatiPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/AutorizziInvioDatiPAPage.java
index 07d9548fd..a4c37d447 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/AutorizziInvioDatiPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/AutorizziInvioDatiPAPage.java
@@ -1,43 +1,47 @@
package it.pn.frontend.e2e.pages.mittente;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class AutorizziInvioDatiPAPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("AutorizziInvioDatiPAPage");
@FindBy(css = "button[name='confirm']")
- WebElement inviaButton;
+ private WebElement inviaButton;
+ @Autowired
public AutorizziInvioDatiPAPage(WebDriver driver) {
super(driver);
}
- public void waitLoadAutorizziInvioDatiPAPage(){
- try{
+ public void waitLoadAutorizziInvioDatiPAPage() {
+ try {
By titlePage = By.cssSelector("h1.u-text-r-xl.u-margin-bottom-l");
- this.getWebDriverWait(30).until(ExpectedConditions.visibilityOfElementLocated(titlePage));
+ getWebDriverWait(30).until(ExpectedConditions.visibilityOfElementLocated(titlePage));
logger.info("Autorizzi Invio Dati PA Page caricata");
- }catch (TimeoutException | NoSuchElementException e){
- logger.error("il titolo di Autorizzi Invio Dati PA Page non caricato con errore : "+e.getMessage());
- Assert.fail("il titolo di Autorizzi Invio Dati PA Page non caricato con errore : "+e.getMessage());
+ } catch (TimeoutException | NoSuchElementException e) {
+ logger.error("Il titolo di Autorizzi Invio Dati PA Page non è caricato con errore: " + e.getMessage());
+ Assertions.fail("Il titolo di Autorizzi Invio Dati PA Page non è caricato con errore: " + e.getMessage());
}
}
- public void selezionareInvia(){
+ public void selezionareInvia() {
logger.info("Click button Invia");
try {
- this.getWebDriverWait(30).until(ExpectedConditions.elementToBeClickable(this.inviaButton));
- this.inviaButton.click();
- }catch (TimeoutException e){
- logger.error("Il bottone invia nella pagina Autorizza Invio Dati non è stato cliccato con errore : "+e.getMessage());
- Assert.fail("Il bottone invia nella pagina Autorizza Invio Dati non è stato cliccato con errore : "+e.getMessage());
- }
+ getWebDriverWait(30).until(ExpectedConditions.elementToBeClickable(inviaButton));
+ inviaButton.click();
+ } catch (TimeoutException e) {
+ logger.error("Il bottone Invia nella pagina Autorizza Invio Dati non è stato cliccato con errore: " + e.getMessage());
+ Assertions.fail("Il bottone Invia nella pagina Autorizza Invio Dati non è stato cliccato con errore: " + e.getMessage());
+ }
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/DashboardPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/DashboardPage.java
index 665992a57..7a4fd59d8 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/DashboardPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/DashboardPage.java
@@ -1,41 +1,35 @@
package it.pn.frontend.e2e.pages.mittente;
-import com.google.gson.internal.LinkedTreeMap;
import it.pn.frontend.e2e.common.BasePage;
-import it.pn.frontend.e2e.listeners.Hooks;
-import it.pn.frontend.e2e.listeners.NetWorkInfo;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import it.pn.frontend.e2e.model.singleton.NotificationSingleton;
-import it.pn.frontend.e2e.rest.RestNotification;
import it.pn.frontend.e2e.utility.WebTool;
-import org.apache.commons.io.FileUtils;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.io.File;
-import java.io.IOException;
-import java.net.URL;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import static org.openqa.selenium.support.ui.ExpectedConditions.elementToBeClickable;
+@Component // Rende la classe un bean Spring per l'iniezione in altre classi
public class DashboardPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("DashboardMittentePagoPA");
- private final List netWorkInfos = Hooks.netWorkInfos;
- private final NotificationSingleton notificationSingleton = NotificationSingleton.getInstance();
+ @Autowired
+ private NotificationSingleton notificationSingleton;
@FindBy(id = "menu-item(statistiche)")
WebElement sezioneStatistiche;
@@ -88,7 +82,13 @@ public class DashboardPage extends BasePage {
@FindBy(xpath = "//button[@data-testid='exportJpgButton']")
WebElement esportaJpegBottone;
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+ @Autowired
public DashboardPage(WebDriver driver) {
super(driver);
}
@@ -128,33 +128,37 @@ public void checkVisualizzaGraficoInviiDigitaliPerEsito() {
}
public void checkVisualizzaGraficoTempoMedioInviiDigitali() {
- getWebDriverWait(10).withMessage("Il grafico Errori tecnici per tipologia non visibile").until(ExpectedConditions.visibilityOf(graficoErroriTecnici));
- logger.info("Si visualizza il grafico Errori tecnici per tipologia");
- }
-
- public void checkVisualizzaGraficoErroriTecnici(){
getWebDriverWait(10).withMessage("Il grafico Tempo medio degli invii digitali non visibile").until(ExpectedConditions.visibilityOf(graficoTempoMedioInviiDigitali));
logger.info("Si visualizza il grafico Tempo medio degli invii digitali");
}
- public void checkVisualizzaGraficoInviatePerStato(){
+ public void checkVisualizzaGraficoErroriTecnici() {
+ getWebDriverWait(10).withMessage("Il grafico Errori tecnici non visibile").until(ExpectedConditions.visibilityOf(graficoErroriTecnici));
+ logger.info("Si visualizza il grafico Errori tecnici");
+ }
+
+ public void checkVisualizzaGraficoInviatePerStato() {
getWebDriverWait(10).withMessage("la sezione Notifiche inviate per stato non visibile").until(ExpectedConditions.visibilityOf(sezioneNotificheInviatePerStato));
logger.info("Si visualizza la sezione Notifiche inviate per stato e grafico");
}
- public void checkVisualizzaGraficoConsegnatePerModalitaInvio(){
+ public void checkVisualizzaGraficoConsegnatePerModalitaInvio() {
getWebDriverWait(10).withMessage("la sezione Notifiche consegnate per modalità di invio non visibile").until(ExpectedConditions.visibilityOf(sezioneNotificheConsegnatePerModalitaInvio));
logger.info("Si visualizza la sezione Notifiche consegnate per modalità di invio e grafico");
}
- public void insertDataErrata(){
- getWebDriverWait(10).withMessage("Il filtro di data non visibile").until(ExpectedConditions.visibilityOf(dateDa.get(0)));
- logger.info("Si inserisce una data errata");
- dateDa.get(0).click();
- Actions action = new Actions(driver);
- action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(Keys.BACK_SPACE).perform();
- WebTool.waitTime(1);
- dateDa.get(0).sendKeys("01/01/1111");
+ public void insertDataErrata() {
+ getWebDriverWait(10).withMessage("Il filtro di data non visibile").until(ExpectedConditions.visibilityOf(dateDa.get(0)));
+ logger.info("Si inserisce una data errata");
+ dateDa.get(0).click();
+ new Actions(driver)
+ .keyDown(Keys.CONTROL)
+ .sendKeys("a")
+ .keyUp(Keys.CONTROL)
+ .sendKeys(Keys.BACK_SPACE)
+ .perform();
+ webTool.waitTime(1);
+ dateDa.get(0).sendKeys("01/01/1111");
}
public void insertDataErrataNotificheDigitali(){
@@ -163,22 +167,25 @@ public void insertDataErrataNotificheDigitali(){
dateDa.get(1).click();
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(Keys.BACK_SPACE).perform();
- WebTool.waitTime(1);
+ webTool.waitTime(1);
dateDa.get(1).sendKeys("01/01/1111");
}
public void insertDataCorretta(){
getWebDriverWait(10).withMessage("Il filtro di data non visibile").until(ExpectedConditions.visibilityOf(dateDa.get(0)));
logger.info("Si inserisce una data corretta");
dateDa.get(0).click();
- Actions action = new Actions(driver);
- action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).sendKeys(Keys.BACK_SPACE).perform();
+ new Actions(driver)
+ .keyDown(Keys.CONTROL)
+ .sendKeys("a")
+ .keyUp(Keys.CONTROL)
+ .sendKeys(Keys.BACK_SPACE)
+ .perform();
LocalDate dataDaInserire = LocalDate.now().minusDays(90);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String formattedDate = dataDaInserire.format(formatter);
- WebTool.waitTime(1);
+ webTool.waitTime(1);
dateDa.get(0).sendKeys(formattedDate);
}
-
public void insertDataCorrettaNotificheDigitali(){
getWebDriverWait(10).withMessage("Il filtro di data non visibile").until(ExpectedConditions.visibilityOf(dateDa.get(1)));
logger.info("Si inserisce una data corretta");
@@ -188,7 +195,7 @@ public void insertDataCorrettaNotificheDigitali(){
LocalDate dataDaInserire = LocalDate.now().minusDays(90);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String formattedDate = dataDaInserire.format(formatter);
- WebTool.waitTime(1);
+ webTool.waitTime(1);
dateDa.get(1).sendKeys(formattedDate);
}
@@ -239,14 +246,14 @@ public void checkTipoGraficoPerModalitaInvio(String tipoGrafico){
public void cambiaTipoGrafico(){
getWebDriverWait(10).withMessage("Il tipo di grafico Aggregato non visibile").until(ExpectedConditions.visibilityOf(tipoAggregato.get(0)));
tipoAggregato.get(0).click();
- WebTool.waitTime(1);
+ webTool.waitTime(1);
tipoAndamentale.get(0).click();
}
public void cambiaTipoGraficoPerModalitaInvio(){
getWebDriverWait(10).withMessage("Il tipo di grafico Aggregato non visibile").until(ExpectedConditions.visibilityOf(tipoAggregato.get(0)));
tipoAggregato.get(1).click();
- WebTool.waitTime(1);
+ webTool.waitTime(1);
tipoAndamentale.get(0).click();
}
@@ -263,7 +270,7 @@ public void sceglieOpzioneGiorni(){
}
public void clickJpegExport() throws AWTException {
- boolean headless = System.getProperty("headless").equalsIgnoreCase("true");
+ boolean headless = webDriverConfig.getHeadless().equalsIgnoreCase("true");
if (!headless) {
logger.info("controllo esistenza bottone per scaricare jpeg");
getWebDriverWait(10).withMessage("Il bottone esporta jpeg non cliccabile").until(ExpectedConditions.elementToBeClickable(esportaJpegBottone));
@@ -302,9 +309,9 @@ public void clickJpegExport() throws AWTException {
logger.info("Si clicca sul bottone Esporta JPEG");
esportaJpegBottone.click();
- WebTool.waitTime(2);
+ webTool.waitTime(2);
File downloadedFile = new File(downloadDirectory + fileName);
- Assert.assertTrue(downloadedFile.exists());
+ Assertions.assertTrue(downloadedFile.exists());
logger.info("JPEG file downloaded successfully.");
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/DisserviziAppPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/DisserviziAppPAPage.java
index d407a25cd..097d422f6 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/DisserviziAppPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/DisserviziAppPAPage.java
@@ -1,19 +1,21 @@
package it.pn.frontend.e2e.pages.mittente;
import it.pn.frontend.e2e.common.BasePage;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import it.pn.frontend.e2e.utility.DataPopulation;
import it.pn.frontend.e2e.utility.WebTool;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
-import org.junit.Assert;
-import org.openqa.selenium.By;
-import org.openqa.selenium.TimeoutException;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
+import org.junit.jupiter.api.Assertions;
+import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
@@ -21,30 +23,43 @@
import java.util.GregorianCalendar;
import java.util.List;
+@Component
public class DisserviziAppPAPage extends BasePage {
private final Logger logger = LoggerFactory.getLogger("Disservizi PA Page");
- private DataPopulation dataPopulation = new DataPopulation();
+ // @Value("${downloadFilePath}")
+ // private String downloadFilePath;
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+
+ @Autowired
+ private DataPopulation dataPopulation;
- public DisserviziAppPAPage(WebDriver driver) {
- super(driver);
- }
@FindBy(id = "notifications-table")
- WebElement disserviziTable;
+ private WebElement disserviziTable;
@FindBy(xpath = "//tr[@id='tableDowntimeLog.row']//td//div[@data-testid='downtime-status']")
- List statusList;
-
+ private List statusList;
@FindBy(css = "[data-testid='download-legal-fact']")
- List attestazioniFile;
+ private List attestazioniFile;
@FindBy(xpath = "//span[contains(text(), 'Risolto')]")
- List stato;
+ private List stato;
+
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
+ @Autowired
+ public DisserviziAppPAPage(WebDriver driver) {
+ super(driver);
+ }
+
public void waitLoadStatoDellaPiattaformaPage() {
- WebTool.waitTime(5);
+ webTool.waitTime(5);
try {
By disserviziPageTitle = By.id("Stato della piattaforma-page");
By disserviziPageSubTitle = By.id("subtitle-page");
@@ -52,33 +67,27 @@ public void waitLoadStatoDellaPiattaformaPage() {
By disserviziLastUpdate = By.id("appStatusLastCheck");
By disserviziTitleOfTable = By.xpath("//h6[contains(text(),'Storico dei disservizi')]");
- getWebDriverWait(10).withMessage("Non si visualizza correttamente il titolo della pagina")
- .until(ExpectedConditions.visibilityOfElementLocated(disserviziPageTitle));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(disserviziPageTitle));
getWebDriverWait(3).until(ExpectedConditions.textToBe(disserviziPageTitle, "Stato della piattaforma"));
- getWebDriverWait(10).withMessage("Non si visualizza correttamente il sottotitolo della pagina")
- .until(ExpectedConditions.visibilityOfElementLocated(disserviziPageSubTitle));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(disserviziPageSubTitle));
getWebDriverWait(3).until(ExpectedConditions.textToBe(disserviziPageSubTitle, "Verifica il funzionamento di SEND, visualizza lo storico dei disservizi e scarica le relative attestazioni opponibili a terzi."));
- getWebDriverWait(10).withMessage("Non si visualizza correttamente la sezione disservizi")
- .until(ExpectedConditions.visibilityOfElementLocated(disserviziBoxAlert));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(disserviziBoxAlert));
- if (this.element(disserviziBoxAlert).getText().contains("C'è un disservizio in corso")) {
- getWebDriverWait(3).until(ExpectedConditions.textToBe(disserviziBoxAlert, "C'è un disservizio in corso. Per maggiori dettagli, consulta la tabella qui sotto."));
- } else {
- getWebDriverWait(3).until(ExpectedConditions.textToBe(disserviziBoxAlert, "Tutti i servizi di SEND sono operativi."));
- }
+ String boxAlertText = element(disserviziBoxAlert).getText();
+ getWebDriverWait(3).until(ExpectedConditions.textToBe(disserviziBoxAlert, boxAlertText.contains("C'è un disservizio in corso") ?
+ "C'è un disservizio in corso. Per maggiori dettagli, consulta la tabella qui sotto." :
+ "Tutti i servizi di SEND sono operativi."
+ ));
disserviziTable = driver.findElement(By.id("notifications-table"));
- getWebDriverWait(10).withMessage("Non si visualizza correttamente l'ultimo aggiornamento della pagina")
- .until(ExpectedConditions.visibilityOfElementLocated(disserviziLastUpdate));
- getWebDriverWait(10).withMessage("Non si visualizza correttamente la tabella dei disservizi")
- .until(ExpectedConditions.visibilityOf(disserviziTable));
- getWebDriverWait(10).withMessage("Non si visualizza correttamente il titolo della tabella dei disservizi")
- .until(ExpectedConditions.visibilityOfElementLocated(disserviziTitleOfTable));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(disserviziLastUpdate));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOf(disserviziTable));
+ getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(disserviziTitleOfTable));
logger.info("Si visualizza correttamente la sezione disservizi");
} catch (TimeoutException e) {
logger.error("Non si visualizza correttamente la sezione disservizi con errore:" + e.getMessage());
- Assert.fail("Non si visualizza correttamente la sezione disservizi con errore" + e.getMessage());
+ Assertions.fail("Non si visualizza correttamente la sezione disservizi con errore" + e.getMessage());
}
}
@@ -94,14 +103,14 @@ public void getDateDisservice() {
dataPopulation.setDataA(dataFinePrimaRiga);
} else {
logger.error("non é stato possibile recuperare i dati dalla tabella dei disservizi");
- Assert.fail("non é stato possibile recuperare i dati dalla tabella dei disservizi");
+ Assertions.fail("non é stato possibile recuperare i dati dalla tabella dei disservizi");
}
}
public void waitLoadDisserviziTable() {
try {
- WebTool.waitTime(10);
+ webTool.waitTime(10);
disserviziTable = driver.findElement(By.id("notifications-table"));
getWebDriverWait(10).withMessage("Non si visualizza correttamente la tabella dei disservizi")
.until(ExpectedConditions.visibilityOf(disserviziTable));
@@ -122,7 +131,7 @@ public void waitLoadDisserviziTable() {
getWebDriverWait(3).until(ExpectedConditions.textToBePresentInElement(tableHeaderTitles.get(4), "Stato"));
} else {
logger.error("Non si visualizza correttamente l'header della tabella dei disservizi");
- Assert.fail("Non si visualizza correttamente l'header della tabella dei disservizi");
+ Assertions.fail("Non si visualizza correttamente l'header della tabella dei disservizi");
}
getWebDriverWait(10).withMessage("Non si visualizza correttamente l'header della tabella dei disservizi")
.until(ExpectedConditions.visibilityOf(disserviziTableHeader));
@@ -141,12 +150,12 @@ public void waitLoadDisserviziTable() {
}
} else {
logger.error("Non si visualizzano correttamente le righe della tabella dei disservizi");
- Assert.fail("Non si visualizzano correttamente le righe della tabella dei disservizi");
+ Assertions.fail("Non si visualizzano correttamente le righe della tabella dei disservizi");
}
logger.info("Si visualizza correttamente la tabella dei disservizi");
} catch (TimeoutException e) {
logger.error("Non si visualizza correttamente la tabella dei disservizi con errore:" + e.getMessage());
- Assert.fail("Non si visualizza correttamente la tabella dei disservizi con errore" + e.getMessage());
+ Assertions.fail("Non si visualizza correttamente la tabella dei disservizi con errore" + e.getMessage());
}
}
@@ -169,7 +178,7 @@ public void checkDisserviziInCorso() {
}
} else {
logger.error("Non si visualizza un record in elenco relativo ad un disservizio ancora in corso");
- Assert.fail("Non si visualizza un record in elenco relativo ad un disservizio ancora in corso");
+ Assertions.fail("Non si visualizza un record in elenco relativo ad un disservizio ancora in corso");
}
}
@@ -185,7 +194,7 @@ public void checkDisservizioRisolto(String tipoDisservizio) {
logger.info("Disservizio risolto trovato");
} else {
logger.error("Non si visualizza un record in elenco relativo ad un disservizio risolto");
- Assert.fail("Non si visualizza un record in elenco relativo ad un disservizio risolto");
+ Assertions.fail("Non si visualizza un record in elenco relativo ad un disservizio risolto");
}
}
}
@@ -199,7 +208,7 @@ public void checkDisserviziDisponibili() {
continue;
} else {
logger.error("Non si visualizza un record in elenco relativo ad un disservizio risolto");
- Assert.fail("Non si visualizza un record in elenco relativo ad un disservizio risolto");
+ Assertions.fail("Non si visualizza un record in elenco relativo ad un disservizio risolto");
}
if (status.getText().contains("/") || status.getText().contains("Oggi") && status.getText().contains(":")) {
logger.info("Si visualizza data di fine servizio");
@@ -211,12 +220,60 @@ public void checkDisserviziDisponibili() {
}
} else {
logger.error("Non si visualizza un record in elenco relativo ad un disservizio disponibile");
- Assert.fail("Non si visualizza un record in elenco relativo ad un disservizio disponibile");
+ Assertions.fail("Non si visualizza un record in elenco relativo ad un disservizio disponibile");
}
}
-
+ /*
+ *Spiegazione delle Modifiche:
+Metodo Privato performDownloadAttestazione: La logica comune per trovare e cliccare l'attestazione è stata centralizzata in questo metodo.
+Parametro : Controlla l’indice aggiuntivo richiesto per selezionare una riga specifica in base al metodo chiamante (downloadAttestazione() o downloadAttestazione(int rows)).
+Metodo determineRowElement: Valuta la riga corretta da selezionare in base alla dimensione della tabella e al indexModifier.
+Logging Ottimizzato: I messaggi di log sono stati uniformati per fornire informazioni su quale riga viene selezionata e cliccata.
+ *
+ *
+ *
+ * */
public void downloadAttestazione() {
+ performDownloadAttestazione(0);
+ }
+
+ public void downloadAttestazione(int rows) {
+ performDownloadAttestazione(rows);
+ }
+
+ private void performDownloadAttestazione(int indexModifier) {
+ List disserviziTableRows = disserviziTable.findElements(By.id("tableDowntimeLog.row"));
+ if (disserviziTableRows.isEmpty()) {
+ logger.error("Non ci sono notifiche da selezionare nel arco temporale settato");
+ Assertions.fail("Non ci sono notifiche da selezionare nel arco temporale settato");
+ return;
+ }
+
+ logger.info("Tabella caricata e non vuota");
+ int index = GregorianCalendar.getInstance().get(Calendar.HOUR_OF_DAY) + indexModifier;
+
+ WebElement riga = determineRowElement(disserviziTableRows, index, indexModifier);
+ WebElement linkDownloadAttestazione = riga.findElements(By.xpath("//button[@data-testid='download-legal-fact']")).get(0);
+ linkDownloadAttestazione.click();
+ logger.info("Click effettuato con successo");
+ }
+
+ private WebElement determineRowElement(List rows, int index, int indexModifier) {
+ WebElement selectedRow;
+ if (rows.size() > index) {
+ selectedRow = rows.get(index);
+ logger.info("Riga selezionata (index={}): {}", index, selectedRow.getText());
+ } else {
+ int adjustedIndex = rows.size() > indexModifier ? rows.size() - (indexModifier + 1) : rows.size() - 1;
+ selectedRow = rows.get(adjustedIndex);
+ logger.info("Riga selezionata (adjusted index={}): {}", adjustedIndex, selectedRow.getText());
+ }
+ return selectedRow;
+ }
+
+
+ /* public void downloadAttestazione() {
List disserviziTableRows = disserviziTable.findElements(By.id("tableDowntimeLog.row"));
if (!disserviziTableRows.isEmpty()) {
logger.info("tabella caricata e non vuota");
@@ -224,9 +281,9 @@ public void downloadAttestazione() {
Calendar calendar = GregorianCalendar.getInstance();
int index = calendar.get(Calendar.HOUR_OF_DAY);
- logger.info("SIZE ROWS TABLE..."+disserviziTableRows.size());
+ logger.info("SIZE ROWS TABLE..." + disserviziTableRows.size());
logger.info("ROWS SELEZIONATA: " + index);
- WebElement riga =null;
+ WebElement riga = null;
if (disserviziTableRows.size() >= index) {
riga = disserviziTableRows.get(index);
} else {
@@ -238,27 +295,66 @@ public void downloadAttestazione() {
logger.info("click effettuato con successo");
} else {
logger.error("Non ci sono notifiche da selezionare nel arco temporale settato");
- Assert.fail("Non ci sono notifiche da selezionare nel arco temporale settato");
+ Assertions.fail("Non ci sono notifiche da selezionare nel arco temporale settato");
}
+ }
+ public void downloadAttestazione(int rows) {
+ List disserviziTableRows = disserviziTable.findElements(By.id("tableDowntimeLog.row"));
+ if (!disserviziTableRows.isEmpty()) {
+ logger.info("tabella caricata e non vuota");
+ Calendar calendar = GregorianCalendar.getInstance();
+ int index = calendar.get(Calendar.HOUR_OF_DAY) + rows;
+ logger.info("HOUR..." + index);
+ logger.info("SIZE ROWS TABLE..." + disserviziTableRows.size());
+ logger.info("ROWS TABLE..." + rows);
+ logger.info("ROWS SELEZIONATA: " + index);
+ WebElement riga = null;
+ if (disserviziTableRows.size() > index) {
+ logger.info("ROWS SELEZIONATA1: " + index);
+ riga = disserviziTableRows.get(index);
+ } else {
+ logger.info("ROWS SELEZIONATA2: " + rows);
+ if ((rows + 1) < disserviziTableRows.size()) {
+ logger.info("ROWS SELEZIONATA3: " + (disserviziTableRows.size() - (rows + 1)));
+ riga = disserviziTableRows.get(disserviziTableRows.size() - (rows + 1));
+
+ } else if(disserviziTableRows.size() > rows) {
+ logger.info("ROWS SELEZIONATA4: " + rows);
+ riga = disserviziTableRows.get(rows);
+ }
+ else {
+ logger.info("ROWS SELEZIONATA5: " + (disserviziTableRows.size() - 1));
+ riga = disserviziTableRows.get(disserviziTableRows.size() - 1);
+ }
-}
+ }
+ WebElement linkDownloadAttestazione = riga.findElements(By.xpath("//button[@data-testid='download-legal-fact']")).get(0);
+ linkDownloadAttestazione.click();
+ logger.info("click effettuato con successo");
+ } else {
+ logger.error("Non ci sono notifiche da selezionare nel arco temporale settato");
+ Assertions.fail("Non ci sono notifiche da selezionare nel arco temporale settato");
+ }
+ }
+ */
-public void clickLinkAttestazioniOpponibileDisservizi(int numeroLinkAttestazioniOpponibile) {
- if (attestazioniFile.get(numeroLinkAttestazioniOpponibile).isDisplayed()) {
- attestazioniFile.get(numeroLinkAttestazioniOpponibile).click();
- } else {
- this.js().executeScript("arguments[0].scrollIntoView(true);", attestazioniFile.get(numeroLinkAttestazioniOpponibile));
- attestazioniFile.get(numeroLinkAttestazioniOpponibile).click();
+ public void clickLinkAttestazioniOpponibileDisservizi(int numeroLinkAttestazioniOpponibile) {
+ if (attestazioniFile.get(numeroLinkAttestazioniOpponibile).isDisplayed()) {
+ attestazioniFile.get(numeroLinkAttestazioniOpponibile).click();
+ } else {
+ this.js().executeScript("arguments[0].scrollIntoView(true);", attestazioniFile.get(numeroLinkAttestazioniOpponibile));
+ attestazioniFile.get(numeroLinkAttestazioniOpponibile).click();
+ }
}
-}
public boolean confrontoFileConDisservizio() {
getDateDisservice();
logger.info("date prese con successo dal disserivizio");
- String folderPath = System.getProperty("downloadFilePath");
+ String folderPath = webDriverConfig.getDownloadFilePath();
+ logger.info("DOWNLOAD FOLDER "+folderPath);
// Stringa da cercare nel nome del file
String searchString = "PN_DOWNTIME_LEGAL_FACTS";
// Creazione di un oggetto File che rappresenta la cartella
@@ -286,7 +382,7 @@ public boolean confrontoFileConDisservizio() {
//break// Rimuovere il commento se si desidera fermarsi al primo file trovato
} catch (IOException e) {
logger.error("Errore nel leggere il PDF: " + file.getName(), e);
- Assert.fail("Errore nel leggere il PDF: " + file.getName());
+ Assertions.fail("Errore nel leggere il PDF: " + file.getName());
}
}
}
@@ -298,6 +394,7 @@ public boolean confrontoFileConDisservizio() {
}
return false;
}
+
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/InvioNotifichePAPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/InvioNotifichePAPage.java
index e6be0a059..cb2304087 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/InvioNotifichePAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/InvioNotifichePAPage.java
@@ -7,17 +7,25 @@
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+@Component
public class InvioNotifichePAPage extends BasePage {
@FindBy(id = "step-submit")
WebElement continuaButton;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+ @Autowired
public InvioNotifichePAPage(WebDriver driver) {
super(driver);
}
public void selezionareContinuaButton() {
- WebTool.waitTime(5);
+ webTool.waitTime(5);
continuaButton = driver.findElement(By.id("step-submit"));
getWebDriverWait(10).withMessage("Il bottone continua nella pagina invio notifica PA non è cliccabile").until(ExpectedConditions.elementToBeClickable(this.continuaButton));
scrollToElementAndClick(this.continuaButton);
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/LoginPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/LoginPAPage.java
index d518ff89f..8f73c453b 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/LoginPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/LoginPAPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.mittente;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,8 +10,10 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
-
+@Component
public class LoginPAPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("LoginPAPage");
@@ -25,6 +27,7 @@ public class LoginPAPage extends BasePage {
@FindBy(xpath = "//button[contains(text(),'Invia')]")
WebElement inviaButton;
+ @Autowired
public LoginPAPage(WebDriver driver) {
super(driver);
}
@@ -36,7 +39,7 @@ public void waitLoadLoginPAPage(){
logger.info("Login PA Page caricata");
}catch (TimeoutException e){
logger.error("Il titolo della pagina Login PA non caricato con errore : "+e.getMessage());
- Assert.fail("Il titolo della pagina Login PA non caricato con errore : "+e.getMessage());
+ Assertions.fail("Il titolo della pagina Login PA non caricato con errore : "+e.getMessage());
}
}
@@ -59,7 +62,7 @@ public void selezionaInviaDati(){
this.inviaButton.click();
}catch (TimeoutException e){
logger.error("Il bottone invia nella pagina Login PA non è stato cliccato con errore : "+e.getMessage());
- Assert.fail("Il bottone invia nella pagina Login PA non è stato cliccato con errore : "+e.getMessage());
+ Assertions.fail("Il bottone invia nella pagina Login PA non è stato cliccato con errore : "+e.getMessage());
}
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/PiattaformaNotifichePage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/PiattaformaNotifichePage.java
index 3662777a7..d95cc5fe2 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/PiattaformaNotifichePage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/PiattaformaNotifichePage.java
@@ -2,19 +2,24 @@
import com.google.gson.internal.LinkedTreeMap;
import it.pn.frontend.e2e.common.BasePage;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import it.pn.frontend.e2e.listeners.Hooks;
+import it.pn.frontend.e2e.listeners.HooksNew;
import it.pn.frontend.e2e.listeners.NetWorkInfo;
import it.pn.frontend.e2e.model.singleton.NotificationSingleton;
import it.pn.frontend.e2e.rest.RestNotification;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.NoSuchElementException;
-import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.text.DateFormatSymbols;
import java.time.LocalDate;
@@ -22,12 +27,14 @@
import java.util.concurrent.TimeUnit;
import static org.openqa.selenium.support.ui.ExpectedConditions.elementToBeClickable;
-
+/*
+* Modifiche principali:
+Autowired NotificationSingleton e WebDriverConfig: Ho integrato i componenti tramite annotazione @Autowired per sfruttare la gestione delle dipendenze di Spring Boot, eliminando la necessità di istanziare manualmente queste classi.
+Component: Aggiunta dell’annotazione @Component per rendere la classe gestibile da Spring Boot.*/
+@Component
public class PiattaformaNotifichePage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("notificaMittentePagoPA");
- private final List netWorkInfos = Hooks.netWorkInfos;
- private final NotificationSingleton notificationSingleton = NotificationSingleton.getInstance();
@FindBy(id = "recipientId")
WebElement cfTextField;
@@ -104,7 +111,17 @@ public class PiattaformaNotifichePage extends BasePage {
@FindBy(id = "message")
WebElement erroreMessaggio;
-
+ @Autowired
+ private WebDriverConfig webDriverConfig;
+ @Autowired
+ private NotificationSingleton notificationSingleton;
+ @Autowired
+ private RestNotification restNotification;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+
+ @Autowired
public PiattaformaNotifichePage(WebDriver driver) {
super(driver);
}
@@ -112,12 +129,14 @@ public PiattaformaNotifichePage(WebDriver driver) {
public void waitLoadPiattaformaNotifichePAPage() {
try {
By notificheTitle = By.id("Notifiche-page");
- this.getWebDriverWait(10).withMessage("Il bottone invia notifica non visibile").until(ExpectedConditions.visibilityOf(this.inviaNuovaNotificaButton));
+ webTool.waitTime(10);
+ inviaNuovaNotificaButton = driver.findElement(By.id("new-notification-btn"));
+ this.getWebDriverWait(10).withMessage("Il bottone invia notifica non visibile").until(ExpectedConditions.visibilityOf(inviaNuovaNotificaButton));
this.getWebDriverWait(10).withMessage("Il titolo non è visibile").until(ExpectedConditions.visibilityOfElementLocated(notificheTitle));
logger.info("Piattaforma Notifiche Page caricata");
} catch (TimeoutException e) {
logger.error("Piattaforma Notifiche Page non caricata con errore : " + e.getMessage());
- Assert.fail("Piattaforma Notifiche Page non caricata con errore : " + e.getMessage());
+ Assertions.fail("Piattaforma Notifiche Page non caricata con errore : " + e.getMessage());
}
}
@@ -130,13 +149,13 @@ public void insertCodiceFiscale(String codiceFiscale) {
logger.info("Codice Fiscale inserito correttamente");
} catch (TimeoutException e) {
logger.error("Codice Fiscale Non inserito con errore: " + e.getMessage());
- Assert.fail("Codice Fiscale Non inserito con errore: " + e.getMessage());
+ Assertions.fail("Codice Fiscale Non inserito con errore: " + e.getMessage());
}
}
public void selectFiltraNotificaButtonMittente() {
- WebTool.waitTime(10);
+ webTool.waitTime(10);
filtraNotificaButtonMittente = driver.findElement(By.id("filter-button"));
getWebDriverWait(10).withMessage("Il bottone filtra non è cliccabile").until(elementToBeClickable(filtraNotificaButtonMittente));
filtraNotificaButtonMittente.click();
@@ -144,7 +163,7 @@ public void selectFiltraNotificaButtonMittente() {
}
public void selectFiltraNotificaButtonDestinatario() {
- WebTool.waitTime(10);
+ webTool.waitTime(10);
filtraNotificaButton = driver.findElement(By.id("filter-notifications-button"));
getWebDriverWait(10).withMessage("Il filtro non è cliccabile").until(elementToBeClickable(filtraNotificaButton));
filtraNotificaButton.click();
@@ -160,7 +179,7 @@ public int getListaCf(String cfInserito) {
return this.elements(cfListBy).size();
} catch (TimeoutException | NoSuchElementException e) {
logger.error("Codici fiscali non trovati " + e.getMessage());
- Assert.fail("Codici fiscali non trovati " + e.getMessage());
+ Assertions.fail("Codici fiscali non trovati " + e.getMessage());
return 0;
}
@@ -188,6 +207,9 @@ public boolean verificaEsistenzaEPassaggioPagina() {
}
public void inserimentoCodiceIUN(String codiceIUN) {
+
+ webTool.waitTime(5);
+ codiceIUNTextField = driver.findElement(By.id("iunMatch"));
getWebDriverWait(10).withMessage("Il campo per l'inserimento del codice IUN non è visibile").until(ExpectedConditions.visibilityOf(codiceIUNTextField));
codiceIUNTextField.click();
codiceIUNTextField.sendKeys(codiceIUN);
@@ -218,14 +240,12 @@ public boolean controlloDateInserite(String dataInerita) {
public void inserimentoArcoTemporale(String da, String a) {
- WebTool.waitTime(15);
getWebDriverWait(10).until(ExpectedConditions.visibilityOfAllElements(dataInizioField, dataFineField));
dataInizioField = getWebDriverWait(10).until(ExpectedConditions.elementToBeClickable(By.id("startDate")));
dataInizioField = getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='startDate']")));
- WebTool.waitTime(5);
-
+ webTool.waitTime(2);
String[] arraySplitDateDa = da.split("/");
List dataFieldList = driver.findElements(By.cssSelector(".MuiInputBase-input"));
@@ -247,7 +267,6 @@ public void inserimentoArcoTemporale(String da, String a) {
// Step 2: Click on the input field to open the calendar pop-up
//dataFieldList.get(0).click();
-
// Step 3: Wait for the calendar pop-up to appear
WebElement calendar = getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".MuiDateCalendar-root"))); // Adjust based on your app
@@ -271,9 +290,8 @@ public void inserimentoArcoTemporale(String da, String a) {
click++;
}
}
-
// Step 4: Select a date (e.g., the 15th day of the current month)
- WebTool.waitTime(3);
+ webTool.waitTime(2);
WebElement dateToSelect = calendar.findElement(By.xpath("//div[contains(@class, 'MuiDateCalendar-root')]//div[contains(@class,'MuiDayCalendar-monthContainer')]//*[text()='" + dayDa + "']"));
dateToSelect = getWebDriverWait(10).until(ExpectedConditions.elementToBeClickable(dateToSelect));
dateToSelect.click();
@@ -289,7 +307,7 @@ public void inserimentoArcoTemporale(String da, String a) {
int monthA = Integer.parseInt(arraySplitDateA[1]);
int yerarsA = Integer.parseInt(arraySplitDateA[2]);
- WebTool.waitTime(3);
+ webTool.waitTime(2);
// Step 2: Click on the input field to open the calendar pop-up
if (dataFieldList != null && dataFieldList.size() == 5) {
@@ -302,9 +320,10 @@ public void inserimentoArcoTemporale(String da, String a) {
// Step 3: Wait for the calendar pop-up to appear
WebElement calendar1 = getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".MuiDateCalendar-root"))); // Adjust based on your app
-
WebElement previousMonthAButton = driver.findElement(By.xpath("//div[contains(@class, 'MuiDateCalendar-root')]//button[@title='Previous month']"));
+ previousMonthAButton = getWebDriverWait(10).until(ExpectedConditions.elementToBeClickable(previousMonthAButton));
+
int clickA = 0;
WebElement monthAToSelect = null;
while (clickA < 36) {
@@ -319,7 +338,7 @@ public void inserimentoArcoTemporale(String da, String a) {
}
}
- WebTool.waitTime(3);
+ webTool.waitTime(2);
// Step 4: Select a date (e.g., the 15th day of the current month)
// Adjust based on your app
@@ -341,7 +360,7 @@ public boolean inserimentoArcoTemporaleErrato(String da, String a) {
dataInizioField = getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='startDate']")));
- WebTool.waitTime(5);
+ webTool.waitTime(5);
String[] arraySplitDateDa = da.split("/");
@@ -375,7 +394,7 @@ public boolean inserimentoArcoTemporaleErrato(String da, String a) {
}
// Step 4: Select a date (e.g., the 15th day of the current month)
- WebTool.waitTime(3);
+ webTool.waitTime(3);
WebElement dateToSelect = calendar.findElement(By.xpath("//div[contains(@class, 'MuiDateCalendar-root')]//div[contains(@class,'MuiDayCalendar-monthContainer')]//*[text()='" + dayDa + "']"));
dateToSelect = getWebDriverWait(10).until(ExpectedConditions.elementToBeClickable(dateToSelect));
dateToSelect.click();
@@ -392,7 +411,7 @@ public boolean inserimentoArcoTemporaleErrato(String da, String a) {
int monthA = Integer.parseInt(arraySplitDateA[1]);
int yerarsA = Integer.parseInt(arraySplitDateA[2]);
- WebTool.waitTime(3);
+ webTool.waitTime(3);
// Step 2: Click on the input field to open the calendar pop-up
dataFieldList.get(3).click();
@@ -415,7 +434,7 @@ public boolean inserimentoArcoTemporaleErrato(String da, String a) {
}
}
- WebTool.waitTime(3);
+ webTool.waitTime(3);
// Step 4: Select a date (e.g., the 15th day of the current month)
WebElement dateToSelect1 = calendar1.findElement(By.xpath("//div[contains(@class, 'MuiDateCalendar-root')]//div[contains(@class,'MuiDayCalendar-monthContainer')]//*[text()='" + dayA + "']"));
@@ -456,7 +475,7 @@ public void selezionareStatoNotifica(String statoInserito) {
logger.info("Stato notifica selezionato correttamente");
} catch (TimeoutException e) {
logger.error("Stato notifica NON trovata con errore: " + e.getMessage());
- Assert.fail("Stato notifica NON trovata con errore: " + e.getMessage());
+ Assertions.fail("Stato notifica NON trovata con errore: " + e.getMessage());
}
}
@@ -491,7 +510,7 @@ public void selezionaNotifica120Giorni() {
getWebDriverWait(3).withMessage("Il bottone filtra non è cliccabile").until(elementToBeClickable(pageSize50));
pageSize50.click();
- WebTool.waitTime(10);
+ webTool.waitTime(10);
notificaBy = By.id("notificationsTable.body.row");
List notifiche = this.elements(notificaBy);
@@ -500,7 +519,9 @@ public void selezionaNotifica120Giorni() {
int index = calendar.get(Calendar.HOUR_OF_DAY);
logger.info("index NOTIFICHE : " + index);
- if (notifiche!= null) {
+ logger.info("Scenario " + HooksNew.getScenario());
+
+ if (notifiche != null) {
logger.info("ELENCO NOTIFICHE : " + notifiche.size());
if (notifiche.size() >= index) {
logger.info("NOTIFICA SELEZIONATA: " + index);
@@ -508,15 +529,69 @@ public void selezionaNotifica120Giorni() {
} else {
notifiche.get(notifiche.size() - 1).click();
}
- }else {
+ } else {
logger.error("Non ci sono notifiche da selezionare nel arco temporale settato");
- Assert.fail("Non ci sono notifiche da selezionare nel arco temporale settato");
+ Assertions.fail("Non ci sono notifiche da selezionare nel arco temporale settato");
}
// List notifiche = this.elements(notificaBy);
// notifiche.get(0).click();
} catch (TimeoutException e) {
logger.error("Notifica non trovata con errore: " + e.getMessage());
- Assert.fail("Notifica non trovata con errore: " + e.getMessage());
+ Assertions.fail("Notifica non trovata con errore: " + e.getMessage());
+ }
+ }
+
+
+ public void selezionaNotifica120Giorni(int rows) {
+ waitLoadPage();
+ try {
+ By notificaBy = By.id("notificationsTable.body.row");
+ attesaCaricamentoPagina();
+ getWebDriverWait(30).withMessage("La tabella delle notifiche non è caricata correttamente").until(elementToBeClickable(notificaBy));
+
+ WebElement buttonRighePagine = driver.findElement(By.id("rows-per-page"));
+ getWebDriverWait(10).withMessage("Il bottone filtra non è cliccabile").until(elementToBeClickable(buttonRighePagine));
+ buttonRighePagine.click();
+ WebElement pageSize50 = driver.findElement(By.id("pageSize-50"));
+ getWebDriverWait(3).withMessage("Il bottone filtra non è cliccabile").until(elementToBeClickable(pageSize50));
+ pageSize50.click();
+
+ webTool.waitTime(10);
+ notificaBy = By.id("notificationsTable.body.row");
+ List notifiche = this.elements(notificaBy);
+
+ logger.info("Scenario " + HooksNew.getScenario());
+
+ Calendar calendar = GregorianCalendar.getInstance();
+ int index = calendar.get(Calendar.HOUR_OF_DAY) + rows;
+ logger.info("HOUR..." + index);
+ logger.info("SIZE ROWS TABLE..." + notifiche.size());
+ logger.info("ROWS TABLE..." + rows);
+ logger.info("ROWS SELEZIONATA: " + index);
+ WebElement riga = null;
+ if (notifiche != null) {
+ if (notifiche.size() >= index) {
+ logger.info("ROWS SELEZIONATA1: " + index);
+ notifiche.get(index).click();
+ } else {
+ logger.info("ROWS SELEZIONATA2: " + rows);
+ if ((rows + 1) < notifiche.size()) {
+ logger.info("ROWS SELEZIONATA3: " + (notifiche.size() - (rows + 1)));
+ notifiche.get(notifiche.size() - (rows + 1)).click();
+ ;
+ } else {
+ logger.info("ROWS SELEZIONATA4: " + (notifiche.size() - 1));
+ notifiche.get(notifiche.size() - 1).click();
+ ;
+ }
+ }
+ } else {
+ logger.error("Non ci sono notifiche da selezionare nel arco temporale settato");
+ Assertions.fail("Non ci sono notifiche da selezionare nel arco temporale settato");
+ }
+ } catch (TimeoutException e) {
+ logger.error("Notifica non trovata con errore: " + e.getMessage());
+ Assertions.fail("Notifica non trovata con errore: " + e.getMessage());
}
}
@@ -534,19 +609,19 @@ public void selezionaPrimaNotifica() {
getWebDriverWait(3).withMessage("Il bottone filtra non è cliccabile").until(elementToBeClickable(pageSize50));
pageSize50.click();
- WebTool.waitTime(10);
+ webTool.waitTime(10);
notificaBy = By.id("notificationsTable.body.row");
List notifiche = this.elements(notificaBy);
notifiche.get(0).click();
} catch (TimeoutException e) {
logger.error("Notifica non trovata con errore: " + e.getMessage());
- Assert.fail("Notifica non trovata con errore: " + e.getMessage());
+ Assertions.fail("Notifica non trovata con errore: " + e.getMessage());
}
}
public void selezionaNotificaIUN(String IUN) {
- String variabileAmbiente = System.getProperty("environment");
+ String variabileAmbiente = webDriverConfig.getEnvironment();
driver.navigate().to("https://selfcare." + variabileAmbiente + ".notifichedigitali.it/dashboard/" + IUN + "/dettaglio");
}
@@ -557,7 +632,7 @@ public void selectInviaUnaNuovaNotificaButton() {
public void waitLoadRefreshPage() {
- WebTool.waitTime(5);
+ webTool.waitTime(5);
}
public String ricercaNotifica(String oggettoDellaNotifica, String statoNotifica) {
@@ -639,14 +714,14 @@ public int controlloNumeroRisultatiDate() {
public void inserimentoData(String dataInserita) {
getWebDriverWait(10).withMessage("il campo data non è visibile nella pagina").until(ExpectedConditions.visibilityOf(this.dataInizioField));
- WebTool.waitTime(15);
+ webTool.waitTime(15);
getWebDriverWait(10).until(ExpectedConditions.visibilityOfAllElements(dataInizioField, dataFineField));
dataInizioField = getWebDriverWait(10).until(ExpectedConditions.elementToBeClickable(By.id("startDate")));
dataInizioField = getWebDriverWait(10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='startDate']")));
- WebTool.waitTime(10);
+ webTool.waitTime(10);
String[] arraySplitDateDa = dataInserita.split("/");
@@ -684,7 +759,7 @@ public void siVisualizzaCorrettamenteIlCFField() {
logger.info("Il campo di codice fiscale si visualizza correttamente");
} catch (TimeoutException e) {
logger.error("Il campo di codice fiscale NON si visualizza correttamente con errore : " + e.getMessage());
- Assert.fail("Il campo di codice fiscale NON si visualizza correttamente : " + e.getMessage());
+ Assertions.fail("Il campo di codice fiscale NON si visualizza correttamente : " + e.getMessage());
}
}
@@ -695,7 +770,7 @@ public void siVisualizzaCorrettamenteIlCodiceIUNField() {
logger.info("Il campo di codice iun si visualizza correttamente");
} catch (TimeoutException e) {
logger.error("Il campo di codice iun NON si visualizza correttamente con errore : " + e.getMessage());
- Assert.fail("Il campo di codice iun NON si visualizza correttamente : " + e.getMessage());
+ Assertions.fail("Il campo di codice iun NON si visualizza correttamente : " + e.getMessage());
}
}
@@ -706,7 +781,7 @@ public void siVisualizzaCorrettamenteLoStatoField() {
logger.info("Il campo dello stato si visualizza correttamente");
} catch (TimeoutException e) {
logger.error("Il campo dello stato NON si visualizza correttamente con errore : " + e.getMessage());
- Assert.fail("Il campo dello stato NON si visualizza correttamente : " + e.getMessage());
+ Assertions.fail("Il campo dello stato NON si visualizza correttamente : " + e.getMessage());
}
}
@@ -717,7 +792,7 @@ public void siVisualizzaCorrettamenteLaDataInzioField() {
logger.info("Il campo della data di inizio si visualizza correttamente");
} catch (TimeoutException e) {
logger.error("Il campo della data di inizio NON si visualizza correttamente con errore : " + e.getMessage());
- Assert.fail("Il campo della data di inizio NON si visualizza correttamente : " + e.getMessage());
+ Assertions.fail("Il campo della data di inizio NON si visualizza correttamente : " + e.getMessage());
}
}
@@ -728,7 +803,7 @@ public void siVisualizzaCorrettamenteLaDataFineField() {
logger.info("Il campo della data di fine si visualizza correttamente");
} catch (TimeoutException e) {
logger.error("Il campo della data di fine NON si visualizza correttamente con errore : " + e.getMessage());
- Assert.fail("Il campo della data di fine NON si visualizza correttamente : " + e.getMessage());
+ Assertions.fail("Il campo della data di fine NON si visualizza correttamente : " + e.getMessage());
}
}
@@ -794,7 +869,7 @@ public void controlloOrdineNotifiche() {
}
if (dataSuccessiva.isBefore(dataPrecedente)) {
logger.error("Le date non sono ordinate dal più recente");
- Assert.fail("Le date non sono ordinate dal più recente");
+ Assertions.fail("Le date non sono ordinate dal più recente");
return;
}
}
@@ -813,7 +888,7 @@ private List getListaDate() {
} catch (TimeoutException e) {
logger.error("Date NON trovate con errore: " + e.getMessage());
- Assert.fail("Date NON trovate con errore: " + e.getMessage());
+ Assertions.fail("Date NON trovate con errore: " + e.getMessage());
return null;
}
}
@@ -836,7 +911,7 @@ public void siCambiaPaginaUtilizzandoUnaFrecetta(Integer numPage) {
while (index <= numPage) {
frecciaPaginaSuccessiva.click();
index++;
- WebTool.waitTime(2);
+ webTool.waitTime(2);
}
}
@@ -848,7 +923,7 @@ public void selezionaUltimaPaginaUtilizzandoUnaFrecetta() {
}
while (frecciaPaginaSuccessiva.isEnabled()) {
frecciaPaginaSuccessiva.click();
- WebTool.waitTime(2);
+ webTool.waitTime(2);
}
}
@@ -864,12 +939,12 @@ public void siCambiaIlNumeroElementiVisualizzatiAttraversoIlFiltro() {
.withMessage("Il pulsante 'righe per pagina' non è presente")
.until(ExpectedConditions.visibilityOf(this.numeroNotificheButton));
vaiInFondoAllaPagina();
- WebTool.waitTime(1);
+ webTool.waitTime(1);
this.numeroNotificheButton.click();
this.getWebDriverWait(10)
.withMessage("Il pulsante '50' per assegnare il numero di notifiche per pagina non è presente")
.until(ExpectedConditions.visibilityOf(this.numberElement));
- WebTool.waitTime(1);
+ webTool.waitTime(1);
this.numberElement.click();
}
@@ -898,7 +973,7 @@ public void vuoiUscirePopUp() {
logger.info("Si visualizza il pop up vuoi uscire");
} catch (TimeoutException e) {
logger.error("Non si visualizza il pop up vuoi uscire con errore:" + e.getMessage());
- Assert.fail("Non si visualizza il pop up vuoi uscire con errore:" + e.getMessage());
+ Assertions.fail("Non si visualizza il pop up vuoi uscire con errore:" + e.getMessage());
}
}
@@ -993,7 +1068,7 @@ public void checkDefaultPagination() {
logger.info("numero di default delle notifiche visualizzate corretto");
} else {
logger.error("numero di default delle notifiche visualizzate non corretto");
- Assert.fail("numero di default delle notifiche visualizzate non corretto");
+ Assertions.fail("numero di default delle notifiche visualizzate non corretto");
}
}
@@ -1028,7 +1103,7 @@ public boolean controlloEsistenzaStato() {
return true;
} catch (TimeoutException e) {
logger.error("Stato notifica NON trovata con errore: " + e.getMessage());
- Assert.fail("Stato notifica NON trovata con errore: " + e.getMessage());
+ Assertions.fail("Stato notifica NON trovata con errore: " + e.getMessage());
return false;
} finally {
this.element(By.id("menu-status")).click();
@@ -1057,13 +1132,13 @@ public void checkPaginaNotificheDelegante(String nomeDelegante) {
logger.info("Pagina notifiche delegante caricata correttamente");
} catch (TimeoutException e) {
logger.error("Pagina notifiche delegante non caricata con errore: " + e.getMessage());
- Assert.fail("Pagina notifiche delegante non caricata con errore: " + e.getMessage());
+ Assertions.fail("Pagina notifiche delegante non caricata con errore: " + e.getMessage());
}
}
public void verificaPresenzaStato(String stato) {
- WebTool.waitTime(10);
+ webTool.waitTime(10);
By statusChip = By.xpath("//div[@data-testid='itemStatus']//span[contains(text(),'" + stato + "')]");
getWebDriverWait(10).withMessage("Lo stato " + stato + " non è presente")
.until(ExpectedConditions.visibilityOfElementLocated(statusChip));
@@ -1071,9 +1146,8 @@ public void verificaPresenzaStato(String stato) {
}
public void verificaNotificaCreata() {
- RestNotification restNotification = new RestNotification();
String notificationRequestId = "";
- for (NetWorkInfo netWorkInfo : netWorkInfos) {
+ for (NetWorkInfo netWorkInfo : webDriverConfig.getNetWorkInfos()) {
if (netWorkInfo.getRequestUrl().contains("bff/v1/notifications/sent") && netWorkInfo.getRequestMethod().equals("POST")) {
if (netWorkInfo.getResponseStatus().equals("202") && !netWorkInfo.getResponseBody().isEmpty()) {
notificationRequestId = netWorkInfo.getResponseBody().split("\"notificationRequestId\":\"")[1].split("\"")[0];
@@ -1082,21 +1156,21 @@ public void verificaNotificaCreata() {
}
}
}
- Assert.assertFalse("NotificationRequestId non trovato, il codice della risposta al url bff/v1/notifications/sent è diverso di 202 ", notificationRequestId.isEmpty());
+ Assertions.assertFalse(notificationRequestId.isEmpty(), "NotificationRequestId non trovato, il codice della risposta al url bff/v1/notifications/sent è diverso di 202 ");
LinkedTreeMap notificationData;
String notificationStatus;
String notificationIUN;
int maximumRetry = 0;
do {
- Assert.assertTrue("La notifica risulta ancora in stato WAITING dopo 5 tentativi", maximumRetry <= 5);
+ Assertions.assertTrue(maximumRetry <= 5, "La notifica risulta ancora in stato WAITING dopo 5 tentativi");
notificationData = restNotification.getNotificationStatus(notificationRequestId);
notificationStatus = notificationData.get("notificationRequestStatus").toString();
if (notificationStatus.equals("ACCEPTED")) {
notificationIUN = notificationData.get("iun").toString();
- notificationSingleton.setScenarioIun(Hooks.getScenario(), notificationIUN);
+ notificationSingleton.setScenarioIun(HooksNew.getScenario(), notificationIUN);
return;
} else {
- WebTool.waitTime(90);
+ webTool.waitTime(90);
logger.info("Tentativo n.{} - Stato notifica: {}", maximumRetry, notificationStatus);
maximumRetry++;
}
@@ -1107,10 +1181,10 @@ public void verificaNotificaCreata() {
public void clickSuNotifica() {
- String iun = notificationSingleton.getIun(Hooks.scenario);
+ String iun = notificationSingleton.getIun(HooksNew.scenario);
logger.info("iun notifica {}", iun);
//By notification = By.xpath("//table[@id='notifications-table']//tr[.//button[contains(text(),'" + iun + "')]]");
- WebTool.waitTime(10);
+ webTool.waitTime(10);
WebElement notification = driver.findElement(By.xpath("//table[@id='notifications-table']//tr[.//button[contains(text(),'" + iun + "')]]"));
getWebDriverWait(30).withMessage("notifica non esistente").until(ExpectedConditions.visibilityOf(notification));
notification.click();
@@ -1118,7 +1192,7 @@ public void clickSuNotifica() {
public void checkStatoNotifica(String stato) {
driver.navigate().refresh();
- WebTool.waitTime(10);
+ webTool.waitTime(10);
WebElement notificationLine = notificationsTableLines.get(0);
WebElement chipStatus = notificationLine.findElement(By.id("status-chip-" + stato));
getWebDriverWait(10).withMessage("La notifica non ha lo stato " + stato).until(ExpectedConditions.visibilityOf(chipStatus));
@@ -1138,12 +1212,12 @@ public void selezionaNotificaConStato(String statoNotifica) {
} catch (NoSuchElementException e) {
logger.info("Dopo " + i + " tentativi la notifica non è ancora passata allo stato: " + statoNotifica);
}
- WebTool.waitTime(15);
+ webTool.waitTime(15);
driver.navigate().refresh();
}
if (!testSuccess) {
logger.error("La notifica non è passata allo stato " + statoNotifica);
- Assert.fail("La notifica non è passata allo stato " + statoNotifica);
+ Assertions.fail("La notifica non è passata allo stato " + statoNotifica);
}
}
@@ -1161,12 +1235,12 @@ public void pollingSuStatoNotificaPerCompletamento(String statoNotifica) {
} catch (NoSuchElementException e) {
logger.info("Dopo " + i + " tentativi la notifica non è ancora passata allo stato: " + statoNotifica);
}
- WebTool.waitTime(15);
+ webTool.waitTime(15);
driver.navigate().refresh();
}
if (!testSuccess) {
logger.error("La notifica non è passata allo stato " + statoNotifica);
- Assert.fail("La notifica non è passata allo stato " + statoNotifica);
+ Assertions.fail("La notifica non è passata allo stato " + statoNotifica);
}
}
@@ -1200,7 +1274,7 @@ public void clickBottoneAnnullaNotifica() {
public void visualizzaTimelineTuttiDestinatari(Map destinatari) {
logger.info("Si clicca vedi piu dettagli");
- WebTool.waitTime(10);
+ webTool.waitTime(10);
List viewMore = driver.findElements(By.xpath("//*[@id='more-less-timeline-step']"));
//Equals() method utilizzato per String. Per confrontare int variabile dobbiamo usare ==
String size = Integer.toString(viewMore.size());
@@ -1217,14 +1291,14 @@ public void visualizzaTimelineTuttiDestinatari(Map destinatari)
logger.info("Si visualizza gli eventi relativi a tutti i destinatari");
} else {
logger.error("Non si visualizza gli eventi relativi a tutti i destinatari");
- Assert.fail("Non si visualizza gli eventi relativi a tutti i destinatari");
+ Assertions.fail("Non si visualizza gli eventi relativi a tutti i destinatari");
}
logger.info("Si visualizza correttamente la timeline relativi a tutti i destinatari");
}
public void visualizzaTimeline(String check) {
- WebTool.waitTime(10);
+ webTool.waitTime(10);
List viewMore = driver.findElements(By.xpath("//*[@id='more-less-timeline-step']"));
viewMore.get(0).click();
String size = Integer.toString(viewMore.size());
@@ -1238,19 +1312,19 @@ public void visualizzaTimeline(String check) {
logger.info("Si visualizza la timeline correttamente");
} else {
logger.error("Non si visualizza la timeline correttamente");
- Assert.fail("Non si visualizza la timeline correttamente");
+ Assertions.fail("Non si visualizza la timeline correttamente");
}
}
public void verificaTentativoSuccessivo(String check) {
List findKeyWord = driver.findElements(By.xpath("//span[contains(text(),'" + check + "')]"));
logger.info("//span[contains(text(),'" + check + "')]");
- logger.info("findkey "+findKeyWord.size());
+ logger.info("findkey " + findKeyWord.size());
if (findKeyWord.get(0).isDisplayed()) {
logger.info("Si visualizza la timeline correttamente");
} else {
logger.error("Non si visualizza la timeline correttamente");
- Assert.fail("Non si visualizza la timeline correttamente");
+ Assertions.fail("Non si visualizza la timeline correttamente");
}
}
@@ -1262,16 +1336,16 @@ public void verificaDestinatariNonRaggiungibili(Map destinatari)
if (size.equals("2")) {
viewMore.get(1).click();
}
- WebTool.waitTime(2);
+ webTool.waitTime(2);
WebElement destPF = driver.findElement(By.xpath("//p[contains(text(),'" + destinatari.get("PF") + " è fallito')]"));
- WebTool.waitTime(2);
+ webTool.waitTime(2);
WebElement destPG = driver.findElement(By.xpath("//p[contains(text(),'" + destinatari.get("PG") + " è fallito')]"));
if (destPG.isDisplayed() && destPF.isDisplayed()) {
logger.info("Entrambi destinatari non raggiungibili al primo tentativo");
} else {
logger.error("Uno dei destinatari viene raggiunto al primo tentativo");
- Assert.fail("Uno dei destinatari viene raggiunto al primo tentativo");
+ Assertions.fail("Uno dei destinatari viene raggiunto al primo tentativo");
}
}
@@ -1285,7 +1359,7 @@ public void checkAllegatoScaricabile(String descrizioneAllegato) {
By linkAllegato = By.xpath("//button[contains(., '" + descrizioneAllegato + "') and @id='document-button']");
getWebDriverWait(10).withMessage("Non esiste il bottone per il download degli allegati, si procede con il test").until(ExpectedConditions.visibilityOfElementLocated(linkAllegato));
logger.error("Non è corretto che il bottone per il download dell'allegato sia visibile");
- Assert.fail("Non è corretto che il bottone per il download dell'allegato sia visibile");
+ Assertions.fail("Non è corretto che il bottone per il download dell'allegato sia visibile");
} catch (TimeoutException e) {
logger.info("Non è visibile il bottone per il download dell'allegato: " + e.getMessage());
}
@@ -1333,15 +1407,15 @@ public void clickNotificaRicercata() {
element(notitifcaRicercata).click();
} catch (TimeoutException e) {
logger.error("Non si riesce a cliccare la notifica ricercata con errore: " + e.getMessage());
- Assert.fail("Non si riesce a cliccare la notifica ricercata con errore: " + e.getMessage());
+ Assertions.fail("Non si riesce a cliccare la notifica ricercata con errore: " + e.getMessage());
} catch (InterruptedException e) {
logger.error("Attesa per rendere cliccabile la notifica interrota con errore: " + e.getMessage());
- Assert.fail("Attesa per rendere cliccabile la notifica interrota con errore: " + e.getMessage());
+ Assertions.fail("Attesa per rendere cliccabile la notifica interrota con errore: " + e.getMessage());
}
}
public void checkMessaggioErroreConCodice(int code) {
- WebTool.waitTime(3);
+ webTool.waitTime(3);
erroreMessaggio = driver.findElement(By.id("message"));
switch (code) {
case 19 -> {
@@ -1349,7 +1423,7 @@ public void checkMessaggioErroreConCodice(int code) {
logger.info("Si visualizza correttamente il messaggio di errore");
} else {
logger.error("Non si visualizza il messaggio di errore");
- Assert.fail("Non si visualizza il messaggio di errore");
+ Assertions.fail("Non si visualizza il messaggio di errore");
}
}
case 20 -> {
@@ -1357,7 +1431,7 @@ public void checkMessaggioErroreConCodice(int code) {
logger.info("Si visualizza correttamente il messaggio di errore");
} else {
logger.error("Non si visualizza il messaggio di errore");
- Assert.fail("Non si visualizza il messaggio di errore");
+ Assertions.fail("Non si visualizza il messaggio di errore");
}
}
case 21 -> {
@@ -1365,7 +1439,7 @@ public void checkMessaggioErroreConCodice(int code) {
logger.info("Si visualizza correttamente il messaggio di errore");
} else {
logger.error("Non si visualizza il messaggio di errore");
- Assert.fail("Non si visualizza il messaggio di errore");
+ Assertions.fail("Non si visualizza il messaggio di errore");
}
}
case 22 -> {
@@ -1373,7 +1447,7 @@ public void checkMessaggioErroreConCodice(int code) {
logger.info("Si visualizza correttamente il messaggio di errore");
} else {
logger.error("Non si visualizza il messaggio di errore");
- Assert.fail("Non si visualizza il messaggio di errore");
+ Assertions.fail("Non si visualizza il messaggio di errore");
}
}
case 23 -> {
@@ -1381,7 +1455,7 @@ public void checkMessaggioErroreConCodice(int code) {
logger.info("Si visualizza correttamente il messaggio di errore");
} else {
logger.error("Non si visualizza il messaggio di errore");
- Assert.fail("Non si visualizza il messaggio di errore");
+ Assertions.fail("Non si visualizza il messaggio di errore");
}
}
case 25 -> {
@@ -1389,7 +1463,7 @@ public void checkMessaggioErroreConCodice(int code) {
logger.info("Si visualizza correttamente il messaggio di errore");
} else {
logger.error("Non si visualizza il messaggio di errore");
- Assert.fail("Non si visualizza il messaggio di errore");
+ Assertions.fail("Non si visualizza il messaggio di errore");
}
}
case 30 -> {
@@ -1397,7 +1471,7 @@ public void checkMessaggioErroreConCodice(int code) {
logger.info("Si visualizza correttamente il messaggio di errore");
} else {
logger.error("Non si visualizza il messaggio di errore");
- Assert.fail("Non si visualizza il messaggio di errore");
+ Assertions.fail("Non si visualizza il messaggio di errore");
}
}
case 1001 -> {
@@ -1405,7 +1479,7 @@ public void checkMessaggioErroreConCodice(int code) {
logger.info("Si visualizza correttamente il messaggio di errore");
} else {
logger.error("Non si visualizza il messaggio di errore");
- Assert.fail("Non si visualizza il messaggio di errore");
+ Assertions.fail("Non si visualizza il messaggio di errore");
}
}
}
@@ -1424,7 +1498,7 @@ public void checkClickDownloadRicevutePEC() {
}
public void verificaMittente(String ente) {
- WebTool.waitTime(2);
+ webTool.waitTime(2);
By mittente = By.id("row-value-1");
getWebDriverWait(10).withMessage("Mittente non trovato").until(ExpectedConditions.and(
ExpectedConditions.visibilityOfElementLocated(mittente),
@@ -1438,6 +1512,6 @@ public void checkBottoneAnnullaNotifica() {
} catch (NoSuchElementException e) {
isDisplayed = false; // Elemento non trovato
}
- Assert.assertFalse("Il bottone è visualizzabile", isDisplayed);
+ Assertions.assertFalse(isDisplayed, "Il bottone è visualizzabile");
}
}
\ No newline at end of file
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/PreAccediAreaRiservataPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/PreAccediAreaRiservataPAPage.java
index 9f8b32a2a..b2aa45329 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/PreAccediAreaRiservataPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/PreAccediAreaRiservataPAPage.java
@@ -2,13 +2,16 @@
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class PreAccediAreaRiservataPAPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("PreAccediAreaRiservataPAPage");
@@ -16,6 +19,7 @@ public class PreAccediAreaRiservataPAPage extends BasePage {
@FindBy(id = "login-button")
WebElement procediAlLoginButton;
+ @Autowired
public PreAccediAreaRiservataPAPage(WebDriver driver) {
super(driver);
}
@@ -27,7 +31,7 @@ public void waitLoadPreAccediAreaRiservataPAPage(){
logger.info("Il titolo della Pre Accedi Area Riservata PA Page è caricato");
}catch (TimeoutException e){
logger.error("Il titolo della Pre Accedi Area Riservata PA Page non caricato con errore : "+e.getMessage());
- Assert.fail("Il titolo della Pre Accedi Area Riservata PA Page non caricato con errore : "+e.getMessage());
+ Assertions.fail("Il titolo della Pre Accedi Area Riservata PA Page non caricato con errore : "+e.getMessage());
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/ScegliSpidPAPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/ScegliSpidPAPage.java
index 3014a6be3..0f09515f9 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/ScegliSpidPAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/ScegliSpidPAPage.java
@@ -1,7 +1,7 @@
package it.pn.frontend.e2e.pages.mittente;
import it.pn.frontend.e2e.common.BasePage;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
@@ -10,7 +10,15 @@
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+/*
+*Modifiche e Spiegazioni
+Annotazione @Component: Marca la classe come un componente gestito da Spring, permettendo l’iniezione nei contesti necessari.
+Costruttore con @Autowired: Permette a Spring di iniettare automaticamente WebDriver.
+Logging migliorato: Utilizza il logger.error con {} per un’output più leggibile e facile da mantenere.
+* */
+@Component
public class ScegliSpidPAPage extends BasePage {
private static final Logger logger = LoggerFactory.getLogger("ScegliSpidPAPage");
@@ -18,33 +26,34 @@ public class ScegliSpidPAPage extends BasePage {
@FindBy(id = "xx_testenv2")
WebElement testButton;
+ @Autowired
public ScegliSpidPAPage(WebDriver driver) {
super(driver);
}
- public void waitLoadScegliSpidPAPage(){
- try{
+ public void waitLoadScegliSpidPAPage() {
+ try {
By titlePage = By.cssSelector("div.MuiTypography-root.MuiTypography-h4");
- this.getWebDriverWait(30).until(ExpectedConditions.visibilityOfElementLocated(titlePage));
- logger.info("il titolo Scegli Spid PA Page caricata");
- }catch (TimeoutException e){
- logger.error("Titlo della pagina Scegli Spid PA Page non caricato con errore : "+e.getMessage());
- Assert.fail("Titlo della pagina Scegli Spid PA Page non caricato con errore : "+e.getMessage());
- }catch(Exception e){
- logger.error("Scelta spid provider errore generico : "+e.getMessage());
- Assert.fail("Scelta spid provider errore generico : "+e.getMessage());
+ getWebDriverWait(30).until(ExpectedConditions.visibilityOfElementLocated(titlePage));
+ logger.info("Il titolo della pagina Scegli Spid PA è stato caricato");
+ } catch (TimeoutException e) {
+ logger.error("Il titolo della pagina Scegli Spid PA non è stato caricato con errore: {}", e.getMessage());
+ Assertions.fail("Il titolo della pagina Scegli Spid PA non è stato caricato con errore: " + e.getMessage());
+ } catch (Exception e) {
+ logger.error("Errore generico durante la scelta del provider SPID: {}", e.getMessage());
+ Assertions.fail("Errore generico durante la scelta del provider SPID: " + e.getMessage());
}
}
- public void selezionareTestButton(){
- logger.info("Si clicca sul bottone Test dello spid");
- try{
+ public void selezionareTestButton() {
+ logger.info("Si clicca sul bottone Test dello SPID");
+ try {
getWebDriverWait(60).until(ExpectedConditions.elementToBeClickable(this.testButton));
this.testButton.click();
- logger.info("click sul bottone TEST effetuato");
- }catch (TimeoutException e){
- logger.error("il bottone TEST non è cliccabile con errore : "+e.getMessage());
- Assert.fail("il bottone TEST non è cliccabile con errore : "+e.getMessage());
+ logger.info("Click sul bottone TEST effettuato con successo");
+ } catch (TimeoutException e) {
+ logger.error("Il bottone TEST non è cliccabile, errore: {}", e.getMessage());
+ Assertions.fail("Il bottone TEST non è cliccabile, errore: " + e.getMessage());
}
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/it/pn/frontend/e2e/pages/mittente/SelezionaEntePAPage.java b/src/main/java/it/pn/frontend/e2e/pages/mittente/SelezionaEntePAPage.java
index aa74897f3..666f6a042 100644
--- a/src/main/java/it/pn/frontend/e2e/pages/mittente/SelezionaEntePAPage.java
+++ b/src/main/java/it/pn/frontend/e2e/pages/mittente/SelezionaEntePAPage.java
@@ -2,70 +2,96 @@
import it.pn.frontend.e2e.common.BasePage;
import it.pn.frontend.e2e.utility.WebTool;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.util.List;
-
+/*
+*Modifiche e Ottimizzazioni
+Annotazione @Component: Integrazione della classe in Spring Boot per il dependency injection.
+Miglioramento Logging: Utilizzo di placeholder ({}) in logger per gestire i messaggi in modo più efficiente.
+Stream API in selezionareComune: Sostituisce il ciclo for con uno stream, semplificando il controllo della presenza e selezione del comune.
+Verifica .ifPresentOrElse: Aggiunta di un messaggio di log per i casi in cui il comune non viene trovato.
+Refactoring per Gestione delle Eccezioni: La gestione delle eccezioni è mantenuta invariata per chiarezza e robustezza del codice.
+*
+*
+* */
+@Component
public class SelezionaEntePAPage extends BasePage {
- private static final Logger logger = LoggerFactory.getLogger("SelezionaEntePAPage");
+ private static final Logger logger = LoggerFactory.getLogger(SelezionaEntePAPage.class);
@FindBy(xpath = "//div[@role='button']//h6")
- List comuneButton;
+ private List comuneButton;
@FindBy(xpath = "//button[text()='Accedi']")
- WebElement accediButton;
+ private WebElement accediButton;
@FindBy(id = "search")
- WebElement comuneSearchField;
+ private WebElement comuneSearchField;
+ @Autowired
+ @Lazy
+ private WebTool webTool;
+ @Autowired
public SelezionaEntePAPage(WebDriver driver) {
super(driver);
}
public void waitLoadSelezionaEntePAPage() {
try {
- WebTool.waitTime(15);
+ webTool.waitTime(20);
WebElement titlePage = driver.findElement(By.xpath("//h3[text()='Seleziona il tuo ente']"));
- WebElement searchField = driver.findElement(By.id("search"));
- this.getWebDriverWait(30).withMessage("Titolo 'Seleziona il tuo ente' della pagina non è visualizza").until(ExpectedConditions.visibilityOf(titlePage));
- this.getWebDriverWait(30).withMessage("Il campo cerca non è cliccabile nella pagina Seleziona Ente: ").until(ExpectedConditions.elementToBeClickable(searchField));
+ WebElement searchField = driver.findElement(By.id("search"));
+ getWebDriverWait(30)
+ .withMessage("Titolo 'Seleziona il tuo ente' della pagina non è visibile")
+ .until(ExpectedConditions.visibilityOf(titlePage));
+ getWebDriverWait(30)
+ .withMessage("Il campo cerca non è cliccabile nella pagina Seleziona Ente")
+ .until(ExpectedConditions.elementToBeClickable(searchField));
logger.info("Seleziona Utente PA Page caricata");
} catch (TimeoutException | NoSuchElementException | StaleElementReferenceException e) {
- logger.error("Seleziona Utente PA Page non caricata con errore : " + e.getMessage());
- Assert.fail("Seleziona Utente PA Page non caricata con errore : " + e.getMessage());
+ logger.error("Seleziona Utente PA Page non caricata con errore: {}", e.getMessage());
+ Assertions.fail("Seleziona Utente PA Page non caricata con errore: " + e.getMessage());
}
}
-
public void selezionareComune(String comune) {
- for (WebElement element : this.comuneButton) {
- if (element.getText().contains(comune)) {
- getWebDriverWait(30).withMessage("L'Ente " + comune + " non è cliccabile nella pagina seleziona Ente ")
- .until(ExpectedConditions.elementToBeClickable(element));
- this.js().executeScript("arguments[0].click()", element);
- break;
- }
- }
+ comuneButton.stream()
+ .filter(element -> element.getText().contains(comune))
+ .findFirst()
+ .ifPresentOrElse(
+ element -> {
+ getWebDriverWait(30)
+ .withMessage("L'Ente " + comune + " non è cliccabile nella pagina seleziona Ente")
+ .until(ExpectedConditions.elementToBeClickable(element));
+ js().executeScript("arguments[0].click()", element);
+ },
+ () -> logger.warn("Ente '{}' non trovato tra i comuni disponibili", comune)
+ );
}
public void selezionaAccedi() {
Actions actions = new Actions(driver);
- getWebDriverWait(60).withMessage("il buttone Eccedi non è cliccabile")
- .until(ExpectedConditions.elementToBeClickable(this.accediButton));
- actions.moveToElement(this.accediButton).click().perform();
+ accediButton = driver.findElement(By.xpath("//button[text()='Accedi']"));
+ getWebDriverWait(60).withMessage("il buttone Accedi non è cliccabile")
+ .until(ExpectedConditions.elementToBeClickable(accediButton));
+ actions.moveToElement(accediButton).click().perform();
}
public void cercaComune(String comune) {
- this.getWebDriverWait(30).withMessage("Il campo Comune non è visibile nella pagina seleziona un Ente")
- .until(ExpectedConditions.visibilityOf(this.comuneSearchField));
- this.comuneSearchField.sendKeys(comune);
+ getWebDriverWait(30)
+ .withMessage("Il campo Comune non è visibile nella pagina seleziona un Ente")
+ .until(ExpectedConditions.visibilityOf(comuneSearchField));
+ comuneSearchField.sendKeys(comune);
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/rest/RestContact.java b/src/main/java/it/pn/frontend/e2e/rest/RestContact.java
index fe05a160e..1405f8f49 100644
--- a/src/main/java/it/pn/frontend/e2e/rest/RestContact.java
+++ b/src/main/java/it/pn/frontend/e2e/rest/RestContact.java
@@ -1,36 +1,52 @@
package it.pn.frontend.e2e.rest;
import it.pn.frontend.e2e.config.CustomHttpClient;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import it.pn.frontend.e2e.exceptions.RestContactException;
import it.pn.frontend.e2e.exceptions.RestDelegationException;
import it.pn.frontend.e2e.model.address.DigitalAddress;
import it.pn.frontend.e2e.model.address.DigitalAddressResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
+/*
+*Modifiche principali:
+Annotazioni @Autowired: Utilizzate per il caricamento automatico delle dipendenze CustomHttpClient e WebDriverConfig.
+Costruttore per WebDriverConfig: La configurazione viene caricata tramite costruttore, impostando l’Authorization token per semplificare la gestione delle intestazioni.
+Miglioramento gestione eccezioni: Le eccezioni sono lanciate per indicare fallimenti specifici nei metodi di gestione dei contatti digitali, come RestContactException e RestDelegationException, con log dettagliati.
+Ottimizzazione dei metodi HTTP: I metodi HTTP GET e DELETE sono organizzati per fornire un output chiaro e gestibile, inclusi i log delle risposte.
+* */
+@Component
public class RestContact {
- private static final Logger logger = LoggerFactory.getLogger("RestContact");
- final CustomHttpClient, String> httpClient = CustomHttpClient.getInstance();
- private static RestContact instance;
- final private String env = System.getProperty("environment");
- final private String token = System.getProperty("token");
- private Map headers = new HashMap<>();
-
- public static synchronized RestContact getInstance() {
- if (instance == null) {
- instance = new RestContact();
- }
- return instance;
- }
- public RestContact() {
+ private static final Logger logger = LoggerFactory.getLogger(RestContact.class);
+
+ private final Map headers = new HashMap<>();
+
+ // Carica il token all'avvio della classe
+ private WebDriverConfig webDriverConfig;
+
+ @Autowired
+ private CustomHttpClient customHttpClient;
- this.httpClient.setBaseUrlApi("https://webapi." + env + ".notifichedigitali.it");
+ private final CustomHttpClient, String> httpClient;
+
+ @Autowired
+ public RestContact(WebDriverConfig webDriverConfig, CustomHttpClient, String> httpClient) {
+ this.httpClient = httpClient;
+ this.webDriverConfig = webDriverConfig;
+ this.httpClient.setBaseUrlApi("https://webapi." + this.webDriverConfig.getEnvironment() + ".notifichedigitali.it");
+
+ String token = System.getProperty("token");
if (token != null) {
this.headers.put("Authorization", token);
} else {
@@ -38,97 +54,99 @@ public RestContact() {
}
}
+
+
/**
- * Remove the default digital address email from the contact
- *
- * @throws RestContactException if there is an error during the request
+ * Rimuove l'indirizzo email di cortesia predefinito.
*/
public void removeDigitalAddressCourtesyEmail() throws RestContactException {
- String url = "https://webapi." + env + ".notifichedigitali.it/address-book/v1/digital-address/courtesy/default/EMAIL";
- String response = "";
+ String url = "https://webapi." + webDriverConfig.getEnvironment() + ".notifichedigitali.it/address-book/v1/digital-address/courtesy/default/EMAIL";
try {
- response = httpClient.sendHttpDeleteRequest(url, this.headers, String.class);
+ headers.put("Authorization", System.getProperty("token"));
+ String response = httpClient.sendHttpDeleteRequest(url, headers, String.class);
logger.info("Risposta ricevuta: " + response);
logger.info("Indirizzo digitale di cortesia rimosso con successo");
} catch (IOException e) {
- logger.warn("Error during removeDigitalAdressCourtesyEmail: " + e.getMessage());
- logger.warn("Non è stato possibile rimuovere l'indirizzo digitale di cortesia");
+ logger.error("Error during removeDigitalAdressCourtesyEmail: {}", e.getMessage());
+ throw new RestContactException("Non è stato possibile rimuovere l'indirizzo digitale di cortesia", e);
}
}
/**
- * Remove the default digital address pec from the contact
- *
- * @throws RestContactException if there is an error during the request
+ * Rimuove l'indirizzo PEC legale predefinito.
*/
public void removeDigitalAddressLegalPec() throws RestContactException {
- String url = "https://webapi." + env + ".notifichedigitali.it/bff/v1/addresses/LEGAL/default/PEC";
- String response = "";
+ String url = "https://webapi." + webDriverConfig.getEnvironment() + ".notifichedigitali.it/bff/v1/addresses/LEGAL/default/PEC";
try {
- response = httpClient.sendHttpDeleteRequest(url, this.headers, String.class);
+ headers.put("Authorization", System.getProperty("token"));
+ String response = httpClient.sendHttpDeleteRequest(url, headers, String.class);
logger.info("Risposta ricevuta: " + response);
- logger.info("Indirizzo digitale di cortesia rimosso con successo");
+ logger.info("Indirizzo PEC legale rimosso con successo");
} catch (IOException e) {
- logger.warn("Error during removeDigitalAdressLegalPec: " + e.getMessage());
- logger.warn("Non è stato possibile rimuovere l'indirizzo digitale di cortesia");
+ logger.error("Error during removeDigitalAdressLegalPec: {}", e.getMessage());
+ logger.error("Non è stato possibile rimuovere l'indirizzo PEC legale", e);
+ //throw new RestContactException("Non è stato possibile rimuovere l'indirizzo PEC legale", e);
}
}
/**
- * Remove the special contact from the contact
- *
- * @param digitalAddress the digital address to remove
- * @throws RestDelegationException if there is an error during the request
+ * Rimuove un contatto speciale.
*/
public void removeSpecialContact(DigitalAddress digitalAddress) throws RestDelegationException {
String channelType = digitalAddress.getChannelType().toString();
String addressType = digitalAddress.getAddressType().toString().toLowerCase();
- String url = "https://webapi." + env + ".notifichedigitali.it/address-book/v1/digital-address/"
+ String url = "https://webapi." +webDriverConfig.getEnvironment() + ".notifichedigitali.it/address-book/v1/digital-address/"
+ addressType + "/" + digitalAddress.getSenderId() + "/" + channelType;
- String response = "";
+
try {
- response = httpClient.sendHttpDeleteRequest(url, this.headers, String.class);
+ headers.put("Authorization", System.getProperty("token"));
+ String response = httpClient.sendHttpDeleteRequest(url, headers, String.class);
logger.info("Risposta ricevuta: " + response);
logger.info("Indirizzo digitale di 'altri recapiti' rimosso con successo");
} catch (IOException e) {
- logger.error("Error during removeSpecialContact: " + e.getMessage());
- logger.warn("Non è stato possibile rimuovere l'indirizzo digitale di 'altri recapiti'");
+ logger.error("Error during removeSpecialContact: {}", e.getMessage());
+ throw new RestDelegationException("Non è stato possibile rimuovere l'indirizzo digitale di 'altri recapiti'", e);
}
}
+ /**
+ * Ottiene l'indirizzo digitale di default.
+ */
public DigitalAddressResponse getDigitalAddress() throws RestContactException {
- CustomHttpClient, DigitalAddressResponse> httpClientDigitalAddress = CustomHttpClient.getInstance();
- httpClientDigitalAddress.setBaseUrlApi("https://webapi." + env + ".notifichedigitali.it");
+ CustomHttpClient, DigitalAddressResponse> httpClientDigitalAddress = customHttpClient;
+ httpClientDigitalAddress.setBaseUrlApi("https://webapi." + webDriverConfig.getEnvironment() + ".notifichedigitali.it");
String url = "/bff/v1/addresses/LEGAL/default/PEC";
+
try {
- DigitalAddressResponse response = httpClientDigitalAddress.sendHttpGetRequest(url, this.headers, DigitalAddressResponse.class);
- logger.info("Risposta ricevuta: " + response);
+ logger.info("TOKEN..."+System.getProperty("token"));
+ headers.put("Authorization", System.getProperty("token"));
+ DigitalAddressResponse response = httpClientDigitalAddress.sendHttpGetRequest(url, headers, DigitalAddressResponse.class);
+ logger.info("Risposta ricevuta: {}", response);
logger.info("Indirizzi digitali ricevuti con successo");
return response;
} catch (IOException e) {
logger.error("Error during getDigitalAddress", e);
- logger.warn("Non è stato possibile ricevere gli indirizzi digitali");
+ throw new RestContactException("Non è stato possibile ricevere gli indirizzi digitali", e);
}
- return null;
}
-
+ /**
+ * Ottiene tutti gli indirizzi digitali.
+ */
public List getAllDigitalAddress() throws RestContactException {
- CustomHttpClient, DigitalAddress> httpClientDigitalAddress = CustomHttpClient.getInstance();
- httpClientDigitalAddress.setBaseUrlApi("https://webapi." + env + ".notifichedigitali.it");
+ CustomHttpClient, DigitalAddress> httpClientDigitalAddress = customHttpClient;
+ httpClientDigitalAddress.setBaseUrlApi("https://webapi." + webDriverConfig.getEnvironment() + ".notifichedigitali.it");
String url = "/bff/v1/addresses";
try {
- List response = httpClientDigitalAddress.sendHttpGetRequestListDigitalAddress(url, this.headers, DigitalAddress.class);
-
- logger.info("Risposta ricevuta: " + response);
+ headers.put("Authorization", System.getProperty("token"));
+ List response = httpClientDigitalAddress.sendHttpGetRequestListDigitalAddress(url, headers, DigitalAddress.class);
+ logger.info("Risposta ricevuta: {}", response);
logger.info("Indirizzi digitali ricevuti con successo");
return response;
} catch (IOException e) {
- logger.error("Error during getDigitalAddress", e);
- logger.warn("Non è stato possibile ricevere gli indirizzi digitali");
- return null;
+ logger.error("Error during getAllDigitalAddress", e);
+ throw new RestContactException("Non è stato possibile ricevere gli indirizzi digitali", e);
}
}
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/it/pn/frontend/e2e/rest/RestDelegation.java b/src/main/java/it/pn/frontend/e2e/rest/RestDelegation.java
index 97fe0f59e..cc036f315 100644
--- a/src/main/java/it/pn/frontend/e2e/rest/RestDelegation.java
+++ b/src/main/java/it/pn/frontend/e2e/rest/RestDelegation.java
@@ -1,6 +1,7 @@
package it.pn.frontend.e2e.rest;
import it.pn.frontend.e2e.config.CustomHttpClient;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import it.pn.frontend.e2e.exceptions.RestDelegationException;
import it.pn.frontend.e2e.model.delegate.DelegateRequestPF;
import it.pn.frontend.e2e.model.delegate.DelegateRequestPG;
@@ -8,125 +9,157 @@
import it.pn.frontend.e2e.model.delegate.DelegateResponsePG;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
+/*
+*Modifiche principali:
+Iniezione delle dipendenze: Utilizza @Autowired per l’iniezione automatica di CustomHttpClient e WebDriverConfig, eliminando l'uso di un getInstance() statico.
+Costruttore: Il costruttore viene utilizzato per impostare l'URL base e l'intestazione Authorization per tutte le richieste.
+Miglioramento gestione errori: Log di errore e gestione delle eccezioni tramite RestDelegationException per comunicare i fallimenti specifici nei metodi.
+Metodi ottimizzati: Tutti i metodi sono stati aggiornati per seguire la configurazione dell’intestazione e l’uso di CustomHttpClient.
+*
+* */
+@Component
public class RestDelegation {
- private static final Logger logger = LoggerFactory.getLogger("RestDelegation");
- final CustomHttpClient httpClientPF = CustomHttpClient.getInstance();
- final CustomHttpClient httpClientPG = CustomHttpClient.getInstance();
-
- private static RestDelegation instance;
- final private String env = System.getProperty("environment");
- final private String token = System.getProperty("token");
- private Map headers = new HashMap<>();
-
- public static synchronized RestDelegation getInstance() {
- if (instance == null) {
- instance = new RestDelegation();
- }
- return instance;
+
+ private static final Logger logger = LoggerFactory.getLogger(RestDelegation.class);
+
+
+
+ private WebDriverConfig webDriverConfig;
+
+ private final Map headers = new HashMap<>();
+
+ private final CustomHttpClient httpClientPF;
+ private final CustomHttpClient httpClientPG;
+
+
+
+ @Autowired
+ public RestDelegation( WebDriverConfig webDriverConfig, CustomHttpClient httpClientPF, CustomHttpClient httpClientPG) {
+ this.httpClientPF = httpClientPF;
+ this.httpClientPG = httpClientPG;
+ this.webDriverConfig = webDriverConfig;
+ initializeHeaders();
+ setupHttpClients();
}
- public RestDelegation() {
- this.httpClientPF.setBaseUrlApi("https://webapi." + env + ".notifichedigitali.it");
+ private void initializeHeaders() {
+ String token = System.getProperty("token");
if (token != null) {
- this.headers.put("Authorization", token);
+ headers.put("Authorization", token);
} else {
logger.warn("Auth token non trovato, impossibile fare la richiesta HTTP in background!");
}
}
+ private void setupHttpClients() {
+ String baseUrl = "https://webapi." + webDriverConfig.getEnvironment() + ".notifichedigitali.it";
+ httpClientPF.setBaseUrlApi(baseUrl);
+ httpClientPG.setBaseUrlApi(baseUrl);
+ }
+
/**
- * Add a new PF delegation
+ * Aggiunge una nuova delega PF.
*
- * @param delegateRequestPF DelegateRequest object with all the data
- * @return DelegateResponse object with the response
- * @throws RestDelegationException if there is an error during the request
+ * @param delegateRequestPF DelegateRequest con i dati della delega
+ * @param tokenExchange token per l'exchange JWT
+ * @return DelegateResponse con la risposta
+ * @throws RestDelegationException in caso di errore nella richiesta
*/
public DelegateResponsePF addDelegationPF(DelegateRequestPF delegateRequestPF, String tokenExchange) throws RestDelegationException {
try {
String jwtToken = httpClientPF.getJwtToken(tokenExchange);
- this.headers.put("Authorization", "Bearer " + jwtToken);
- DelegateResponsePF response = httpClientPF.sendHttpPostRequest("/mandate/api/v1/mandate", this.headers, delegateRequestPF, DelegateResponsePF.class);
+ headers.put("Authorization", "Bearer " + jwtToken);
+ DelegateResponsePF response = httpClientPF.sendHttpPostRequest("/mandate/api/v1/mandate", headers, delegateRequestPF, DelegateResponsePF.class);
if (response != null) {
- logger.info(String.valueOf(response));
+ logger.info("Response: {}", response);
return response;
}
} catch (IOException e) {
- logger.error("Error during addDelegationPF", e);
+ logger.error("Errore durante addDelegationPF", e);
+ throw new RestDelegationException("Errore durante la richiesta di delega PF", e);
}
return null;
}
/**
- * Add a new PG delegation
+ * Aggiunge una nuova delega PG.
*
- * @param delegateRequest DelegateRequest object with all the data
- * @return DelegateResponse object with the response
- * @throws RestDelegationException if there is an error during the request
+ * @param delegateRequest DelegateRequest con i dati della delega
+ * @param tokenExchange token per l'exchange JWT
+ * @return DelegateResponse con la risposta
+ * @throws RestDelegationException in caso di errore nella richiesta
*/
public DelegateResponsePG addDelegationPG(DelegateRequestPG delegateRequest, String tokenExchange) throws RestDelegationException {
try {
String jwtToken = httpClientPG.getJwtToken(tokenExchange);
- this.headers.put("Authorization", "Bearer " + jwtToken);
- DelegateResponsePG response = httpClientPG.sendHttpPostRequest("/mandate/api/v1/mandate", this.headers, delegateRequest, DelegateResponsePG.class);
+ headers.put("Authorization", "Bearer " + jwtToken);
+ DelegateResponsePG response = httpClientPG.sendHttpPostRequest("/mandate/api/v1/mandate", headers, delegateRequest, DelegateResponsePG.class);
if (response != null) {
- logger.info(String.valueOf(response));
+ logger.info("Response: {}", response);
return response;
}
} catch (IOException e) {
- logger.error("Error during addDelegationPG", e);
+ logger.error("Errore durante addDelegationPG", e);
+ throw new RestDelegationException("Errore durante la richiesta di delega PG", e);
}
return null;
}
/**
- * Revoke a PF delegation
- *
- * Keep in mind this method works only for the annotation @After into Hooks.java, because there isn't a jwt token set
- * if you don't invoke an "addDelegation"
+ * Revoca una delega.
*
- * @param mandateId String with the mandateId
- * @throws RestDelegationException if there is an error during the request
+ * @param mandateId ID della delega da revocare
+ * @throws RestDelegationException in caso di errore nella richiesta
*/
public void revokeDelegation(String mandateId) throws RestDelegationException {
try {
- httpClientPF.sendHttpPatchRequest("/mandate/api/v1/mandate/" + mandateId + "/revoke", this.headers);
+ httpClientPF.sendHttpPatchRequest("/mandate/api/v1/mandate/" + mandateId + "/revoke", headers);
+ logger.info("Delega {} revocata con successo", mandateId);
} catch (IOException e) {
- logger.error("Error during revokeDelegation", e);
+ logger.error("Errore durante revokeDelegation", e);
+ throw new RestDelegationException("Errore durante la revoca della delega", e);
}
}
/**
- * Reject a delegation
- *
- * Keep in mind this method works only for the annotation @After into Hooks.java, because there isn't a jwt token set
- * if you don't invoke an "addDelegation"
+ * Rifiuta una delega.
*
- * @param mandateId String with the mandateId
- * @throws RestDelegationException if there is an error during the request
+ * @param mandateId ID della delega da rifiutare
+ * @throws RestDelegationException in caso di errore nella richiesta
*/
public void rejectDelegation(String mandateId) throws RestDelegationException {
try {
- httpClientPG.sendHttpPatchRequest("/mandate/api/v1/mandate/" + mandateId + "/reject", this.headers);
+ httpClientPG.sendHttpPatchRequest("/mandate/api/v1/mandate/" + mandateId + "/reject", headers);
+ logger.info("Delega {} rifiutata con successo", mandateId);
} catch (IOException e) {
- logger.error("Error during rejectDelegation", e);
+ logger.error("Errore durante rejectDelegation", e);
+ throw new RestDelegationException("Errore durante il rifiuto della delega", e);
}
}
+ /**
+ * Ottiene le deleghe per il delegante corrente.
+ *
+ * @return lista di `DelegateResponsePF` con le deleghe
+ */
public List getDelegator() {
try {
- List response = httpClientPF.sendHttpGetRequestListDelegate("/mandate/api/v1/mandates-by-delegator", this.headers, DelegateResponsePF.class);
+ List response = httpClientPF.sendHttpGetRequestListDelegate("/mandate/api/v1/mandates-by-delegator", headers, DelegateResponsePF.class);
if (response != null) {
- logger.info(String.valueOf(response));
+ logger.info("Response: {}", response);
return response;
}
} catch (IOException e) {
- logger.error("Error during getDelegator", e);
+ logger.error("Errore durante getDelegator", e);
}
return null;
}
diff --git a/src/main/java/it/pn/frontend/e2e/rest/RestIncident.java b/src/main/java/it/pn/frontend/e2e/rest/RestIncident.java
index 0e2c80a6e..9e9adad8f 100644
--- a/src/main/java/it/pn/frontend/e2e/rest/RestIncident.java
+++ b/src/main/java/it/pn/frontend/e2e/rest/RestIncident.java
@@ -1,26 +1,37 @@
package it.pn.frontend.e2e.rest;
import it.pn.frontend.e2e.config.CustomHttpClient;
+import it.pn.frontend.e2e.config.WebDriverConfig;
import it.pn.frontend.e2e.model.incidents.IncidentStatusResponse;
import it.pn.frontend.e2e.model.incidents.NewIncidentRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+/*Modifiche principali
+Iniezione delle dipendenze: @Autowired viene utilizzato per iniettare CustomHttpClient e WebDriverConfig.
+Rimozione del Singleton: RestIncident è ora un @Component gestito da Spring, quindi non è necessario il metodo getInstance() o una gestione manuale dell'istanza.
+Configurazione URL base: La configurazione dell'URL base è ora gestita nel costruttore per inizializzare httpClientIncident.*/
+@Component
public class RestIncident {
- private static final Logger logger = LoggerFactory.getLogger("RestIncident");
- final CustomHttpClient httpClientIncident = CustomHttpClient.getInstance();
- final private String env = System.getProperty("environment");
- private static RestIncident instance;
+ private static final Logger logger = LoggerFactory.getLogger(RestIncident.class);
+
+ @Autowired
+ private CustomHttpClient httpClientIncident;
+
+ @Autowired
+ private WebDriverConfig webDriverConfig;
- public static synchronized RestIncident getInstance() {
- if (instance == null) {
- instance = new RestIncident();
- }
- return instance;
+ @Autowired
+ public RestIncident(WebDriverConfig webDriverConfig) {
+ this.webDriverConfig = webDriverConfig;
+ setupHttpClient();
}
- public RestIncident() {
- this.httpClientIncident.setBaseUrlApi("https://api.bo." + env + ".notifichedigitali.it/");
+ private void setupHttpClient() {
+ String baseUrl = "https://api.bo." + webDriverConfig.getEnvironment() + ".notifichedigitali.it/";
+ httpClientIncident.setBaseUrlApi(baseUrl);
+ logger.info("Configured HTTP client for Incidents with base URL: {}", baseUrl);
}
}
diff --git a/src/main/java/it/pn/frontend/e2e/rest/RestNotification.java b/src/main/java/it/pn/frontend/e2e/rest/RestNotification.java
index 7ba8e9789..fe762ca97 100644
--- a/src/main/java/it/pn/frontend/e2e/rest/RestNotification.java
+++ b/src/main/java/it/pn/frontend/e2e/rest/RestNotification.java
@@ -8,17 +8,21 @@
import it.pn.frontend.e2e.model.documents.PreLoadRequest;
import it.pn.frontend.e2e.model.documents.PreLoadResponse;
import lombok.extern.slf4j.Slf4j;
-import org.junit.Assert;
+import org.junit.jupiter.api.Assertions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
import java.util.List;
@Slf4j
+@Component
public class RestNotification {
public RestNotification() {
}
-
+ @Autowired
+ private CustomHttpClient customHttpClient;
/**
* Create a new notification with one recipient and one document
*
@@ -30,7 +34,7 @@ public NewNotificationResponse newNotificationWithOneRecipientAndDocument(NewNot
final CustomHttpClient httpClient2 = new CustomHttpClient<>(); // Modifica qui
try {
NewNotificationResponse response = httpClient2.sendHttpPostRequest("/delivery/v2.3/requests", null, notification, NewNotificationResponse.class);
- Assert.assertNotNull("Error during createNewNotification", response);
+ Assertions.assertNotNull( response,"Error during createNewNotification");
log.info(String.valueOf(response));
return response;
} catch (IOException e) {
@@ -53,27 +57,27 @@ public List preLoadDocument(List preLoadList) t
}
public void uploadDocument(String url, String secret, String sha256) throws RestNotificationException {
- final CustomHttpClient, ?> httpClient2 = CustomHttpClient.getInstance();
+ final CustomHttpClient, ?> httpClient2 = customHttpClient;
try {
httpClient2.sendHttpUpLoadPutRequest(url, secret, sha256, null);
} catch (IOException e) {
log.error("Error during document upload", e);
- Assert.fail("Error during document upload" + e.getMessage());
+ Assertions.fail("Error during document upload" + e.getMessage());
}
}
public void uploadDocumentF24(String url, String secret, String sha256, File metaDatiDocument) throws RestNotificationException {
- final CustomHttpClient, ?> httpClient2 = CustomHttpClient.getInstance();
+ final CustomHttpClient, ?> httpClient2 = customHttpClient;
try {
httpClient2.sendHttpUpLoadf24PutRequest(url, secret, sha256, null, metaDatiDocument);
} catch (IOException e) {
log.error("Error during F24 upload", e);
- Assert.fail("Error during F24 upload" + e.getMessage());
+ Assertions.fail("Error during F24 upload" + e.getMessage());
}
}
public LinkedTreeMap getNotificationStatus(String notificationRequestId) {
- final CustomHttpClient