Como capturar los responses que hace el sitio mientras automatizamos el frontend
Buenas lectores.
Cuando estamos automatizando y por algún motivo la interfaz presenta error y/o se queda sin permitir ninguna acción; no es suficiente con reportar el bug puesto que en la mayoría del tiempo esto ocurre de manera aleatoria.
Para esto, es mejor estar preparados e imprimir la mayor cantidad de información que le permitan al desarrollador de la aplicación saber que pudo suceder en ese momento. Una forma facil y muy util es imprimir todas las peticiones que se envían por backend para saber si en algún momento algún servicio deja de funcionar. Para lograrlo vamos a interactuar con el devtools de chrome, cabe destacar que para poder usarlo debemos tener como mínimo Selenium v4.
Vamos al ejemplo:
Selenium directo:
import java.time.Duration;
import java.util.HashMap;
import java.util.Optional;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.devtools.HasDevTools;
import org.openqa.selenium.devtools.v114.network.Network;
import org.openqa.selenium.devtools.v114.network.model.Request;
public class RequestChrome {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","./src/resources/drivers/chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
org.openqa.selenium.devtools.DevTools devTool = ((HasDevTools) driver).getDevTools();
devTool.createSession();
devTool.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
devTool.addListener(Network.responseReceived(), requestSent -> {
System.out.println("URL => " + requestSent.getResponse().getUrl());
System.out.println("Status => " + requestSent.getResponse().getStatus());
System.out.println("Headers => " + requestSent.getResponse().getHeaders().toString());
System.out.println("------------------------------------------------------");
});
driver.get("https://www.programsbuzz.com");
}
}
Usando serenity y screenplay:
import org.openqa.selenium.devtools.v114.network.Network;
import org.openqa.selenium.devtools.v114.performance.Performance;
import org.openqa.selenium.devtools.v114.performance.model.Metric;
import net.serenitybdd.screenplay.Performable;
import net.serenitybdd.screenplay.Task;
import net.serenitybdd.screenplay.actions.WithDevTools;
public static Performable activeResponse() {
return Task.where("Active devtools responses",
WithDevTools.perform(
devTools -> {
devTools.createSession(); devTools.send(Network.enable(Optional.empty(),Optional.empty(),Optional.empty())); devTools.addListener(Network.responseReceived(), responseReceived -> {
logger.info("URL => {}",responseReceived.getResponse().getUrl());
logger.info("Status => {}" ,responseReceived.getResponse().getStatus());
logger.info("Headers => {}" ,responseReceived.getResponse().getHeaders());
logger.info("------------------------------------------------------");
});
}
)
);
}
Fuentes:
https://www.programsbuzz.com/article/selenium-intercept-response
https://jar-download.com/artifacts/org.seleniumhq.selenium/selenium-devtools-v101/4.1.4/source-code/org/openqa/selenium/devtools/v101/network/model/Response.java
https://stackoverflow.com/questions/68668853/how-to-get-the-response-body-from-network-tab-using-selenium-4-devtools
https://www.youtube.com/watch?v=HtBhLdZ19iQ
https://serenity-bdd.github.io/docs/screenplay/screenplay_webdriver
Comentarios
Publicar un comentario