Symptom
Et script, der kan udføres korrekt i deltagertilstand, kører ikke uden opsyn.
Det mislykkes normalt med en meddelelse som f.eks.: "Der opstod et problem med at køre handlingen 'Klik'. Der kunne ikke klikkes på linket på websiden."
Årsag
Typiske fejl i automatiserede kørsler skyldes et af følgende:
-
Scriptet er ikke testet i deltagertilstand, før der skiftes til automatiseret
-
Anden konfiguration, der bruges af den automatiserede session
-
En anden Windows-konto, der bruges af automatiseret kørsel end den, der bruges til at oprette flowet
-
Skærmopløsning (se , hvordan du ændrer skærmopløsningen)
-
Browserkonfiguration
-
Bruger
-
Blokering af pop op-vindue
-
Udvidelser (mangler/er ikke aktiveret)
-
-
-
Skærme indlæses ikke helt (manglende forsinkelser)
-
En UAC-prompt, der blokerer ui automation, når sessionen starter
Løsning
Da der kan være forskellige årsager, beskriver løsningen nedenfor, hvordan du tilføjer skærmbilleder før og efter en mislykket handling for at få visuel feedback. Hvis du ser omhyggeligt på skærmbillederne efter en automatiseret scriptfejl, kan det hjælpe med at finde en af årsagerne, der er angivet ovenfor. Den beskriver også, hvordan du sammenligner skærmopløsning og skaleringsindstillinger.
Hvis du allerede har skærmbilleder i dit flow, og de ikke kan udføres, har du muligvis en dialogboks med kontrol af brugerkonti, der blokerer udførelsen af dit flow. Log på den computer, der genskaber problemet med den konto, du bruger til at udføre flowet, og se, om du har en sådan blokeringsdialogboks. Hvis du gør det, skal du ændre din startrutine for at forhindre, at dette sker.
Tilføjelse af skærmbilleder for at foretage fejlfinding
Start med at logge på den computer, der genskaber problemet med den konto, du bruger i din forbindelse. Kontrollér, at der ikke er nogen UAC-prompt, der kan blokere ui-automatisering.
Hvis der ikke er noget, der blokerer ui automation, kan du tage et skærmbillede før og efter et mislykket trin i automatiseret tilstand for at få visuel feedback.
Det mislykkede trin bør fortsætte ved en fejl, så der kan tages et skærmbillede efter fejlen.
1– Se efter handlingen "Tag skærmbillede"
2– Træk og slip handlingen "Tag skærmbillede" i scriptsiden
3– Rediger handlingen, brug "Fil" i stedet for Udklipsholder og "før" i placeringen af filnavnet
4– Kopiér/indsæt derefter, og rediger filnavnet på skærmbilledet med efter i
5- Omgiv det mislykkede trin med skærmbillederne
6– Skift funktionsmåden ved fejl for det mislykkede trin
6a– Rediger trinnet, og klik på "vedfejl" nederst
6b– Indstil flowet til "Fortsæt flowkørsel" og "Gå til næste handling"
7– Gem, kør lokalt for at teste, at skærmbilleder er produceret, og genstart en automatiseret kørsel.
8– Kontrollér de automatiske skærmbilledefiler.
Kontrollér skærmopløsning og skaleringsforskelle
Hvis du vil sammenligne opløsningsindstillingerne mellem deltog i og automatiserede kørselshandlinger, skal du tilføje handlingerne nedenfor i dit script, før du kører i begge tilstande:
-
Kopiér/indsæt nedenstående kodestykke i en PAD-designer: Dette opretter de nødvendige trin til at registrere opløsningsindstillingerne og få dem vist i en tidsstemplet fil.
DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime
Text.ConvertDateTimeToText.FromCustomDateTime DateTime: CurrentDateTime CustomFormat: $'''yyyy_MM_dd_hh_mm_ss''' Result=> FormattedDateTime
Workstation.GetScreenResolution MonitorNumber: 1 MonitorWidth=> MonitorWidth MonitorHeight=> MonitorHeight MonitorBitCount=> MonitorBitCount MonitorFrequency=> MonitorFrequency
@@copilotGeneratedAction: 'False'
Scripting.RunPowershellScript.RunPowershellScript Script: $'''Add-Type @\'
using System;
using System.Runtime.InteropServices;
using System.Drawing;
public class DPI {
[DllImport(\"gdi32.dll\")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
public enum DeviceCap {
VERTRES = 10,
DESKTOPVERTRES = 117
}
public static float scaling() {
Graphics g = Graphics.FromHwnd(IntPtr.Zero);
IntPtr desktop = g.GetHdc();
int LogicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.VERTRES);
int PhysicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES);
return (float)PhysicalScreenHeight / (float)LogicalScreenHeight;
}
}
\'@ -ReferencedAssemblies \'System.Drawing.dll\' -ErrorAction Stop
Return [DPI]::scaling() * 100''' ScriptOutput=> MonitorScaleOutput
File.WriteText File: $'''c:\\test\\resolution_%FormattedDateTime%.txt''' TextToWrite: $'''height: %MonitorHeight% width: %MonitorWidth% frequency: %MonitorFrequency% bitCount: %MonitorBitCount% scale: %MonitorScaleOutput%''' AppendNewLine: True IfFileExists: File.IfFileExists.Overwrite Encoding: File.FileEncoding.Unicode
-
Gennemse stien til outputfilen fra den seneste handling, kontrollér, at den lokale kørsel er fuldført, og gem.
-
Kør scriptet i både overvågede og automatiserede tilstande, og kontrollér derefter, om opløsningen og skaleringsoutputtet har de samme værdier i begge tilstande.
Bemærk!
Som nævnt ovenfor har du muligvis en dialogboks til kontrol af brugerkonti, der blokerer udførelsen af dit flow, hvis selve skærmbilledehandlingen mislykkes. Log på den computer, der genskaber problemet med den konto, du bruger til at udføre flowet, og se, om du har en sådan blokeringsdialogboks. Hvis du gør det, skal du ændre din startrutine for at forhindre, at dette sker.
Hvis scriptet har andre trin, kan det mislykkes efter, da funktionsmåden blev ændret for ikke at udløse fejl, så vi kan tage et skærmbillede. Så fejlene efter det andet skærmbillede skal ignoreres.
Når problemet er forstået og løst, kan du gendanne den oprindelige funktionsmåde for dit flow for at udløse fejl.