我正在Windows Server 2003下的CC.Net上使用xUnit运行Watin测试。
我有很多测试,在使用TestDriven.Net的开发盒和使用xUnit gui app的服务器上运行良好。但是,当CC.Net运行测试(作为MSBuild任务的一部分)时,函数
ie.ContainsText("some text to find");
永远不会返回预期值。 IE对象上的其他函数和属性似乎工作正常:Button(...)。Click(),TextBox(...)。Value等。
我知道服务帐户需要“允许服务与桌面交互”。
我在本地系统和本地管理员下尝试过运行CC服务。管理员帐户只是挂起并且似乎永远不会完成运行测试(尽管它确实创建了一个iexplorer.exe进程的实例。
这是服务器上的权限问题,还是我遗漏了配置?
答案 0 :(得分:10)
我们刚刚搞清楚如何解决这个问题。我们现在通过CruiseControl.net运行作为服务运行的watin测试。
我们需要我们的cc.net服务作为特定用户运行,以便访问我们正在测试的网站,因为安全性的设置方式。由于该服务作为域用户运行,因此在服务安全性选项卡上禁用“允许用户与桌面交互”复选框。我们不希望仅从始终登录的用户运行命令进程,因为我们希望进程在重新启动时自动启动。现在我们已经想出了
我们解决这个问题的方法是首先创建一个批处理文件来调用nunit-console.exe。 nunit-console.exe的参数作为参数传递给批处理文件,然后传递参数。批处理文件的第二行和最后一行返回从nunit-console.exe返回的返回码。批处理文件基本上如下所示:
nunit-console.exe %1 %2
exit /b %ERRORLEVEL%
根据您的需要,您传递给nunit-console的参数数量可能会有所不同。
我们正在使用nant进行构建,因此我们将现有的nant任务替换为使用调用cmd.exe的exec任务调用nunit-console,如下所示:
<exec program="cmd.exe" failonerror="true">
<arg value="/interactive" />
<arg value="/c" />
<arg value="[batch file name]" />
<arg value="[parameter one value]" />
<arg value="[parameter two value" />
</exec>
我不知道在msbuild中同样的任务是什么样的,但我相信你可以查一查。最终的结果基本上是一个看起来像这样的命令:
cmd.exe /interactive /c [batch file name] [parameter one value] [parameter two value]
或者,您可以使用nant并只创建msbuld nant任务来调用现有的构建。
cmd.exe的'/ interactive'参数是关键,它在有权与桌面交互的进程上运行批处理文件。如果'/ c'参数是必需的,我实际上并不是肯定的,但它是按原样工作的。我们仍然告诉nunit将结果记录到同一个xml文件中,这样我们的合并任务就不需要改变了,并且测试结果报告给巡航控制工作效果很好。
答案 1 :(得分:1)
Watin依靠浏览器自动化来完成它的工作,因此“允许服务与桌面交互”设置。
当Watin尝试运行时,它将在服务帐户下执行,而不是当前登录的桌面,并且由于它将启动IE,因此您运行Watin的帐户可能实际上没有启动IE本身以前它可以坐在IE的初始启动序列中,它会提示设置和所有那些hoo-hah。
另外,如果我没记错的话,与桌面设置的交互需要主动登录才能与之交互。如果当时没有人登录,那么该服务无法与之交谈,也不会为您创建新的桌面。
答案 2 :(得分:0)
我已经离线收到了一些建议:
将使用结果进行编辑。
修改强>
结果:
部分解决方法是在永不死机的会话上运行命令行可执行文件。我真的不喜欢这个解决方案,所以任何进一步的输入都会受到赞赏。
答案 3 :(得分:0)
不确定为什么使用无效的exec示例将该答案标记为正确..
我把它改写成:
<exec>
<baseDirectory>WatinTestDir</baseDirectory>
<executable>cmd.exe</executable>
<buildArgs>/interactive /C nunit-launcher.bat Test.dll /xml:../Test-results.xml</buildArgs>
<buildTimeoutSeconds>2400</buildTimeoutSeconds>
</exec>
哪个运行..但是都失败了..
答案 4 :(得分:0)
我按照这个例子,但遗憾的是它并没有帮助我。由于这个问题是关于nant的,并且我使用了msbuild,因此我为此at here打开了一个单独的问题。
答案 5 :(得分:0)
这是一个很好的解决方案,但无法解决问题是您尝试使用Watin下载文件。
http://blog.kikicode.com/2011/10/run-minimized-batch-file-in-task.html
这对我有用。问题是cmd提示阻止IE出现。当我能够最小化cmd提示时,它允许IE获得焦点并下载我在我的过程中所需的文件。