Fermer

février 14, 2024

Stratégies et techniques / Blogs / Perficient

Stratégies et techniques / Blogs / Perficient


Dans le domaine des tests Web, il est courant de rencontrer des sites dotés d’une authentification de base. La gestion transparente de l’authentification de base dans les scénarios de test est essentielle pour une couverture complète des tests. Selenium propose diverses approches pour relever les défis d’authentification de base. Ce blog explore les nuances de l’utilisation de l’authentification de base à l’aide de la fonction uriPredicate de Selenium, en explorant différentes stratégies et techniques pour garantir une intégration fluide de l’authentification dans votre suite de tests.

Comprendre l’authentification de base

L’authentification de base est un schéma d’authentification simple intégré au protocole HTTP. Cela implique l’envoi d’un nom d’utilisateur et d’un mot de passe dans l’en-tête de la requête HTTP. Lors de l’accès à une ressource protégée sur un site Web, le serveur invite le client à fournir ses informations d’identification, généralement via une boîte de dialogue de connexion. Une fois authentifié, le client peut accéder à la ressource. Ce type de boîte de dialogue ne peut pas être géré directement à l’aide de localisateurs, nous devons donc utiliser d’autres stratégies pour le gérer.Fenêtres d'authentification de base

Approches pour gérer l’authentification de base

Selenium propose plusieurs stratégies pour gérer l’authentification de base de manière transparente pendant les tests :

1. Explorer la fonction uriPredicate de Selenium

Utilisation de la fonction de prédicat URI : la fonction uriPredicate de Selenium vous permet d’intercepter les requêtes réseau et de les modifier avant qu’elles ne soient envoyées. Cette fonction est particulièrement utile pour ajouter des informations d’authentification aux URL nécessitant une authentification de base.

public class BasicAuthenticationURI {
    public static void main(String[] args) {
        
        //chrome driver automatically 
        WebDriverManager.chromedriver().setup();
        WebDriver driver  = new ChromeDriver();
        
        //predicate URI
        Predicate<URI> predicatURI = uri -> uri.getHost().contains("the-internet.herokuapp.com");
        
        //wrap driver with authentication
        ((HasAuthentication)driver).register(predicatURI, UsernameAndPassword.of("admin", "admin"));
        
        // test
        driver.get("https://the-internet.herokuapp.com/");
        driver.findElement(By.linkText("Basic Auth")).click();     
        
    }
}

Predicate<URI>

    • Cette partie du code définit un prédicat, qui est une interface fonctionnelle dans le langage Java. java.util.function emballer. Un prédicat représente une fonction booléenne qui prend un argument et renvoie vrai ou faux.
    • Ici, le prédicat opère sur URI objets.

uri -> uri.getHost().contains("the-internet.herokuapp.com")

    • Il s’agit d’une expression lambda, qui constitue une manière concise de représenter une fonction anonyme.
    • Le paramètre d’entrée de l’expression lambda est, qui représente un URI objet.
    • Le corps de l’expression lambda contient la logique permettant de déterminer si l’URI donné répond à certains critères.
    • "uri.getHost()" récupère la partie hôte de l’URI, qui représente généralement le nom de domaine.
    • ".contains("the-internet.herokuapp.com")" vérifie si l’hôte contient la sous-chaîne spécifiée « the-internet.herokuapp.com ».

Le "predicateURI" consiste essentiellement à définir une condition dans laquelle les informations d’authentification de base doivent être appliquées.

Dans ce cas, il vérifie si la partie hôte de l’URI contient « the-internet.herokuapp.com ». Si tel est le cas, le prédicat est évalué à true, indiquant que les informations d’authentification doivent être utilisées.

Cette approche nous permet d’appliquer de manière sélective une authentification basée sur l’hôte/domaine de l’URI. En d’autres termes, l’authentification ne sera déclenchée que lors de la navigation vers les pages du domaine « the-internet.herokuapp.com ».

En résumé, le "predicateURI" Le prédicat définit la condition dans laquelle les informations d’authentification de base seront appliquées. Il vérifie si la partie hôte de l’URI correspond à un nom de domaine spécifié, offrant ainsi un moyen flexible de gérer l’authentification basée sur l’URL de la page Web.

