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.
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.
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("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.
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.
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.
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.