param( [string]$BaseUrl = "http://127.0.0.1:4301" ) $ErrorActionPreference = "Stop" $artifactDir = Join-Path $PSScriptRoot "artifacts" New-Item -ItemType Directory -Path $artifactDir -Force | Out-Null $cases = @( @{ Id = "AUTO-001"; Route = "/dashboard" }, @{ Id = "AUTO-002"; Route = "/tickets" }, @{ Id = "AUTO-003"; Route = "/sla" }, @{ Id = "AUTO-004"; Route = "/knowledge" }, @{ Id = "AUTO-005"; Route = "/files" }, @{ Id = "AUTO-006"; Route = "/reviews" }, @{ Id = "AUTO-007"; Route = "/test-plan" } ) $results = @() foreach ($case in $cases) { $url = "$BaseUrl$($case.Route)" $response = Invoke-WebRequest -Uri $url -UseBasicParsing if ($response.StatusCode -ne 200) { throw "$($case.Id) $($case.Route) unexpected HTTP status: $($response.StatusCode)" } $safeName = $case.Route.TrimStart("/").Replace("/", "_") if ([string]::IsNullOrWhiteSpace($safeName)) { $safeName = "home" } $screenshot = Join-Path $artifactDir "$($case.Id)-$safeName.png" npx.cmd --yes playwright screenshot --viewport-size=1440,1000 $url $screenshot | Out-Host if (!(Test-Path $screenshot)) { throw "$($case.Id) $($case.Route) screenshot was not created" } $fileInfo = Get-Item $screenshot if ($fileInfo.Length -lt 10240) { throw "$($case.Id) $($case.Route) screenshot file is too small" } $results += [pscustomobject]@{ id = $case.Id route = $case.Route status = $response.StatusCode result = "PASS" screenshot = $screenshot } Write-Host "$($case.Id) $($case.Route) PASS" } $results | ConvertTo-Json -Depth 4 | Set-Content -Path (Join-Path $artifactDir "auto-test-result.json") -Encoding UTF8