Enregistrement des informations d’authentification

Nous enveloppons ensuite l’instance WebDriver avec les informations d’authentification de base à l’aide du "register" méthode. Cette méthode fait partie du "HasAuthentication" interface, qui permet aux instances WebDriver de gérer l’authentification. Nous fournissons le predicateURI et les informations d’identification (nom d’utilisateur et mot de passe) en utilisant le "UsernameAndPassword.of" méthode.

Essai

Après avoir configuré l’authentification, nous naviguons vers le site Web cible (https://the-internet.herokuapp.com/) en utilisant « driver.get()". Ensuite, nous interagissons avec la page en cliquant sur un lien avec le texte « Basic Auth ».

Le "register" La méthode est particulièrement intéressante car elle nous permet d’appliquer sélectivement une authentification basée sur l’URI de la page Web. Cela peut être utile lorsqu’il s’agit de plusieurs domaines ou lorsque nous souhaitons appliquer l’authentification uniquement dans des conditions spécifiques.

2. Capacités du navigateur

Certains navigateurs, tels que Chrome, prennent en charge la transmission des informations d’authentification de base directement dans l’URL du navigateur. En intégrant le nom d’utilisateur et le mot de passe dans l’URL elle-même, Selenium peut accéder directement à la page authentifiée sans avoir besoin d’invites supplémentaires.

public class BasicAuthentication {
    public static void main(String[] args) {
        
        //initialize chrome driver 
        WebDriverManager.chromedriver().setup();
        WebDriver driver  = new ChromeDriver();
        
        // add credentials username = admin, password = admin
        //Syntax to embed creds in the URL > "https://" + USERNAME + ":" + PASSWORD + "@the-internet.herokuapp.com/"

        driver.get("https://admin:admin@the-internet.herokuapp.com/");
        driver.findElement(By.linkText("Basic Auth")).click();      
    }
}

3. Outils et bibliothèques tiers : AutoIT

Divers outils et bibliothèques tiers s’intègrent parfaitement à Selenium pour gérer l’authentification de base. Par exemple, des bibliothèques comme AutoIT offrent des fonctionnalités pour interagir avec les boîtes de dialogue d’authentification, permettant ainsi des processus de connexion automatisés. AutoIT est un puissant langage de script et un outil d’automatisation principalement conçu pour les systèmes d’exploitation Windows. Alors que Selenium maîtrise les tâches d’automatisation Web, AutoIT se spécialise dans l’automatisation des interactions basées sur Windows, y compris la gestion des boîtes de dialogue d’authentification. En intégrant les scripts AutoIT dans les flux de travail Selenium, les utilisateurs peuvent effectuer de manière transparente diverses tâches d’automatisation telles que les opérations sur les fichiers, la saisie au clavier et à la souris, interagir avec les éléments de l’interface graphique tels que les boutons, les champs de texte et les boîtes de dialogue, etc.

Pour utiliser AutoIT, nous devons effectuer l’installation et les configurations. Par conséquent, nous discuterons du processus détaillé d’utilisation d’AutoIT avec Selenium pour l’authentification de base, le téléchargement de fichiers depuis le local et le téléchargement de fichiers. Restez à l’écoute !

4. Authentification du navigateur sans tête

Les navigateurs sans tête comme Headless Chrome ou PhantomJS peuvent gérer l’authentification de base sans avoir besoin de fenêtres de navigateur visibles. Selenium peut exploiter ces navigateurs sans tête pour exécuter des tests impliquant une authentification de base de manière rationalisée.

Conclusion

La gestion transparente de l’authentification de base dans les tests Selenium est cruciale pour des tests Web robustes et complets. En tirant parti de la fonction uriPredicate de Selenium et en explorant des approches alternatives, les testeurs peuvent rationaliser le processus d’authentification et garantir une exécution fluide des tests. Restez à l’écoute pour plus d’informations alors que nous continuons à explorer les techniques avancées de test Web avec Selenium et le protocole Chrome DevTools. Bons tests !






Source link