Метод CopyFromScreen никогда не завершается, когда выполняется агентом Azure - PullRequest
4 голосов
/ 10 мая 2019

Я делаю снимок экрана во время выполнения теста пользовательского интерфейса агентом Azure.По какой-то причине эта строка никогда не завершается, ошибок нет, нет исключений, она просто ждет ее бесконечно:

g.CopyFromScreen(Point.Empty, Point.Empty, new Size(recorderParams.SourceWidth, recorderParams.SourceHeight), CopyPixelOperation.SourceCopy);

этот код запускается в отдельном потоке:

   captureFrameThread = new Thread(TakeScreenshot)
            {
                IsBackground = false
            };
   captureFrameThread.Start();

и полные методы выглядят так:

    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 stucked 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;
    }

На моей локальной машине этот код всегда работает безупречно.Почему это так?Какая у меня альтернатива?

Ответы [ 3 ]

2 голосов
/ 14 мая 2019

Я думаю, что проблема связана с тем, что ваш CopyFromScreen работает внутри агента без тех же возможностей, которые есть у вас на рабочем столе (вход в систему, разрешение, другие браузеры, права администратора и т. Д.).

Microsoft говорит в своем документе:

When running automated tests in the CI/CD pipeline, you may need a special configuration in order to run UI tests such as Selenium, Appium or Coded UI tests.

В этой статье объясняются соображения и конфигурации:

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

Есливам нужно устранить неполадки теста, проверьте эту статью:

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

1 голос
/ 15 мая 2019

Единственная причина этих проблем заключалась в том, что агент не получил достаточно времени для входа в систему, а метод Graphics.CopyFromScreen был заблокирован. Мне пришлось отложить снимки экрана, и все заработало.

0 голосов
/ 16 мая 2019

Здесь вы можете обратиться к Лабораториям DevOps Azure , чтобы выполнить тесты пользовательского интерфейса как часть конвейеров.

...