Integrering av testmotor och Playwright (inaktuell)

Anmärkning

Testmotorn är inaktuell och tas bort i en framtida version. Använd Power Platform Playwright-exempel för testautomatiseringsfunktioner i Power Platform och Dynamics 365 tjänster.

Översikt

Power Apps Test Engine använder Playwright som kärnteknik för webbläsarautomatisering. Den här integreringen ger Test Engine kraftfulla, tillförlitliga testfunktioner över webbläsare samtidigt som den lägger till flera abstraktionslager för att förenkla testskapandet för Power Platform-appar.

Hur Test Engine förbättrar Playwright

Medan Playwright erbjuder utmärkta funktioner för webbläsarautomatisering, utökar Test Engine dessa funktioner specifikt för Power Platform:

Förbättring av Test Engine Beskrivning
Abstraktioner på appnivå Test Engine fungerar med objekt på appnivå i stället för DOM-element, vilket gör testerna mer motståndskraftiga mot ändringar i användargränssnittet
Power Fx-integrering Test Engine lägger till stöd för Power Fx vilket möjliggör en lågkodsmetod för testredigering
Inbyggd autentisering Fördefinierade autentiseringsmekanismer hanterar scenarier för Microsoft Entra och villkorlig åtkomst
Dataverse-integration Direkt integration med Dataverse möjliggör omfattande testning från början till slut
Specialiserade leverantörer Optimerade leverantörer för arbetsyteappar och modellbaserade appar

Tekniskt genomförande

Följande avsnitt beskriver hur Test Engine bygger vidare på Playwright grund för webbläsarautomatisering och integrerar den med Power Platform-specifika abstraktioner, vilket möjliggör robust och lättunderhållen testautomatisering.

Grund för webbläsarautomatisering

Test Engine använder Playwright kärnfunktioner för konsekvent webbläsarautomatisering:

  • stöd för Cross-browser för Chrome, Firefox och Microsoft Edge
  • Pålitliga väntemekanismer som automatiskt väntar på att elementen ska vara klara
  • Avlyssning av nätverksförfrågningar för simulering av API-svar
  • Spårnings- och felsökningsverktyg för att diagnostisera testfel

Test Engine arkitektoniska integration

  • Providerlager: Providerlagret i Test Engine samverkar direkt med Playwright API:er för att styra webbläsarens beteende
  • Objektmodell: I stället för att arbeta med råa DOM-element mappar Test Engine till appspecifika objektmodeller
  • Power Fx Lager: Teststeg som skrivs in Power Fx tolkas och körs via providerlagret

Viktiga tekniska funktioner

I följande avsnitt beskrivs viktiga tekniska funktioner som Test Engine lägger till ovanpå Playwright, inklusive appspecifika väljare, hantering av webbläsarkontext och direkt åtkomst till Playwright-funktioner för avancerade scenarier.

Appspecifika väljare

Test Engine använder appspecifika väljare i stället för CSS- eller XPath-väljare:

# Test Engine (using app-level selectors)
- testSteps: |
    Select(Button1)

# Equivalent in raw Playwright (using DOM selectors)
    Select(Button1)
# page.locator('div[data-control-name="Button1"]').click();

Kontexthantering i webbläsaren

Test Engine hanterar webbläsarkontexter för att stödja olika autentiseringsscenarier:

# Test Engine handles browser context automatically
pac test run `
   --provider canvas `
   --test-plan-file testplan.te.yaml `
   --tenant $tenantId `
   --environment-id $environmentId

Direkta Playwright-funktioner

Även om Test Engine abstraherar många Playwright-interaktioner, finns det situationer där direkt åtkomst till Playwright-funktioner kan vara värdefull. Test Engine tillhandahåller flera förhandsgranskningsfunktioner som möjliggör direkt interaktion med Playwright inifrån dina Power Fx teststeg.

Använda Playwright-funktioner i Test Engine

Test Engine innehåller följande förhandsgranskningsfunktioner som gör att du kan använda Playwright-funktioner för val av element:

Function Beskrivning Example
Preview.PlaywrightAction Utföra en åtgärd på element med hjälp av CSS- eller DOM-väljare Preview.PlaywrightAction("//button", "click")
Se Vanliga åtgärdsoperationer i Playwright
Preview.PlaywrightActionValue Utföra en åtgärd som kräver en värdeparameter Preview.PlaywrightActionValue("//input[@data-id='1']", "fill", "Hello")
Se Vanliga värdeoperationer i Playwright
Preview.PlaywrightScript Köra ett anpassat C#-skript som samverkar med Playwright Preview.PlaywrightScript("sample.csx")
Se Avancerat: Anpassade skript för Playwright
Preview.Pause Pausa testkörningen och visa Playwright Inspector Preview.Pause()

Anmärkning

