我们有一个Coded UI测试套件,它依赖于以不同用户身份运行我们的测试。我们通过使用以下ApplicationUnderTest.Launch重载来完成此任务:
ApplicationUnderTest.Launch(browserLocation, null, url, username, GetSecurePassword(password), domain);
我们使用Visual Studio 2013 premium(更新3),在Windows 7和Windows 2012 R2上运行时没有问题。现在我们已迁移到Windows 8.1,我们无法再以其他用户身份运行。我们得到以下臭名昭着的错误:
无法启动应用程序。这可能是由于以下原因之一: 1)应用程序的另一个实例已在运行,并且一次只能运行一个实例。 2)应用程序启动了另一个进程,现在已停止。您可能需要直接启动该过程。 3)您没有足够的权限使用此应用程序。"文件:C:\ Program Files \ Internet Explorer \ iexplore.exe。
当我们以当前用户身份运行时,我们能够成功运行编码的UI测试:
ApplicationUnderTest.Launch(browserLocation, null, url);
不幸的是,这样做不允许我们进行测试。我们以管理员身份运行Visual Studio,我们运行的所有测试用户都自己设置为管理员。你知道问题可能是什么吗?
这是我们遇到的堆栈跟踪:
at Microsoft.VisualStudio.TestTools.UITesting.ApplicationUnderTest.ThrowIfProcessNotValid(Process process)
at Microsoft.VisualStudio.TestTools.UITesting.ApplicationUnderTest.SetCurrentProcessPrivate(Process value)
at Microsoft.VisualStudio.TestTools.UITesting.ApplicationUnderTest.<>c__DisplayClassb.<set_Process>b__a()
at Microsoft.VisualStudio.TestTools.UITesting.CodedUITestMethodInvoker.InvokeMethod[T](Func`1 function, UITestControl control, Boolean firePlaybackErrorEvent, Boolean logAsAction)
at Microsoft.VisualStudio.TestTools.UITesting.ApplicationUnderTest.set_Process(Process value)
at Microsoft.VisualStudio.TestTools.UITesting.ApplicationUnderTest.Start(ProcessStartInfo startInfo)
at Microsoft.VisualStudio.TestTools.UITesting.ApplicationUnderTest.<>c__DisplayClass10.<.ctor>b__e()
at Microsoft.VisualStudio.TestTools.UITesting.CodedUITestMethodInvoker.InvokeMethod[T](Func`1 function, UITestControl control, Boolean firePlaybackErrorEvent, Boolean logAsAction)
at Microsoft.VisualStudio.TestTools.UITesting.ApplicationUnderTest..ctor(String fileName, String alternateFileName, String arguments, String userName, SecureString password, String domain)
at Microsoft.VisualStudio.TestTools.UITesting.ApplicationUnderTest.<>c__DisplayClass4.<Launch>b__3()
at Microsoft.VisualStudio.TestTools.UITesting.CodedUITestMethodInvoker.InvokeMethod[T](Func`1 function, UITestControl control, Boolean firePlaybackErrorEvent, Boolean logAsAction)
at Microsoft.VisualStudio.TestTools.UITesting.ApplicationUnderTest.Launch(String fileName, String alternateFileName, String arguments, String userName, SecureString password, String domain)
at Pantheon.Web.AppsPortal.UITests.Utilities.TestBase.LaunchBrowserWindow(String browserLocation, String url, String username, String password, String domain) in c:\dev_jr\AppsPortal\Development\Pantheon.Web.AppsPortal.UITests\Utilities\TestBase.cs:line 122
TestBase.cs:第122行看起来像这样:
var app = ApplicationUnderTest.Launch(browserLocation, null, url, username, GetSecurePassword(password), domain);
答案 0 :(得分:1)
自从我发布这个问题以来,我做了一些挖掘和调查。当测试作为Windows 8.1上的另一个用户运行时, Visual Studio 2013 Update 3似乎破坏了编码的UI测试。有关交互的详细信息,请访问MSDN:
感谢Crystal朱的帮助。不幸的是,回滚到Update 2似乎是不可能的,因为微软已经(就Crystal和我所知道的那样)使得除了最新的Update包之外无法获得任何东西。这非常令人沮丧。我们俩都记录了微软的问题:
不幸的是,目前还没有回复。我已尝试(并且失败)通过官方渠道记录这一点,但我只能报告我失败并被百万呼叫中心对话击败。
希望这不是故事的结尾,但我想记录已经存在的(无关紧要的)进展。我不会将此标记为已接受的答案,因为问题仍然存在。
编辑:2015年1月7日:
由于没有取得进展,我们最终通过改变模拟机制来解决这个问题。这不是一个小开关,我认为它相当hacky。如果它有用,我在这里写博客:(我担心这是一个很长的帖子,因此将它移到SO上并没有真正意义)
http://blog.icanmakethiswork.io/2014/11/Coded-UI-IE-11-and-the-runas-problem.html