UIAutomation и подключения к удаленному рабочему столу

У меня есть приложение, которое выполняет некоторую автоматизацию в произвольном приложении Windows. Я использовал Блокнот, чтобы проверить это.

Во время этой автоматизации я должен вызывать события из кода. В настоящее время я поддерживаю два типа событий, поскольку они кажутся наиболее распространенными, InvokePattern и ExpandCollapsePattern.

Я использую компьютер, к которому я могу удаленный рабочий стол, для проведения тестирования. Но это странно. Когда я подключаюсь к компьютеру через удаленный рабочий стол, приложение работает нормально. Когда я отключаюсь от компьютера, мой код перестает работать для ExpandCollapsePattern (InvokePattern отлично работает). Я получаю исключение InvalidOperationException.

В документации сказано, что это следует вызывать только в том случае, если узел помечен как LeafNode. Что отличает удаленный рабочий стол от того, что я получаю исключение InvalidOperationException?

Вот код, который мне сейчас нужно выполнить.

ExpandCollapseState state =
    patternMenu.Current.ExpandCollapseState;
if (state == ExpandCollapseState.Expanded)
    patternMenu.Collapse();
else if (state == ExpandCollapseState.PartiallyExpanded ||
         state == ExpandCollapseState.Collapsed)
    patternMenu.Expand();

patternMenu - это ExpandCollapsePattern, полученный от AutomationElement с помощью GetCurrentPattern.

Текущее значение ExpandCollapseState - «Свернуто», когда я распечатываю значение.

РЕДАКТИРОВАТЬ: Есть шанс, что я могу узнать, почему я получил отрицательный голос и почему это плохой вопрос? Я действительно смущен тем, что происходит, так как кажется, что он не работает, только когда удаленный рабочий стол закрыт. Если это действительно глупый вопрос, на который я должен знать ответ, я хотел бы получить объяснение, а затем проголосовать против.

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

Я использую «Клиент терминального сервера» в Ubuntu для входа в систему Windows. При нажатии кнопки закрытия в этом приложении рабочий стол блокируется?


person Jonathan Sternberg    schedule 28.03.2011    source источник


Ответы (1)


Вообще говоря, вы не можете запустить UI Automation или что-то подобное на неинтерактивном рабочем столе. Неинтерактивные рабочие столы имеют различные ограничения в отношении ввода: нет элемента с фокусом, ввод нельзя отправить, поэтому все, что от них зависит, не удастся.

Некоторые функции, например отправка сообщений Windows, будут работать нормально. Здесь может происходить то, что функциональность InvokePattern реализована в виде сообщений, поэтому все еще работает; но «Развернуть / Свернуть» можно было бы реализовать с точки зрения ввода, что не помогло бы.

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

(Обратите внимание, что если локальный рабочий стол Ubuntu блокируется, все должно быть в порядке и по-прежнему работать, пока клиент все еще работает. В этом случае удаленный клиент по-прежнему «интерактивен», поскольку у него есть работающий клиент, подключенный к нему, независимо от того, работает ли сам клиент на интерактивном или неинтерактивном рабочем столе - концепции могут даже не применяться к клиенту, работающему в другой ОС!)

person BrendanMcK    schedule 29.03.2011
comment
Я думал, что он работает нормально, когда рабочий стол заблокировался, но я ошибался. Последний результат теста начал давать сбой, как только рабочий стол заблокировался. Я начну настраивать виртуальную машину для запуска тестов вместо использования удаленного рабочего стола. Спасибо. - person Jonathan Sternberg; 29.03.2011