1

我正在尝试使用 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();
}

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

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

测试“应该显示添加详细信息链接”失败:System.UnauthorizedAccessException:访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))在 WatiN.Core.Native.InternetExplorer.IEElementCollection.GetElementsByTag(String tagName) 的 WatiN.Core.NativeElementFinder.FindElementsByTag(String tagName) 的 mshtml.IHTMLElementCollection.tags(Object tagName) .Core.NativeElementFinder.d__2.MoveNext() at WatiN.Core.ElementFinder.FindFirst() at WatiN.Core.Element.FindNativeElementInternal() at WatiN.Core.Element.get_Exists() NavigationSpecs.cs(20,0): at 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 尝试过,但它只是崩溃了。

知道我在这里做错了什么吗?

4

2 回答 2

2

这些规范对我有用。实际上,这是我的第一个 WatiN 规范;我在尝试重现您收到的错误时写道。:-)

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

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

他们在所有三种情况下都成功了。我没有以管理员身份运行。

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

于 2011-03-11T20:39:48.373 回答
0

System.UnauthorizedAccessException 可能在多种情况下发生。如果页面没有完全加载并且您尝试访问一个对象,并且根本不是正确的用户。我将从手动调试脚本开始,然后以管理员身份运行测试运行程序。

如果可行,请尝试管理员和全速、非管理员和全速以及管理员和调试的组合。那么你应该对真正的问题有一个好主意。在一些罕见的情况下(使用早期早期版本的 WatiN),我必须将调用包装在 try - catch 然后处理此异常,然后在短暂等待后重试。

于 2011-03-12T00:34:19.617 回答