仅在Teamcity上测试失败

问题描述:

我有一个测试(上传文件到),它能够在本地完美工作(在我的PC上)并且完美地运行在TC上。 但是!当我运行MSTSC(我的服务器上的远程桌面 - windows server 2012)并且实际观察测试运行时,它仅在TC上运行良好。仅在Teamcity上测试失败

当触发器作为TeamCity构建代理的一部分运行并在我不在远程桌面上运行我的测试时,它将失败。顺便说一下,我也尝试在后台运行我在TeamCity构建代理上的测试,但它也以这种方式失败。 我点击一个元素,以触发窗口打开的对话框弹出,然后使用下列内容:

public static void OpenFileNew(string FileNameToAttach) 
    { 
     Process pp = Process.GetCurrentProcess(); 
     if (pp != null) 
     { 
      IntPtr h = pp.MainWindowHandle; 
      SetForegroundWindow(h); 
     } 

     SendKeys.SendWait("\\\\nas01\\qa\\TestFiles\\" + FileNameToAttach); 
     Thread.Sleep(3000); 
     SendKeys.SendWait("{ENTER}"); 
     Thread.Sleep(3000); 
    } 

下一步是我要检查td标记名是否有特定的文本。 上传文件后,td应包含刚刚上传的完整文件名。

public bool CheckFileNameToUploadExists(string FullFileName) 
    { 

     bool IsFileExist = false; 
     WebDriverWait wait = new WebDriverWait(_webdriver, new TimeSpan(0, 0, 30)); 
     var TDs = wait.Until(x => x.FindElements(By.TagName("td"))); 
     for (int i = 0; i < TDs.Count - 1; i++) 
     { 
      var td = TDs[i].Text.ToString(); 
      Thread.Sleep(2000); 
      _test.Log(LogStatus.Pass, td); 
      if(td == FullFileName) 
       IsFileExist = true; 
     } 
     return IsFileExist; 
    } 

如果它不存在,则断言被调用。这实际上是失败。

+0

什么是“错误信息”? – Smartis

+0

这可能与“交互模式”下弹出的实际窗口的要求有关,在没有连接远程桌面会话的情况下运行时可能无法实现。您的代码似乎假设了一个交互式环境,可以推送密钥,并且窗口四处移动。如果没有活动的RDP会话,情况就不会如此。 – Baldrick

+0

刚刚编辑我的帖子。如果它意味着什么。 –

当您离开远程Destktop会话时,您正在“查杀”Destkop,并且不可能对SetForegroundWindow

当你离开RDP会话,而不是注销/关闭应用程序,你可以写这个小脚本:

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
    %windir%\System32\tscon.exe %%s /dest:console 
) 

而且当你要退出会话中运行它,作为管理员。

+0

我会给它一个机会,虽然我不确定这个问题是'SetForegroundWindow'在这种情况下 –

+0

如我所料,但不幸的是它并没有帮助 –

+1

确定它做到了。我忘记关闭已打开的Chrome浏览器。 –