Механизм автоматизации не может воспроизвести тест, потому что он не может взаимодействовать с рабочим столом ... но рабочий стол не заблокирован - PullRequest
0 голосов
/ 07 сентября 2018

Я уже два дня тяну волосы за этот.

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

Я использую Visual Studio 2017, хотя это не очень актуально. Последний сервер TFS, я думаю, что это также 2017 год. У меня есть два тестовых окна с установленным агентом оболочки Power Test, агентом GUI и контроллером тестирования. Один из них действительно старый и медленный, он отлично работает, кроме проблем с таймаутом. Более новая версия, на которую я пытаюсь перейти, работает под управлением Windows 10.

Окно тестирования Windows 10 зарегистрировано как пользователь домена, которого я использую для тестирования. Этот пользователь является локальным администратором и используется для установки всех агентов тестирования. Я запускаю UltraVNC для удаленного подключения к моим тестовым блокам, чтобы избежать проблем, которые RDP и TeamViewer вызывают для тестовых агентов.

Код будет работать отлично для 5 для шести итераций, но во время одного конкретного теста он всегда выдает ошибку на трех итерациях Итерации обычно происходят в один и тот же момент времени, но не всегда используют одни и те же данные.

Код, вызывающий ошибку:

Mouse.Click(save_tab);

где save_tab - это объект UITestControl, гиперссылка на веб-страницу.

Сработала ошибка:

Сообщение: ядро ​​автоматизации не может воспроизвести тест, потому что оно не может взаимодействовать с рабочим столом. Это может произойти, если компьютер, на котором выполняется тест, заблокирован или окно удаленного сеанса сведено к минимуму.

StackTrace: в Microsoft.VisualStudio.TestTools.UITesting.UITestLogGenerator.ExceptionRecorder (Exception исключение, логическое переопределение) в Microsoft.VisualStudio.TestTools.UITesting.Playback.ThrowIfScreenLockedOrRemoteSessionMinimized () в Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowException (Exception исключение, контекст IPlaybackContext) в Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowException (Exception исключение, String actionName, UITestControl uiControl) в Microsoft.VisualStudio.TestTools.UITesting.UITestActionExecutorCore.Click (UITestControl управление, кнопка мыши, кнопки-модификаторы, клавиши-модификаторы, точка относительная координата) в Microsoft.VisualStudio.TestTools.UITesting.Mouse.ClickImplementation (UITestControl управление, кнопка мыши, кнопки-модификаторы, клавиши-модификаторы, точка относительная координата) в Microsoft.VisualStudio.TestTools.UITesting.Mouse. <> C__DisplayClass32_0.b__0 () в Microsoft.VisualStudio.TestTools.UITesting.CodedUITestMethodInvoker.InvokeMethod [Т] (Func`1 функция, элемент управления UITestControl, логическое firePlaybackErrorEvent, Логическое действие) в Microsoft.VisualStudio.TestTools.UITesting.Mouse.Click (UITestControl управление, кнопка мыши, кнопки-модификаторы, клавиши-модификаторы, точка относительная координата) в Microsoft.VisualStudio.TestTools.UITesting.Mouse.Click (UITestControl контроль) * +1021 *

Я использовал VNC для наблюдения за тестовой машиной, которая вызвала эти ошибки. Заставка никогда не включается (она отключена), экран никогда не засыпает (это тоже отключено). Вместо этого весь тест зависает на некоторое время, прежде чем вызвать ошибки.

В части catch моего try-cache для этой ошибки я пытаюсь сделать снимок экрана, используя объект браузера для тестирования, и получаю эту ошибку:

Сообщение: параметр недействителен.

StackTrace: в System.Drawing.Graphics.GetHdc () в System.Drawing.Graphics.CopyFromScreen (Int32 sourceX, Int32 sourceY, Int32 destinationX, Int32 destinationY, Размер blockRegionSize, CopyPixelOperation copyPixelOperation) в System.Drawing.Graphics.CopyFromScreen (Int32 sourceX, Int32 sourceY, Int32 destinationX, Int32 destinationY, Размер blockRegionSize) в Microsoft.VisualStudio.TestTools.UITesting.UITestControl.CaptureImagePrivate ()в Microsoft.VisualStudio.TestTools.UITesting.UITestControl.b__173_0 () в Microsoft.VisualStudio.TestTools.UITesting.CodedUITestMethodInvoker.InvokeMethod [Т] (Func`1 функция, элемент управления UITestControl, логическое firePlaybackErrorEvent, Логическое действие) в Microsoft.VisualStudio.TestTools.UITesting.UITestControl.CaptureImage () в Testing.Base_CodedUITest.CaptureAndSaveImage (UITestControl doc, String FileName)

