Running CodeUI tests on a VM with on remote desktop session open as part of a vNext build
If you want to run CodeUI tests as part of a build you need to make sure the device running the test has access to the UI, for remote VMs this means having a logged in session open and the build/test agent running interactivally. Problem is what happens when you disconnect the session. UNless you manage it you will get the error
Automation engine is unable to playback the test because it is not able to interact with the desktop. This could happen if the computer running the test is locked or it’s remote session window is minimized
In the past I would use a standard TFS Lab Management Environment to manage this,you just check a box to say the VM/PC is running coded UI tests and it sorts out the rest. However, with the advent of vNext build and the move away from Lab Manager this seems overly complex.
It is not a perfect solution but this works
- Make sure the VM autologs in and starts your build/test agents in interactive mode (I used SysInternal AutoLogin to set this up)
- I connect to the session and make sure all is OK, but I then disconnect redirecting the session
- To get my session ID, at the command prompt, I use the command query user
- I then redirect the session tscon.exe RDP-Tcp#99 /dest:console, where RDP-Tcp#99 is my session ID
- Once I was disconnected my CodeUI test still run
I am sure I can get a slicker way to do this, but it does fix the immediate issue
Updated:
This bit of Powershell code could be put in a shortcut on the desktop to do the job, you will want to run the script as administrator
$OutputVariable = (query user) | Out-String
$session = $OutputVariable.Substring($OutputVariable.IndexOf("rdp-tcp#")).Split(" ")[0]
& tscon.exe $session /dest:console