WatiN不适用于MSpec - UnauthorizedAccessException

时间:2011-03-11 16:11:56

标签: visual-studio-2010 c#-4.0 watin testdriven.net mspec

我正在尝试使用TestDriven.Net让WatiN在VS2010中使用MSpec。我的代码如下:

[Subject("Whatever")]
public class when_on_home_page {

    private static IE browser;

    Establish context = () =>
        browser = new IE();

    Because of = () => {
        browser.GoTo("http://localhost:1234/");
        browser.WaitForComplete();
    };

    It should_show_add_details_link = () =>
        browser.Link(Find.ByValue("Add Details")).Exists.ShouldBeTrue();
}

当我运行它时,浏览器加载页面,但是当它检查链接时,我得到:

  

无论如何,何时在主页上   »应显示添加详细信息链接(FAIL)

     

测试'应该显示添加详细信息链接'失败:     System.UnauthorizedAccessException:拒绝访问。 (HRESULT异常:0x80070005(E_ACCESSDENIED))     在mshtml.IHTMLElementCollection.tags(Object tagName)     在WatiN.Core.Native.InternetExplorer.IEElementCollection.GetElementsByTag(String tagName)     在WatiN.Core.NativeElementFinder.FindElementsByTag(String tagName)     在WatiN.Core.NativeElementFinder.d__2.MoveNext()     在WatiN.Core.ElementFinder.FindFirst()     在WatiN.Core.Element.FindNativeElementInternal()     在WatiN.Core.Element.get_Exists()     NavigationSpecs.cs(20,0):在RoboWeb.Specs.when_on_home_page。< .ctor> b__2()     在Machine.Specifications.Model.Specification.InvokeSpecificationField()     在Machine.Specifications.Model.Specification.Verify()

环顾四周,我检查了以下内容:

  • VS以管理员身份运行
  • TestDriven.Net在STA模式下运行,显然
  • IE已关闭“保护模式”
  • 我无法将网站添加到受信任的网站,大概是因为它在本地运行
  • 我调用WaitForComplete(),并且还尝试了Thread.Sleep()

我也尝试过使用FireFox,但这只是崩溃了。

知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:2)

These specifications为我工作。实际上,我这是我的第一个WatiN规范;我在尝试重现您收到的错误时写道。 : - )

我唯一需要做的就是关闭IE的保护模式。我运行了规格

  • 在命令行上(请参阅repo中的WebSpecs-Watin.cmd,请在运行cmd之前编译specs项目并从VS运行Web应用程序)
  • 使用TD.Net runner
  • with ReSharper

他们在所有三个案件中都取得了成功。我不是以管理员身份运行。

您可以尝试使用上面链接的项目重现错误吗?如果您没有安装Git,则顶部有一个下载按钮。

答案 1 :(得分:0)

System.UnauthorizedAccessException可能在许多情况下发生。如果页面未完全加载并且您尝试访问对象,并且只是不是正确的用户。我将首先手动调试脚本,然后以管理员身份运行测试运行器。

如果可行,请尝试使用admin&组合全速,非管理和全速以及管理和调试。然后你应该知道真正的问题是什么。在一些罕见的情况下(使用WatiN的早期早期版本),我必须在try-catch中包装调用然后处理此异常,然后在短暂的等待后重新尝试。