Затем я пытаюсь сделать снимок экрана, используя:

UITestControl.Desktop.CaptureImage();

, приводящий к этой ошибке:

Сообщение: параметр недействителен.

StackTrace: в System.Drawing.Bitmap..ctor (ширина Int32, высота Int32, Формат PixelFormat) в System.Drawing.Bitmap..ctor (ширина Int32, Int32 высота) в Microsoft.VisualStudio.TestTools.UITesting.UITestControl.CaptureImagePrivate () в Microsoft.VisualStudio.TestTools.UITesting.UITestControl.b__173_0 () в Microsoft.VisualStudio.TestTools.UITesting.CodedUITestMethodInvoker.InvokeMethod [Т] (Func`1 функция, элемент управления UITestControl, логическое firePlaybackErrorEvent, Логическое действие) в Microsoft.VisualStudio.TestTools.UITesting.UITestControl.CaptureImage () в Testing.Base_CodedUITest.CaptureAndSaveImage (UITestControl doc, String FileName)

Кажется очевидным, что тест по какой-то причине не может связаться с компьютером. Я не уверен, почему, хотя. Как только эта ошибка была обработана, тест продолжает успешно повторять один и тот же тест несколько раз подряд, прежде чем снова вызвать ту же ошибку.

У меня есть еще одна возможная подсказка по этому вопросу. При подключении к этому тестовому боксу, на котором работает UltraVNC, я периодически получаю сообщение о том, что соединение было прервано сервером (тестовый блок), но впоследствии оно всегда будет переподключаться. У меня нет этой проблемы с моей старой тестовой коробкой. Я пытался выполнить постоянный тест ping для этого более нового тестового блока во время одного из этих сбоев подключения UltraVNC и не видел какого-либо снижения скорости или потери пакетов. Соединение по всей нашей локальной сети составляет менее 1 мс.

Кто-нибудь знает, что происходит?

РЕДАКТИРОВАТЬ: По рекомендации я начал просматривать журнал событий. Одно событие показалось мне странным из Source = VSTTExecution.

(vstest.console.exe, PID 5356, поток 9) TestTypes {13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b} не может быть загружен потому что TIP не может быть создан по следующим причинам: Элемент с таким же ключом уже добавлен.

Source = VSTTController имел это, но не думаю, что это проблема, так как тесты на самом деле запущены. Я подозреваю, что установленное мной программное обеспечение контроллера и агента может быть устаревшим и больше не нужно.

Службе контроллера не удалось подключиться к Test Management Server. Не удалось загрузить файл или сборку 'Microsoft.VisualStudio.Threading, Версия = 15.6.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или одна из его зависимостей. Определение манифеста локализованной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

И был этот, Source = VSTTAgentProcess:

(QTDCAgent32.exe, PID 10416, поток 51) DataCollectionAgentProcess: Родительский процесс завершен. Код выхода родителя: -1

РЕДАКТИРОВАТЬ 2:

Когда я пытаюсь собрать больше данных об этом, я обнаружил, что эта ошибка происходит примерно в то же время, что и другие. Я думаю, что это просто более глубокая ошибка. К сожалению, это также более общий характер, поэтому найти что-либо в Google сложно. На данный момент я почти уверен, что существует проблема глубоко внутри ОС, IE или механизма тестирования. Я надеюсь найти обходной путь. Через месяц я смогу протестировать и еще один аппаратный компонент.

Эта вторая ошибка является исходной ошибкой, которую я пытаюсь сделать снимок экрана. Я пытаюсь нажать кнопку. Кнопка, которая очень видима и доступна, нет видимой ошибки. По какой-то причине механизм тестирования CodedUI, похоже, не распознает, что IE даже существует. Однако, как только эта ошибка исчезнет, ​​механизм тестирования сможет восстановить работу браузера и перейти к следующей странице теста.

уровень ошибки 2

Сообщение. При воспроизведении не удалось найти элемент управления с заданным поиском. свойства. Дополнительные детали: TechnologyName: «Web» ControlType: TagName: Document BODY Не удалось найти элемент управления, соответствующий условие поиска ControlType = 'Document'

StackTrace: в Microsoft.VisualStudio.TestTools.UITesting.Playback.MapControlNotFoundException (COMException например, контекст IPlaybackContext) в Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowComException (COMException innerException, контекст IPlaybackContext) в Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowException (Exception исключение, контекст IPlaybackContext) в Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowException (Exception исключение, String queryId) в Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FindFirstDescendant (String queryId, Int32 maxDepth, Int32 & timeLeft) в Microsoft.VisualStudio.TestTools.UITesting.SearchHelper.GetUITestControlRecursive (Boolean useCache, Boolean всегдаSearch, ISearchArgument searchArg, IList 1 windowTitles, Int32& timeLeft) at Microsoft.VisualStudio.TestTools.UITesting.SearchHelper.GetElement(Boolean useCache, ISearchArgument searchArg) at Microsoft.VisualStudio.TestTools.UITesting.SearchHelper.Search(ISearchArgument searchArg) at Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FindInternal() at Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FindControlIfNecessary() at Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlReadyPrivate(Int32 millisecondsTimeout, Boolean doLogging) at Microsoft.VisualStudio.TestTools.UITesting.UITestControl.<>c__DisplayClass186_0.b__0() at Microsoft.VisualStudio.TestTools.UITesting.CodedUITestMethodInvoker.InvokeMethod[T](Func 1 функция, элемент управления UITestControl, логическое firePlaybackErrorEvent, Логическое действие) в Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlReady (Int32 millisecondsTimeout) в Microsoft.VisualStudio.TestTools.UITesting.UITestControl.WaitForControlReady () в Testing.Base_CodedUITest.NavigateToUrl (String url) в C: \ agent_work \ 2 \ s \ VerizonOTM \ Other \ trc_UITesting \ Тесты \ UI \ Base_CodedUITest.cs: линия 348

уровень ошибки 3

Сообщение: ошибка HRESULT E_FAIL была возвращена после вызова COM составная часть.

StackTrace: в Microsoft.VisualStudio.TestTools.UITest.Playback.Engine.IScreenElement.FindAllDescendants (String bstrQueryId, Object & pvarResKeys, Int32 cResKeys, Int32 nMaxDepth) в Microsoft.VisualStudio.TestTools.UITest.Playback.ScreenElement.FindAllScreenElement (String queryId, глубина Int32, логическое значение singleQueryId, логическое значение throwException, Boolean resetSkipStep) в Microsoft.VisualStudio.TestTools.UITest.Playback.ScreenElement.FindScreenElement (String queryId, глубина Int32, логическое значение resetSkipStep) в Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FindFirstDescendant (String queryId, Int32 maxDepth, Int32 & timeLeft)

1 Ответ

0 голосов
/ 09 октября 2018

Я наконец решил эту проблему.

Тест, который продолжал вызывать эти ошибки, загружал файл. Если для создания файла и его представления на загрузку потребовалось слишком много времени, тест попытался продолжить и записать его как сбой. Однако из-за того, что он на самом деле не вышел из строя (это заняло много времени), браузер все еще был занят и недоступен для взаимодействия с CodedUI.

Во время процесса загрузки браузер не указал, что файл загружается. Похоже, он был доступен для использования на снимках экрана, кодированный пользовательский интерфейс определял его как доступный, DOM сказал, что он готов к работе. И не было никаких изменений страницы, которые я мог искать, потому что страница фактически не изменялась.

То, как мой тест был структурирован, я находился на одной странице своего сайта, я динамически создавал URL-адрес для загрузки файла и пытался перейти к этому URL-адресу. В результате может произойти одно из двух: либо произойдет ошибка файла, и сайт фактически перейдет по этому URL, либо файл будет представлен для загрузки.

Таким образом, мое решение закончилось тем, что я установил очень большой тайм-аут (10 минут) и просто продолжал циклически проверять, был ли URL-адрес все еще тем же, и был ли файл представлен для загрузки еще. Это позволило мне ждать даже тех файлов, которые загружались дольше. И как только браузер фактически закончил с запросом на загрузку, он снова стал доступен для CodedUI, и мои тесты смогли продолжить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...