Как я могу запускать тесты пользовательского интерфейса с 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 на виртуальной машине. Я имею в виду, теоретически, это могло бы работать.