为什么Selenium Web驱动程序在尝试导航时会崩溃?

时间:2017-03-09 09:32:15

标签: c# asp.net-mvc selenium testing

情况:

要在我们的ASP.NET MVC应用程序上运行集成测试,我们选择了Selenium的Web驱动程序。

问题:

使用Internet Explorer驱动程序从VS2015运行测试时,控制台会显示错误消息(请参见下面的屏幕截图)。 同时,浏览器打开和关闭。控制台冻结了。然后,Visual Studio显示StackOverflow异常消息:

Selenium console test crash screenshot 诊断:

  • 一旦驱动程序在应用程序中尝试导航操作,测试就会崩溃。

    [Test]
    public void PerformNavigation()
    {
        Driver.Navigate().GoToUrl(GetAbsoluteUrl("/")); // <-- The test crashes here
    }
    

    但外部网址有效。

    [Test]
    public void PerformNavigation()
    {
        Driver.Navigate().GoToUrl("http://google.com"); // <-- This works
    }
    
  • 似乎永远重定向Web驱动程序,直到发生stackoverflow异常(HTTP 302)。

  • 在调试模式下,我无法在模块窗口中找到主项目的程序集(我们正在测试的程序集)。看起来测试项目在加载这个特定组件时遇到了一些问题:所有其他组件都在这里。我没有找到任何无法装载装配的理由。

问题:

我无法在Google或SO上找到任何帮助。我们的问题非常具体,可能是问题的组合。

那么我该如何使这些集成测试工作呢?

或者至少:我如何在这个问题上进行更精确的诊断?

更新:

我最终发现我的控制器方法之前的注释干扰了我的测试。我们使用这些注释来检查用户权限(这里用户可以阅读或更新任务):

[AuthorizedFunctionalities(Functionalities = "Mission_R;Mission_CUD")]

但是我觉得很奇怪,这些测试无法使用这些注释。它们在调试模式下运行良好,但不是通过Web驱动程序。 我会尝试进一步调查。

2 个答案:

答案 0 :(得分:0)

您可以尝试在测试开始时动态加载程序集(.dll),在C#代码中加载。 为此,您可以使用以下代码行:

Assembly.LoadFile($"{AppDomain.CurrentDomain.BaseDirectory}\\YourDLL.dll");

答案 1 :(得分:0)

我最终发现我的控制器方法之前的注释干扰了我的测试。我们使用这些注释来检查控制器方法之前的用户权限:

[AuthorizedFunctionalities(Functionalities = "MyFunctionalities")]

通过删除这些anotations,测试工作。我仍然需要知道为什么网络驱动程序不喜欢这些。