Fermer

janvier 31, 2024

Intercepter et se moquer des réponses du réseau avec Selenium Chrome DevTools / Blogs / Perficient

Intercepter et se moquer des réponses du réseau avec Selenium Chrome DevTools / Blogs / Perficient


Dans le paysage dynamique de l’intégration de Selenium Chrome DevTools, nous avons exploré la simulation de la navigation mobile et l’exploitation des informations en temps réel issues des réponses réseau à l’aide des écouteurs Selenium CDP. S’appuyant sur cette base, notre aventure s’aventure désormais dans le domaine de l’interception et de la moquerie des réponses réseau/API, une compétence cruciale pour des tests Web complets. Dans cet article, nous allons nous lancer dans un guide étape par étape, montrant comment Selenium, associé à Chrome DevTools, permet aux testeurs d’intercepter et de manipuler les réponses réseau/API.

Pour en savoir plus sur Selenium et CDP, vous pouvez vous référer à mes blogs précédents

Optimisation des tests Web : maîtriser la simulation mobile avec le remplacement des métriques des appareils Selenium CDP / Blogs / Perficient

Décoder les interactions Web : libérer les auditeurs Selenium CDP pour extraire les réponses du réseau / Blogs / Perficient

Interception et modification de la demande de réseau

Nous pouvons intercepter la requête réseau en mettant la requête en pause, en apportant des modifications à la requête, puis en poursuivant la requête avec les modifications apportées.

Comprenons-le avec un scénario simple.

Nous avons un site Web, https://rahulshettyacademy.com/angularAppdemo/, avec un lien « Bibliothèque virtuelle » qui mène à la page Bibliothèque affichant la liste des livres. Lorsqu’il n’y a qu’un seul livre dans le compte, il affiche le message « Oups, un seul livre est disponible », qui est associé à l’URL de la requête : « https://rahulshettyacademy.com/Library/GetBook.php?AuthorName=Mauvais garçon« .

Mais lorsque nous accédons à la page de la bibliothèque en cliquant sur « Bibliothèque virtuelle », l’URL de la requête est définie par défaut avec un compte possédant plusieurs livres : « https://rahulshettyacademy.com/Library/GetBook.php?AuthorName=Shetty« .

Par conséquent, pour tester le message, nous ne pouvons pas nous appuyer directement sur UI Automation. Nous devons apporter des modifications à l’URL de la requête réseau lors de l’envoi de la requête, ce qui se moque des requêtes réseau.

C’est là que les fonctionnalités d’interception et de moquerie de la demande réseau entrent en jeu.

Flux étape par étape pour la demande moqueuse

Voici le code pour le problème ci-dessus :

public class NetworkMocking {

        public static void main(String[] args) throws InterruptedException {
//Initialize driver  
          System.setProperty("webdriver.chrome.driver", "/Users/rahulshetty/Documents/chromedriver");
            
            ChromeDriver driver = new ChromeDriver();
            
//Create DevTools Object and start session
            DevTools devTools = driver.getDevTools();
            devTools.createSession();
            
//Enable Fetch Domain to work with network requests
            devTools.send(Fetch.enable(Optional.empty(), Optional.empty()));

//Add Listener to pause request
            devTools.addListener(Fetch.requestPaused(), request->
            {
//Filter url with if condition and make changes in URL with replace method
                if(request.getRequest().getUrl().contains("shetty"))
                {
//Mock URL - make change in the url by using replace method and change the authorName
                    String mockedUrl =request.getRequest().getUrl().replace("=shetty", "=BadGuy");
                    
                    System.out.println(mockedUrl);
                    
//Continue request with new mock URL                   
                    devTools.send(Fetch.continueRequest(request.getRequestId(), Optional.of(mockedUrl), Optional.of(request.getRequest().getMethod()),
                            Optional.empty(), Optional.empty(),Optional.empty()));
                }
                else {
                    
                    devTools.send(Fetch.continueRequest(request.getRequestId(), Optional.of(request.getRequest().getUrl()), Optional.of(request.getRequest().getMethod()),
                            Optional.empty(), Optional.empty(),Optional.empty()));
                    
                }
                
            });
//Perform test and verify the message
            driver.get("https://rahulshettyacademy.com/angularAppdemo/");
            driver.findElement(By.cssSelector("button[routerlink*='library']")).click();
            Thread.sleep(3000);
            
            System.out.println(driver.findElement(By.cssSelector("p")).getText());
                        
            
        }

    }

Voici les fonctions que nous avons utilisées ci-dessus :

  1. Récupérer.activer : Activez le domaine Fetch, permettant l’interception et la modification des requêtes réseau. Il accepte 3 paramètres : maxTotalBufferSize(entier), maxResourceBufferSize(entier) et maxPostDataSize(entier), respectivement.
  2. Fetch.requestPaused : Le requestPaused l’événement se déclenche lorsque nous mettons en pause les requêtes réseau. Dans ce cas, l’écouteur le met en pause pour inspecter et éventuellement modifier la demande.
  3. Récupérer.continueRequest : Cette méthode poursuit la demande suspendue avec des modifications facultatives. Dans ce cas, il poursuit la demande avec l’URL d’origine ou modifiée en fonction de la condition.

Par conséquent, en suivant le processus ci-dessus pour créer une requête réseau fictive, nous pouvons tester la fonctionnalité qui serait autrement impossible par automatisation directe.

Vous pouvez vous référer à la documentation officielle pour plus de détails sur les différentes méthodes et événements : Protocole Chrome DevTools

Conclusion

En conclusion, maîtriser l’art d’intercepter et de se moquer des réponses réseau/API avec Selenium et Chrome DevTools dévoile une dimension puissante des tests Web. Le guide étape par étape permet aux testeurs de manipuler de manière dynamique les requêtes réseau, permettant ainsi des scénarios de test complets au-delà de l’automatisation de l’interface utilisateur. Passant de la simulation de navigation mobile aux informations en temps réel et désormais à l’interception et à la moquerie, les capacités de Selenium continuent d’évoluer. Restez à l’écoute pour plus d’informations sur notre exploration en cours. Bons tests !






Source link