🖥️ QA ProjectProjet QA

WPF Desktop Automation Framework Framework d'automatisation WPF Desktop

🗂 C# / .NET 8 📅 2025 🖥️ Windows WPF 🔗 FlaUI UIA3
FlaUIC#NUnit UIA3Page Object Model Zephyr ScaleGitHub Actions .NET 8
↗ GitHub

OverviewVue d'ensemble

A complete automation framework for Windows WPF desktop applications, built on FlaUI UIA3, NUnit and C# .NET 8. It covers the full quality lifecycle: test isolation via a TestBase with setup/teardown, automatic screenshot on failure, a custom [ZephyrTest] attribute for Zephyr Scale integration, and CI on GitHub Actions using a windows-latest runner. Un framework d'automatisation complet pour les applications desktop Windows WPF, construit sur FlaUI UIA3, NUnit et C# .NET 8. Il couvre le cycle qualité complet : isolation des tests via un TestBase avec setup/teardown, screenshot automatique sur échec, attribut personnalisé [ZephyrTest] pour l'intégration Zephyr Scale, et CI sur GitHub Actions avec runner windows-latest.

ArchitectureArchitecture

Tests (LoginSpec, …) describe scenarios, call pages, assertdécrivent les scénarios, appellent les pages, assertent
ZephyrTestBase auto-reporting to Zephyr Scalerapport automatique vers Zephyr Scale
TestBase app launch, teardown, screenshot on failurelancement app, teardown, screenshot sur échec
Pages (LoginPage, …) encapsulate elements and interactionsencapsulent les éléments et les interactions
FlaUI UIA3 + WPF App
src/ ├── Base/ │ ├── TestBase.cs // SetUp / TearDown / screenshot / WaitForElement │ └── ZephyrTestBase.cs // extends TestBase + auto Zephyr reporting ├── Pages/ │ └── LoginPage.cs // POM — AutomationId selectors, actions ├── Config/ │ └── TestConfig.cs // all env vars in one place ├── Helpers/ │ └── ZephyrHelper.cs // REST client + [ZephyrTest] attribute └── Tests/ └── LoginSpec.cs // [ZephyrTest("PROJ-T01")] annotations

Key featuresFonctionnalités clés

  • 🆔
    AutomationId selectorsSélecteurs AutomationId
    All element lookups use AutomationId — the most stable WPF selector, set by the dev team and immune to UI refactoring. Toutes les recherches d'éléments utilisent AutomationId — le sélecteur WPF le plus stable, défini par l'équipe dev et immunisé contre les refactorisations UI.
  • 📸
    Automatic screenshot on failureScreenshot automatique sur échec
    The TearDown checks the NUnit test status — if failed, it captures the screen and attaches it to the test report. Zero code in test methods. Le TearDown vérifie le statut NUnit — si échec, il capture l'écran et l'attache au rapport. Aucun code dans les méthodes de test.
  • 📋
    [ZephyrTest] attribute
    Annotate any test method with [ZephyrTest("PROJ-T01")]. After teardown, ZephyrTestBase reads this attribute and pushes the result automatically to Zephyr Scale. Annoter n'importe quelle méthode de test avec [ZephyrTest("PROJ-T01")]. Après le teardown, ZephyrTestBase lit cet attribut et pousse le résultat automatiquement vers Zephyr Scale.
  • ⏱️
    WaitForElement utilityUtilitaire WaitForElement
    A polling-based wait built into TestBase — retries every 200ms until the element appears or the timeout is reached. No raw Thread.Sleep anywhere. Une attente par polling intégrée dans TestBase — réessaie toutes les 200ms jusqu'à ce que l'élément apparaisse ou que le timeout soit atteint. Aucun Thread.Sleep brut.
  • 🖥️
    CI – windows-latest runner
    FlaUI requires a real Windows GUI session. The pipeline targets runs-on: windows-latest and uploads TRX results and screenshots as artifacts. FlaUI nécessite une vraie session GUI Windows. Le pipeline cible runs-on: windows-latest et uploade les résultats TRX et screenshots en artefacts.

CI / GitHub Actions

.github/workflows/flaui.yml
name: FlaUI Desktop Tests
on: [push]
jobs:
  desktop:
    runs-on: windows-latest   # REQUIRED – real Windows GUI session
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-dotnet@v4
        with: { dotnet-version: '8.0.x' }
      - name: Build app under test
        run: dotnet build src/MyWpfApp/MyWpfApp.csproj -c Release
      - name: Run FlaUI tests
        run: dotnet test tests/MyApp.UITests --logger trx
        env:
          WPFAUTOMATION_EXE_PATH: ${{ secrets.WPF_EXE_PATH }}
          ZEPHYR_TOKEN:           ${{ secrets.ZEPHYR_TOKEN }}
          ZEPHYR_PROJECT_KEY:     ${{ secrets.ZEPHYR_PROJECT_KEY }}
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: test-results
          path: |
            **/*.trx
            **/TestArtifacts/screenshots/

⚠️ Never use a Linux or Docker runner. FlaUI calls the Windows UI Automation COM API which requires a real desktop session — only windows-latest provides this on GitHub Actions. ⚠️ Ne jamais utiliser un runner Linux ou Docker. FlaUI appelle l'API COM UI Automation Windows qui nécessite une vraie session de bureau — seul windows-latest le fournit sur GitHub Actions.