Как я могу запускать тесты пользовательского интерфейса с FlaUI на удаленной машине, но не в RDP?

У нас есть несколько тестов пользовательского интерфейса, которые используют FlaUI для автоматизации взаимодействия с пользовательским интерфейсом Windows.

Когда мы запускаем эти тесты на сервере сборки, они не взаимодействуют с пользовательским интерфейсом, если кто-то не подключен через RDP.

Ошибка, которую мы получаем из тестов, это просто Could not send mouse input. ErrorCode: 5

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

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

Есть ли способ заставить тесты выполняться таким образом, чтобы нам не приходилось их постоянно наблюдать?

3 ответа

Решение

Итак, я сделал эту работу. В основном я следовал приведенным здесь инструкциям, но также отключил запуск ServerManager при входе пользователя в TaskScheduler.

Политика компании также запрещает блокировку компьютеров, поэтому у нас есть сценарий powershell, который дважды нажимает numlock каждую минуту, чтобы предотвратить блокировку рабочего стола.

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

Если вы имитируете щелчок мыши, должен быть активный сеанс рабочего стола ( https://github.com/Roemer/FlaUI/wiki/FAQ).

У вас есть два варианта: протестировать без щелчков мышью (используйте шаблоны UIA) или обеспечить активный сеанс рабочего стола для агента сборки. Как указано в FAQ, убедитесь, что сессия не закрыта после отключения RDP, запустив tscon 1 /dest:console

Насколько я помню, вы можете вызывать события на элементах управления вместо того, чтобы имитировать их с помощью мыши. Это отличается, поскольку события вводятся. Это относится не только к адаптации TestStack.White, но и к большинству фреймворков роботов. Так что было и есть мотивация использования мыши?

Когда JQuery появился в Javascript, среди прочего он изменил парадигму ссылок на элементы. Но это также уменьшило объем кода, который вам нужно написать, создать служебный метод и изменить:

FindFirstChild(cf => cf.ByAutomationId("RedButton")).AsButton().Click();

к чему-то более короткому, например:

_.Find<Button>("RedButton").Click();

Случайно вы удаляете один слой абстракции, делаете их более удобочитаемыми, работаете быстрее, не зависят от разрешения экрана или dpi и т. Д.

Одна вещь, которую я бы попробовал, если предыдущая была неприменима, - запустить реализацию NCrunch Grid на виртуальной машине. Я имею в виду, теоретически, это могло бы работать.

Другие вопросы по тегам