[Java] Présentation rapide des tests d'intégration avec Selenide + Chrome Driver <Mis à jour en mai 2020>

introduction

Après avoir développé la fonction de l'application, vous effectuez un ** test d'intégration (test d'intégration) ** pour voir comment cela fonctionne bien avec d'autres fonctions et comment il se comporte. Cette fois, automatisons un simple test d'intégration d'une application Web développée en Java au lieu de visuellement (c'est naturel) ** Selenide + [ChromeDriver]( Je vais faire des travaux pratiques en utilisant https://chromedriver.chromium.org) **. スクリーンショット 2020-05-22 0.38.50.png

Environnement de développement

macOS Catalina 10.15.4 IntelliJ IDEA 2018.3.6 Google Chrome 81.0.4044.138 Selenide 5.2.2 aShot 1.5.3

Préparation

Décrivez la bibliothèque à utiliser dans pom.xml.

pom.xml

<dependency>
    <groupId>com.codeborne</groupId>
    <artifactId>selenide</artifactId>
    <version>5.2.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>ru.yandex.qatools.ashot</groupId>
    <artifactId>ashot</artifactId>
    <version>1.5.3</version>
</dependency>

Ensuite, téléchargez le pilote pour utiliser le pilote Chrome. (Lien ci-dessous) https://chromedriver.chromium.org

  1. Cliquez sur Téléchargements スクリーンショット 2020-05-22 0.20.42.png
  2. Sélectionnez le pilote en fonction de la ** version de Chrome ** (81.0.4044.138 cette fois) スクリーンショット 2020-05-22 0.30.41.png
  3. Pour MacOS, sélectionnez mac64.zip, téléchargez-le et stockez-le dans n'importe quel emplacement (** souvenez-vous du chemin ** pour une utilisation ultérieure) スクリーンショット 2020-05-22 0.32.41.png

configuration de base

・ Paramètre du chemin du pilote Chrome -Création d'une instance ChromeDriver Vous pouvez désormais utiliser Chrome automatiquement à l'aide de Selenide.

System.setProperty("webdriver.chrome.driver", "<Chemin du pilote>/chromedriver");
WebDriver webDriver = new ChromeDriver();

Fermez la fenêtre en écrivant close () sur la dernière ligne.

webDriver().close();

opération de base

Les opérations de base requises pour le test sont expliquées ci-dessous.

Transition vers le lien

webDriver.get("https://hoge.com/");

Il existe une autre méthode.

webDriver.navigate().to("https://hoge.com/");

[Supplément] Vous pouvez penser à get () et naviguer (). To () comme presque la même méthode. La différence entre les deux apparaît lorsque vous travaillez avec des SPA (applications à une seule page). Dans SPA, get () actualise la page et les transitions, tandis que navigate (). To () transitions sans actualiser la page. get () ne conserve pas l'historique du navigateur ou les cookies, naviguez (). pour le faire. Dans SPA, naviguez (). Vers () peut être utilisé pour effectuer des tests plus proches de l'opération humaine.

Retour / avant

Revenir

webDriver.navigate().back();

passez

webDriver.navigate().forward();

mise à jour

mise à jour

webDriver.navigate().refresh();

Obtenir l'élément

Obtenir l'élément d'identifiant HTML

webDriver.findElement(By.id("hoge"));

Vous pouvez spécifier l'élément de classe, mais il est recommandé d'obtenir l'ID car le résultat de l'acquisition n'est souvent pas unique.

Clic de bouton

Obtenez l'élément d'identifiant HTML du bouton et cliquez sur

webDriver.findElement(By.id("hoge")).click();

Remplissage de formulaire

Récupérez l'élément HTML id du formulaire et entrez-le avec sendkeys ()

webDriver.findElement(By.id("hoge")).sendKeys("Hogehoge");

Le comportement est saisi caractère par caractère comme s'il était effectivement saisi à l'écran.

Effacer la valeur saisie dans le formulaire

Obtenez l'élément HTML id du formulaire et effacez-le avec clear ()

webDriver.findElement(By.id("hoge")).clear();

Cela est pratique lorsque vous souhaitez supprimer le contenu d'entrée existant dans le processus de mise à jour de la valeur.

Prendre une capture d'écran

La taille de la page est réduite afin que le plein écran puisse être affiché sur la première ligne. Si vous ne la minimisez pas, Chrome ajustera automatiquement la taille de la fenêtre, de sorte que l'écran entier ne sera pas beau. Le chemin de l'image est spécifié dans la troisième ligne.


webDriver.manage().window().setPosition(new Point(-2000, 0));

Screenshot screenshot = new AShot()
        .shootingStrategy(ShootingStrategies.viewportPasting(100))
        .takeScreenshot(webDriver);

ImageIO.write(screenshot.getImage(), "PNG", new File("<Chemin de stockage des images>/<Nom de l'image>.png "));

(Bonus) Exemple de code de test d'intégration

** 【scénario de test】 **

  1. Accédez à l'écran de connexion de l'application hoge
  2. Saisissez l'adresse e-mail et le mot de passe de l'utilisateur administrateur dans le formulaire
  3. Cliquez sur le bouton de connexion
  4. Cliquez sur le bouton Modifier pour l'article 1 dans la liste des articles
  5. Effacez le nom du message sur le formulaire
  6. Entrez le post 2 dans le nom du post
  7. Cliquez sur le bouton Actualiser
  8. Capture d'écran de l'écran une fois la mise à jour terminée

System.setProperty("webdriver.chrome.driver", "hoge/chromedriver");
WebDriver webDriver = new ChromeDriver();

webDriver.get("https://hoge.com/home");
webDriver.findElement(By.id("email")).sendKeys("[email protected]");
webDriver.findElement(By.id("password")).sendKeys("pass");
webDriver.findElement(By.id("loginButton")).click();
webDriver.navigate().to("https://hoge.com/edit?topicId=1");
webDriver.findElement(By.id("topicName")).clear();
webDriver.findElement(By.id("topicName")).sendKey("Message 2");
webDriver.findElement(By.id("updateButton")).click();
webDriver.manage().window().setPosition(new Point(-2000, 0));
Screenshot screenshot = new AShot()
    .shootingStrategy(ShootingStrategies.viewportPasting(100))
    .takeScreenshot(webDriver);
ImageIO.write(screenshot.getImage(), "PNG", new File("hoge/screenshot.png "));

webDriver.close();

en conclusion

Même si je recherche avec selenide, des informations sur Python au lieu de Java sortent, donc je les ai résumées. L'exemple de test d'intégration est un test imaginaire d'une application Web imaginaire. Merci beaucoup.

référence

Différence entre webdriver.get () et webdriver.navigate ()Aide-mémoire sur Selenium

Recommended Posts

[Java] Présentation rapide des tests d'intégration avec Selenide + Chrome Driver <Mis à jour en mai 2020>
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
[Mémo personnel] Comment interagir avec le générateur de nombres aléatoires en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Pilote Web Selenium avec répertoire de données utilisateur configuré pour planter en mode sans tête de Chrome
Je veux ForEach un tableau avec une expression Lambda en Java
Introduction aux algorithmes avec java-Search (recherche prioritaire en profondeur)
[Introduction à Java] Comment écrire un programme Java
Diviser une chaîne avec ". (Dot)" en Java
Introduction aux algorithmes avec java --Search (recherche de priorité de largeur)
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
Pour mon fils qui a commencé à étudier Java avec "Introduction à Java" dans une main
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
Deux façons de démarrer un thread en Java + @
Créer un CSR avec des informations étendues en Java
Introduction aux algorithmes avec java --Search (bit full search)
Comment afficher une page Web en Java
Code pour échapper aux chaînes JSON en Java
Essayez de créer un babillard en Java
Un examen rapide de Java appris en classe
J'ai essayé de casser le bloc avec java (1)
Comment enregistrer des fichiers avec l'extension spécifiée sous le répertoire spécifié en Java dans la liste
[Java] Introduction à Java
Introduction à Java
Comment appeler des fonctions en bloc avec la réflexion Java
Comment créer un environnement Java en seulement 3 secondes
Soumettre une tâche à AWS Batch avec Java (Eclipse)
J'ai essayé de créer une compétence Clova en Java
Comment créer un URI de données (base64) en Java
J'ai essayé de créer une fonction de connexion avec Java
[Comment insérer une vidéo dans un hameau avec Rails]
Implémentez rapidement singleton avec enum en Java
Sortie true avec if (a == 1 && a == 2 && a == 3) en Java (identifiant invisible)
Un examen rapide de Java appris en classe part3
Comment convertir un fichier en tableau d'octets en Java
Essayez de résoudre un problème FizzBuzz restreint en Java
[Java] Comment rompre une ligne avec StringBuilder
Lorsque vous souhaitez implémenter des tests de bibliothèque Java avec Spock en multi-module avec Gradle dans Android Studio 3