6
votes

Comment puis-je exécuter des tests d'interface utilisateur avec FlaUI sur une machine distante sans RDP?

Nous avons quelques tests d'interface utilisateur qui utilisent FlaUI pour automatiser l'interaction avec l'interface utilisateur de Windows.

Lorsque nous exécutons ces tests sur le serveur de compilation, ils n'interagissent pas avec l'interface utilisateur à moins que quelqu'un ne soit connecté via RDP.

L'erreur que nous obtenons des tests est juste un Impossible d'envoyer l'entrée de la souris. ErrorCode: 5

La machine est configurée pour se connecter à un utilisateur au démarrage et si nous nous connectons à une session RDP en tant qu'utilisateur et «regardons» les tests, ils s'exécutent correctement et peuvent interagir avec le bureau. Dès que nous déconnectons cet utilisateur, il cesse de pouvoir interagir à nouveau.

Nous exécutons les tests via les nœuds de grille NCrunch, en utilisant l'application console NCrunch grid node, qui démarre lors de la connexion (c'est-à-dire qu'il ne fonctionne pas en tant que service afin qu'il puisse interagir avec le bureau).

Existe-t-il un moyen de faire exécuter les tests de manière à ce que nous n'ayons pas à les surveiller en permanence?


7 commentaires

s'arrêtent-ils de s'exécuter après la fermeture d'une session RDP ou ne commencent-ils même pas à s'exécuter lorsqu'aucune session RDP n'est ouverte?


J'ai fait des progrès à ce sujet et je les ai capables de fonctionner tant qu'aucune session RDP n'a été démarrée, et ils s'arrêtent après qu'une session RDP est connectée puis déconnectée.


Que diriez-vous de ce Guide d'exécution à distance ?


Y a-t-il des moniteurs physiques connectés à la machine distante?


@JaredBeach non.


@SamHolder, je pense que la chose la plus simple à faire serait d'obtenir un moniteur physique ou même un faux moniteur branché sur la machine et le laisser toujours connecté. Est-ce une instance Azure ou quelque chose?


c'est une VM assise dans une pièce pleine de racks de serveurs, et la plupart du temps, le problème est résolu maintenant


3 Réponses :


3
votes

Si vous simulez un clic de souris, il doit y avoir une session de bureau active ( https://github.com/Roemer/FlaUI/wiki/FAQ#how-can-i-run-flaui-tests-on-a-build -serveur ).

Vous avez deux options: tester sans clics de souris (utiliser des modèles UIA) ou garantir une session de bureau active pour l'agent de construction. Comme indiqué dans la FAQ, assurez-vous que la session n'est pas fermée après la déconnexion de RDP en exécutant tscon 1 / dest: console


3 commentaires

Je ne connais pas la commande tscon 1 / dest: console . Si je l'exécute, déconnectez la session RDP, cela garantira-t-il que la machine ne se verrouille pas?


c'est exactement ce qu'il fait, oui


C'est à peu près la bonne réponse. De nombreuses interactions d'interface utilisateur nécessitent une session de bureau. La commande mentionnée maintient la session de bureau ouverte, tandis que la déconnexion de RDP la ferme. Comme alternative, nous avons assez bien réussi à utiliser VNC au lieu de RDP.



0
votes

Pour autant que je m'en souvienne, vous pouvez invoquer des événements sur les commandes au lieu de les simuler avec la souris. C'est différent au fur et à mesure que les événements sont injectés. Cela s'applique non seulement à TestStack.White adaptation, mais dans la plupart des frameworks de robot. Alors, quelle était et quelle est la motivation derrière l'utilisation de la souris?

Lorsque JQuery est arrivé à Javascript, entre autres, il a changé de paradigme dans la façon dont les éléments sont référencés. Mais cela a également réduit la quantité de code à écrire, créer une méthode utilitaire et changer:

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

en quelque chose de plus court, par exemple:

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

Par inadvertance, vous supprimez une couche d'abstraction, la rendez plus lisible, fonctionne plus vite, ne dépend pas de la résolution de l'écran ou du dpi, etc.

Une chose que j'essaierais si la précédente ne l'était pas applicable - exécutez l'implémentation NCrunch Grid dans une machine virtuelle. Je veux dire, en théorie, cela pourrait fonctionner.


0 commentaires

1
votes

J'ai donc fait ce travail. J'ai principalement suivi les instructions ici mais j'ai également désactivé ServerManager de démarrer lorsque l'utilisateur se connecte à TaskScheduler.

La politique de l'entreprise empêche également les machines de ne pas se verrouiller, nous avons donc un script PowerShell qui appuie sur numlock deux fois par minute pour empêcher le bureau de se verrouiller.

Il y avait également des problèmes avec le bureau trop petit lorsque l'utilisateur par défaut se connectait, ce qui empêchait également de cliquer sur des éléments.


0 commentaires