如何使WatiN在带有IE8的Windows Server 2008上运行?

21

我的问题是我无法在运行Windows Server 2008和IE8的开发机上可靠地进行简单的WatiN测试。

我已经看过几篇好的帖子,但仍然存在问题。以下是这些帖子:

第一篇文章中的步骤似乎有所帮助(在我的hosts文件中注释掉“::1”,将我的站点放入受信任的站点,并确保我的app.config具有“STA”并设置为“如果更新则复制”,但它们并没有可靠地解决问题。我尝试了第二个示例中的代码,希望它能有所帮助,但它没有。我正在使用WatiN 2.0 beta 1版本。

我的NUnit代码如下:

protected Browser Browser { get; set; }

[TestFixtureSetUp]
public void SetupPriorToTestsInThisFixture()
{
    Browser = new IE();
    Browser.GoTo(Constants.SiteCollectionUrl);
}

[TestFixtureTearDown]
public void TearDownAfterTestsInThisFixture()
{
    if (Browser != null)
    {
        Browser.Dispose();
    }
}

[Test]
public void WaterThroughThePipes()
{
    Link link = Browser.Link(Find.ByText("Calendar"));
    bool exists = link.Exists;
    Assert.That(exists, Is.True, "Could not find 'Calendar' link.");
}
我所看到的是,有时(虽然很少)我的测试通过了。有时断言失败(exists = false),有时尝试打开浏览器时会超时,有时尝试访问link.Exists时会出错。
访问link.Exists时出现的错误如下:
MyFixture.WaterThroughThePipes: System.Runtime.InteropServices.COMException:接口未知。(来自 HRESULT 的异常:0x800706B5)
我现在似乎无法复制超时错误,因此暂时无法提供它(尽管这种情况过去经常发生)。
我发现在调试模式和非调试模式下运行时会产生不同的结果。
值得一提的是,Firefox 3.0.6从未对我起作用过。我希望它能够正常工作,但需要IE正常工作。这是我在Firefox中遇到的错误:
MyFixture(TestFixtureSetUp): WatiN.Core.Native.Mozilla.FireFoxException:无法连接到jssh服务器,请确保已正确安装jssh.xpi插件      ----> System.Net.Sockets.SocketException:由于目标计算机积极拒绝,无法建立连接 127.0.0.1:9997
有什么想法吗?我真的不想回到Selenium(曾经做过),但我可能不得不这样做。

哦,我还发现如果退出 NUnit 并重新打开它,会得到不同的结果。在此过程中,我也尝试了几次重新启动以查看是否有帮助(但没有)。 - Kirk Liemohn
2
你能用Internet Explorer 7试试吗? “接口未知”可能意味着Watin还不支持IE8-它肯定没有针对它编写。当然,这只是一个(心理调试)猜测。Firefox问题:您是否安装了jssh扩展?您也可以尝试使用selenium。 - devdimi
一旦您安装了IE8,我认为您不能回到IE7而不安装新的操作系统。我相信有解决方法,但可能会有风险...我可以研究一下。我之前没有尝试过Firefox的jssh扩展,因为Firefox不是我的重点,但我可能会尝试一下 - 感谢您的建议。 - Kirk Liemohn
我已经在Firefox中安装了jssh,并且它能够正常工作。这将会很有用,但是我还需在IE中进行测试。希望我可以找到一台有IE7的机器来进行测试,因为我宁愿不使用Selenium。 - Kirk Liemohn
5个回答

29

以管理员身份运行Visual Studio


1
太好了!我遇到了一个System.Runtime.InteropServices.COMException was unhandled by user code Message="The interface is unknown. (Exception from HRESULT: 0x800706B5)"的错误,它来自于mshtml.HTMLDocumentClass.IHTMLDocument2_get_url(),但是以管理员身份运行Visual Studio就解决了这个问题! - Greg Bray
当我通过 TestDriven.net 在 Xunit 测试中运行 Watin 时,遇到了这个问题,以管理员身份运行 VS 可以解决它。 - Robin Clowers
在以管理员身份运行Visual Studio时,可以解决调试问题。但如果我以标准用户身份运行我的exe,它会因为相同的原因失败。是否有任何解决方案? - Ikaso
6
我们发现,如果我们将本地 Intranet 区域设置更改为不自动检测本地 Intranet 网络,就可以在不以管理员身份运行的情况下进行测试。在 IE8 中,您需要前往"工具"->"Internet选项"->"安全"标签页->"本地 Intranet"。点击"站点"按钮,取消"自动检测 Intranet 网络"复选框,然后保存即可。 - Ikaso
嗯,我发现如果将“自动检测企业内部网络”复选框勾选上,它就可以正常工作;当它未被勾选时,我会收到错误提示。 - dagilleland

21

我成功解决了这个COM错误,并让我的测试正常运行,方法是将我的Internet安全设置调整为“启用受保护模式”,即使对于本地Intranet站点也是如此。这个单选框起到了关键作用。(我不需要以管理员身份运行Visual Studio。)

请参考此博客文章以解决此问题,而无需以管理员身份运行Visual Studio。

简要概述:

在Internet Explorer中,打开“工具”->“Internet选项”->“安全”->“本地intranet”,并选中“启用受保护模式”复选框。

我正在Windows 7上运行IE 8和Visual Studio 2010。


这个很完美地运行了,比我过去必须以管理员身份运行要好得多。 - Bronumski
确认。在Win 2008上对我有效。 - lstanczyk
我正在本地主机上进行测试,安全限制阻止我更改“本地网络”区域的受保护模式设置。但是,我能够设置DNS以解析到127.0.0.1的.com子域,并且名称中的.com足以使IE将其视为“Internet”区域,该区域已启用受保护模式。 - CrazyPyro

1

IE8绝对可以与WatiN一起使用,自IE8首次公开发布以来就一直如此。

如果在调试时正常工作但在运行时不正常,则通常指向时间或Server 2008安全锁定问题。

您应该将失败的代码放在try catch中,然后如果有异常,请暂停半秒钟,然后再次重试。

还要确保关闭所有额外的服务器安全锁定,并以管理员身份运行nUnit,以避免UAC妨碍。


0
避免以管理员身份运行Visual Studio或NUnit的另一种选择就是在机器级别禁用UAC,如果您以最低权限运行(应该这样做),这不应该是一个安全问题。

0
关于你在Firefox中看到的错误……可以通过安装 FireWatir FF插件来克服。 (或者至少在3.5.3上对我有效)
但正如已经提到的,IE得到支持,在WatiN环境中使用FireFox不是什么神奇的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接