[JAVA] Développement ATDD sur iOS (édition de base)

C'est une continuation de ce qui suit.

Architecture du système

Comme mentionné ci-dessus, il est réimprimé. _Cucumber Workflow (1).jpg

Structure du projet

├─ src
   ├─ test
      ├─ java
      |  └─ jp.co.hoge.Project.E2ETest
      |     ├─ pageobject
      |     └─ steps
      |     └─ utils
      └─ resources
         └─ jp.co.hoge.Project.E2ETest
            └─ feature files

PageObject Un PageObject est un objet qui représente la relation entre une page et un utilisateur (quel que soit le test). Les conditions suivantes sont remplies.

Exemple de PageObject

PageObject signifie essentiellement quelque chose qui répond aux exigences ci-dessus, mais pour des raisons de développement, nous ne l'avons pas rendu complètement conforme. Par exemple, cette fois, nous avons préparé un PageObject appelé BasePage comme classe de base de PageObject. Fondamentalement, cette classe est héritée lors de la création d'un nouvel objet PageObject. Cette BasePage implémente une méthode publique pour vérifier l'existence d'éléments, et bien que la méthode dans le principe ci-dessus viole le retour de PageObjects, j'ai décidé d'implémenter la vérification d'existence pour chaque PageObject pour plus de commodité.

///Exemple de PageObject
public class SearchPage extends BasePage {
    public SearchPage(IOSDriver driver) {
        super(driver);
    }

    @iOSXCUITFindBy(xpath = "//*[@name=\"Chercher\"]")
    private IOSElement navigationBar;

    @iOSXCUITFindBy(xpath = "//*[@name=\"Trouver un artiste\"]")
    private IOSElement textSearchField;

    @iOSXCUITFindBy(accessibility = "Classement")
    private IOSElement ranking;

    ...

    public SearchResultPage searchText(String keyword) {
        textSearchField.setValue(keyword);
        driver.hideKeyboard();
        return new SearchResultPage(driver);
    }

    public SearchSuggestPage showSuggest(String keyword) {
        textSearchField.setValue(keyword);
        return new SearchSuggestPage(driver);
    }

    public Boolean existsNavigationBar() {
        return checkVisibilityOfElement(navigationBar);
    }

    ...

Feature Le scénario est écrit en texte brut. Voici une règle de syntaxe appelée Gherkin. Sample

Feature:Afficher la page à rechercher

  Scenario:Appuyez sur l'onglet de recherche
Lancez l'application donnée et passez à l'écran de recherche
Puis sur l'écran de recherche, «Rechercher» s'affiche dans l'en-tête

Steps Keyword Vous pouvez utiliser les mots clés ** Étant donné **, ** Quand **, ** Alors **, ** Et ** ou ** Mais ** pour chaque étape. Cependant, ceux-ci ne sont pas pris en compte lors de la recherche de définitions d'étapes.

Steps Argument Vous pouvez transmettre des arguments à la définition d'étape. Cependant, il existe des restrictions sur les types qui peuvent être utilisés. https://cucumber.io/docs/cucumber/cucumber-expressions/#parameter-types

// example feature
Scenario:Afficher le panneau de commande lors de la lecture de musique
Appuyez sur l'onglet Recherche donnée
Et de la recherche de texte"Kenshi YONEZU"Entrer
    ...
// example steps definision
@Given("À partir de la recherche de texte{string}Entrer")
public void Afficher Genshi Yonezu à partir de la recherche de texte(String keyword) {
    searchResultPage = searchPage.searchText(keyword);
}

Skip Test S'il y a une fonctionnalité que vous ne souhaitez pas exécuter le test sur CI, comme une étape au milieu du développement, vous pouvez ignorer l'exécution du test en ajoutant l'annotation ignorer.

@ignore
Feature:Affichage de la publicité

Recommended Posts

Développement ATDD sur iOS (édition de base)
Développement d'applications iOS: application Timer (2. affichage de la minuterie)
Développement d'applications ROS sur Android
[IOS] canOpenURL devient faux dans iOS14
Développement d'applications iOS: application Timer (résumé)
Mémorandum de base Ruby on Rails
Connaissance de base de Ruby on Rails
Journal complet de développement d'applications IOS pour l'auto-apprentissage
Feuille de route des compétences de développement d'applications iOS (introduction)
Utilisation du réseau local avec iOS 14
Développement d'applications iOS: application Timer (4. Implémentation du compte à rebours)
Développement d'applications iOS: application Timer (1. réglage de l'heure de la minuterie)
Créer un environnement de développement Unity sur docker
Développement d'applications iOS: application Timer (10. Créer une animation)
Installer l'environnement de développement Java sur Mac