4
votes

La méthode CopyFromScreen ne se termine jamais lorsqu'elle est exécutée par un agent Azure

Je fais une capture d'écran pendant l'exécution du test d'interface utilisateur par l'agent Azure.

Pour une raison quelconque, cette ligne ne se termine jamais, il n'y a pas d'erreur, aucune exception, elle attend indéfiniment:

    public byte[] TakeScreenshot()
    {
        byte[] buffer = new byte[recorderParams.SourceWidth * recorderParams.SourceHeight * 4];
        HooksSetup.AppendToFile("Taken screenshot 1");

        using (var bmp = new Bitmap(recorderParams.SourceWidth, recorderParams.SourceHeight))
        {
            using (var g = Graphics.FromImage(bmp))
            {
                g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Low;
                g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighSpeed;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
                // it gets stuck on a call below
                g.CopyFromScreen(Point.Empty, Point.Empty, new Size(recorderParams.SourceWidth, recorderParams.SourceHeight), CopyPixelOperation.SourceCopy);
                g.Flush();
                var bits = bmp.LockBits(new Rectangle(0, 0, recorderParams.SourceWidth, recorderParams.SourceHeight), ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
               Marshal.Copy(bits.Scan0, buffer, 0, buffer.Length);

                bmp.UnlockBits(bits);
            }
        }            
        return buffer;
    }


2 commentaires

Quel azure agent utilisez-vous?


Votre code s'exécute probablement dans une application qui n'a pas d '"écran": stackoverflow.com/questions/18870987/...


3 Réponses :


2
votes

Je pense que le problème est lié au fait que votre CopyFromScreen s'exécute dans un agent sans les mêmes capacités que vous avez sur votre bureau (connexion, résolution, différents navigateurs, autorisations d'administration, etc. .).

Microsoft dit dans son document:

Lors de l'exécution de tests automatisés dans le pipeline CI / CD, vous pouvez avoir besoin d'une configuration spéciale pour exécuter des tests d'interface utilisateur tels que des tests d'interface utilisateur Selenium, Appium ou codée.

Les considérations et les configurations sont expliquées dans cet article:

https://docs.microsoft.com/en-us/azure/devops/pipelines/test/ui-testing-considerations?view=azure-devops&tabs=mstest#visible-ui-mode

Si vous avez besoin de résoudre votre test, consultez cet article:

https://docs.microsoft.com/en-us/azure/devops/pipelines/test/ui-testing-considerations?view=azure-devops&tabs=mstest#visible-ui-mode


0 commentaires

1
votes

La seule raison derrière ces problèmes était que l'agent n'avait pas eu assez de temps pour se connecter et que la méthode Graphics.CopyFromScreen était bloquée. J'ai dû reporter la prise de captures d'écran et tout a commencé à fonctionner.


0 commentaires

0
votes

Vous pouvez consulter les laboratoires Azure DevOps ici pour exécuter des tests d'interface utilisateur dans le cadre du pipelines.


0 commentaires