[JAVA] Comment tester l'écran de téléchargement de fichiers avec Spring + Selenium

Lorsque j'écris un code de test avec du sélénium pour l'écran de téléchargement créé avec Springboot, La boîte de dialogue de sélection de fichier n'a pas pu être utilisée et le test n'a pas pu être effectué, la méthode pour le résoudre est donc décrite ci-dessous.

Méthode de réalisation

Puisqu'il est difficile d'utiliser <input type = 'file'> avec du sélénium Le fichier est automatiquement défini pour l'attribut de fichier côté serveur (côté Java).

Point de mise en œuvre

  1. Ajoutez des points d'extension pour les paramètres reçus de l'écran dans la classe ControllerAdviceCustom
  2. Ajoutez un processus pour créer une classe MockFileEditor pour générer et définir un MockMultipartFile
  3. Définissez pour transmettre la classe MockFileEditor lorsque le type est MultipartFile pour le point d'extension de la classe ControllerAdviceCustom lors de l'exécution du test.

Vous n'avez plus à vous soucier du fonctionnement de <input type = 'file'> côté sélénium!

ControllerAdviceCustom.java


@ControllerAdvice
public class ControllerAdviceCustom {
    @InitBinder
    public void initBinderMock(WebDataBinder dataBinder) {
        //Point d'extension simulé (l'implémentation utilise MockUp du côté test)
    }

    //Omis ci-dessous
}

MockFileEditor.java


public class MockFileEditor extends PropertyEditorSupport {
    @Override
    public void setValue(Object obj) {
        //Générer et refléter MockMultipartFile pour le paramètre (Multipart)
        String textFile = "dummy text file";
        MultipartFile mockFile = new MockMultipartFile("file", textFile.getBytes());
        super.setValue(mockFile);
    }
}

SeleniumTest.java


@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class SeleniumTest {

    @Before
    public void setup() {
        //Implémentation de points d'extension simulés pour la classe ControllerAdviceCustom
        new MockUp<ControllerAdviceCustom>() {
            @Mock
            @InitBinder
            public void initBinderMock(WebDataBinder dataBinder) {
                //Défini pour transmettre la classe MockFileEditor si le type est MultipartFile
                dataBinder.registerCustomEditor(MultipartFile.class, new MockFileEditor());
            }
        };
    }

    @Test
Écrans de test public void, y compris les téléchargements de fichiers() {
        //Omis ci-dessous
    }
}

Supplément

Il semble qu'il soit possible d'utiliser <input type = 'file'> même avec du sélénium. Cependant, il est douteux que cette méthode soit possible pour tous les navigateurs, et il est possible qu'elle ne soit pas utilisable en raison de la mise à niveau de la version du navigateur (mesures de sécurité), j'ai donc choisi cette méthode de mise en œuvre.

Recommended Posts

Comment tester l'écran de téléchargement de fichiers avec Spring + Selenium
Comment se lier avec un fichier de propriétés dans Spring Boot
Comment utiliser Lombok au printemps
Comment faire un test unitaire de Spring AOP
Comment inclure Spring Tool dans Eclipse 4.6.3?
Comment ajouter un fichier jar dans ScalaIDE
Comment charger un fichier de téléchargement Spring et afficher son contenu
Comment diviser un fichier de message Spring Boot
Comment réaliser le téléchargement de fichiers avec Feign
Comment réaliser un téléchargement de fichiers volumineux avec Rest Template of Spring
Comment gérer l'événement où Committee :: InvalidRequest se produit en comité pendant le test de téléchargement de fichier Rspec
Résumé de la sélection des éléments dans Selenium
JUnit 5: Comment écrire des cas de test dans enum
Comment ajouter un chemin de classe dans Spring Boot
Ajoutez des capacités d'enregistrement d'écran aux cas de test Selenium
Comment définir plusieurs orm.xml dans Spring4, JPA2.1
[Spring Boot] Comment se référer au fichier de propriétés
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
Comment envoyer une valeur en HTML sans transition d'écran
Comment écrire un test unitaire pour Spring Boot 2
Comment créer un projet Spring Boot dans IntelliJ
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Comment convertir un fichier en tableau d'octets en Java
Comment déboguer le fichier jar généré avec Eclipse
Comment utiliser le référentiel de jobs en mémoire avec Spring Batch
Téléchargement de fichiers avec Spring Boot
Comment lire votre propre fichier YAML (*****. Yml) en Java
Comment modifier la valeur de paramètre de application.properties au moment du démarrage dans Spring Boot
Comment appeler et utiliser l'API en Java (Spring Boot)
[Rails 5] lien japanMap Comment écrire des paramètres dans le fichier js.erb
Configurer le résolveur en plusieurs parties pour permettre à Spring de télécharger des fichiers
Comment contrôler les transactions dans Spring Boot sans utiliser @Transactional
Comment trouver May'n dans XPath
Comment masquer la barre de défilement dans WebView
Comment exécuter JUnit dans Eclipse
Comment itérer indéfiniment en Ruby
Remarques sur l'utilisation de Spring Data JDBC
Comment exécuter Ant dans Gradle
Écrire du code de test avec Spring Boot
[Rails] Comment empêcher la transition d'écran
Comment créer un fichier jar sans dépendances dans Maven
Comment maîtriser la programmation en 3 mois
[Comment installer Spring Data Jpa]
Comment configurer Spring Boot + PostgreSQL
Comment apprendre JAVA en 7 jours
Comment convertir un fichier erb en haml
Comment obtenir des paramètres dans Spark
Comment faire fonctionner automatiquement un écran créé en Java sous Windows
Comment installer Bootstrap dans Ruby
Comment définir et utiliser un profil avec une configuration basée sur des annotations dans le framework Spring
Enregistrer la sortie dans un fichier en Java
Comment utiliser InjectorHolder dans OpenAM
Comment créer un écran de démarrage
Comment utiliser ModelMapper (Spring boot)
Comment installer jQuery dans Rails 6