UIAutomation и подключения к удаленному рабочему столу - PullRequest
5 голосов
/ 29 марта 2011

У меня есть приложение, которое выполняет некоторую автоматизацию в произвольном приложении 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.Это приложение, которое я запускаю после того, как удаленно подключаюсь к компьютеру.Это потому, что я блокирую рабочий стол?

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

1 Ответ

2 голосов
/ 29 марта 2011

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

Некоторые функции, такие как отправка сообщений Windows, будут работать нормально.Здесь может произойти то, что функциональность InvokePattern реализована под оболочкой в ​​виде сообщений, поэтому все еще работает;но Expand / Collapse может быть реализован с точки зрения ввода, что приведет к сбою.

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

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

...