Om du vill använda dessa förhandsgranskningsfunktioner måste du lägga till förhandsversionsfunktionerna i listan över tillåtna i avsnittet testinställningar.

Vanliga åtgärdsoperationer i Playwright

Följande åtgärder kan utföras med Preview.PlaywrightAction:

Action Beskrivning Example
click Markering av ett element med hjälp av klickhändelse Preview.PlaywrightAction("//button[@id='submit']", "click")
exists Kontrollera om det finns ett element Preview.PlaywrightAction("//div[@class='error-message']", "exists")
wait Vänta på att ett element ska vara tillgängligt Preview.PlaywrightAction("//table[@data-loading='false']", "wait")

Vanliga värdeoperationer för Playwright-åtgärder

Följande åtgärder kan utföras med Preview.PlaywrightActionValue:

Action Beskrivning Example
fill Fylla ett formulärfält med text Preview.PlaywrightActionValue("//input[@name='search']", "fill", "Product name")
select Välj ett alternativ från en urvalslista Preview.PlaywrightActionValue("//select", "select", "Option2")
setAttribute Ange ett attribut för ett element Preview.PlaywrightActionValue("//div", "setAttribute", "data-custom='value'")

När ska man använda direkta Playwright-funktioner?

Abstraktioner på appnivå är att föredra, men direkta Playwright-funktioner är användbara i följande scenarier:

  • Komplexa gränssnittsinteraktioner som inte omfattas av standardfunktioner för Test Engine
  • Komponenter från tredje part i Power Platform-program som kräver särskild hantering
  • Felsöka komplexa testscenarier där mer kontroll behövs
  • Avancerad validering av elementtillstånd eller egenskaper

Exempel: Kombinerad metod

Det här exemplet visar hur du kombinerar abstraktioner på appnivå med direkta Playwright-åtgärder:

testSteps: |
  # Use app-level abstraction for Power Apps control
  Select(SubmitButton);
  
  # Use direct Playwright action for a third-party component
  Preview.PlaywrightAction("//div[@class='custom-calendar']//button[@data-day='15']", "click");
  
  # Wait for a specific condition using Playwright
  Preview.PlaywrightAction("//div[@data-status='complete']", "wait");
  
  # Resume using app-level abstractions
  Assert(Label1.Text = "Submission Complete");

Avancerat: Anpassade skript för Playwright

För mycket specialiserade scenarier kan du skapa anpassade Playwright-skript:

  1. Skapa en .csx fil med din anpassade Playwright-logik
  2. Referera till nödvändiga Playwright-sammansättningar
  3. Implementera den klasstruktur som krävs
  4. Anropa skriptet från teststegen
// sample.csx
#r "Microsoft.Playwright.dll"
#r "Microsoft.Extensions.Logging.dll"
using Microsoft.Playwright;
using Microsoft.Extensions.Logging;

public class PlaywrightScript {
    public static void Run(IBrowserContext context, ILogger logger) {
        Execute(context, logger).Wait();
    }

    public static async Task Execute(IBrowserContext context, ILogger logger) {
        var page = context.Pages.First();
        // Custom Playwright logic here
    }
}

Anmärkning

Preview.PlaywrightScript implementeras endast för felsökningsversioner av Test Engine som skapats från källan, inte i det släppta pac test run verktyget.

Integration med utvecklingsprocessen

I följande avsnitt beskrivs hur Test Engine och Playwright kan användas i både lokala utvecklings- och CI/CD-miljöer, med stöd för en mängd olika arbetsflöden från interaktiv felsökning till automatiserad pipelinekörning.

Lokal utveckling

För lokal utveckling tillhandahåller Test Engine en komplett miljö:

  • Körning av lokal webbläsare med synlighet för användargränssnittet
  • Steg-för-steg-testkörning
  • Detaljerade loggar och diagnostik

CI/CD-integrering

I CI/CD-miljöer kan Test Engine köra Playwright i huvudlöst läge:

# Example Azure DevOps pipeline step
- task: PowerShell@2
  displayName: 'Run Test Engine Tests'
  inputs:
    script: |
      pac test run `
        --provider canvas `
        --test-plan-file "$(Build.SourcesDirectory)/tests/testplan.te.yaml" `
        --tenant "$(TenantId)" `
        --environment-id "$(EnvironmentId)"

Metodtips

När du arbetar med Test Engine Playwright-integration:

  • Fokusera på objekt på appnivå i stället för DOM-element
  • Använd Power Fx-funktioner för komplex logik i stället för rå JavaScript
  • Dra nytta av inbyggda autentiseringsmekanismer
  • Reservera direkta Playwright-funktioner för scenarier där abstraktioner på appnivå är otillräckliga
  • Granska genererade tester för att optimera för läsbarhet och underhåll