似乎关于WatiN的SO问题的共同主题与实际使事情有效有关,我也不例外。
我已经下载了WatiN的最新版本(2.0.20.1089),我正在尝试创建与Hello,World相同的NUnit / WatiN:
using WatiN.Core;
using NUnit.Framework;
namespace Foo.Browser.Tests
{
[TestFixture]
public class BrowserTests
{
[Test]
[STAThread]
public void ExampleTest()
{
IE ie = new IE("http://www.google.com");
ie.TextField(Find.ByName("q")).TypeText("WatiN");
ie.Button(Find.ByValue("Google Search")).Click();
Link link = ie.Link(Find.ByUrl("http://watin.sourceforge.net/"));
Assert.That(link.Text == "WatiN Home");
}
[Test]
public void FirefoxTest()
{
FireFox ff = new FireFox("http://www.google.com");
ff.TextField(Find.ByName("q")).TypeText("WatiN");
ff.Button(Find.ByValue("Google Search")).Click();
Link link = ff.Link(Find.ByUrl("http://watin.sourceforge.net/"));
Assert.That(link.Text == "WatiN Home");
}
}
这会在最终超时后使用以下堆栈跟踪提示IE(8):
在 WatiN.Core.UtilityClasses.TryFuncUntilTimeOut.ThrowTimeOutException(例外 lastException,String message)at WatiN.Core.UtilityClasses.TryFuncUntilTimeOut.HandleTimeOut() 在 WatiN.Core.UtilityClasses.TryFuncUntilTimeOut.Try [T](DoFunc'1 func)at WatiN.Core.WaitForCompleteBase.WaitUntil(DoFunc'1 waitWhile, BuildTimeOutExceptionMessage exceptionMessage)at WatiN.Core.Native.InternetExplorer.IEWaitForComplete.WaitWhileFrameDocumentNotAvailable(IWebBrowser2的 框架) WatiN.Core.Native.InternetExplorer.IEWaitForComplete.WaitForFramesToComplete(的IHTMLDocument2 maindocument)at WatiN.Core.Native.InternetExplorer.IEWaitForComplete.WaitForFramesToComplete(的IHTMLDocument2 maindocument)at WatiN.Core.Native.InternetExplorer.IEWaitForComplete.WaitForCompleteOrTimeout() 在 WatiN.Core.WaitForCompleteBase.DoWait() 在 WatiN.Core.DomContainer.WaitForComplete(IWAIT waitForComplete)at WatiN.Core.IE.WaitForComplete(的Int32 waitForCompleteTimeOut)at WatiN.Core.DomContainer.WaitForComplete() 在WatiN.Core.Browser.GoTo(Uri url)at WatiN.Core.IE.FinishInitialization(URI uri)at WatiN.Core.IE.CreateNewIEAndGoToUri(URI uri,IDialogHandler logonDialogHandler,布尔值 createInNewProcess)at WatiN.Core.IE..ctor(String url)at Foo.Browser.Tests.BrowserTests.ExampleTest() 在 C:\开发\富\ Foo.Browser.Tests \ BrowserTests.cs:行 19
我在WatiN documentation page中指定的bin \ debug文件夹(Foo.Browser.Tests.dll.config)中有必要的配置文件,那么还有什么可能呢? 有没有人对可能导致问题的原因有任何建议?
答案 0 :(得分:5)
菲尔,
查看抛出的TimeoutExcepetion的InnerException。这很可能包含更多信息来解决您的问题。
HTH Jeroen van Menen 领导开发WatiN
答案 1 :(得分:5)
看起来Phil可能已经回答了您的问题,但我发现您的示例也会抛出异常。为了解决上述问题,我将链接查找更改为按属性(href)查找,如下所示。
[Test]
public void ExampleTest()
{
IE ie = new IE("http://www.google.com");
ie.TextField(Find.ByName("q")).TypeText("WatiN");
ie.Button(Find.ByValue("Google Search")).Click();
Link link = ie.Link(Find.By("href", "http://watin.sourceforge.net/"));
Assert.That(link.Text == "WatiN Home");
}
请注意,我只测试了IE,因为此框没有安装FireFox。
答案 2 :(得分:2)
我对此代码有类似的问题
var link1 = WebBrowser.Current.Link(Find.ByText("Log Off"));
var exists = link1.Exists;
因此得到了解决......
var link1 = WebBrowser.Current.Link(Find.ByText("Log Off"));
link1.WaitUntilExists();
var exists = link1.Exists;
答案 3 :(得分:1)
我自己通过xUnit.net遇到了大问题。
这是一个清单,人们可以随时编辑和/或建议更新:
WatiN的一个重要问题是,在WS08 IE上几千次调用之后,拒绝合作,直到你再次注销(参见我的一个未解决的问题)。我关闭的路线(我需要防故障监控)是使用WatiN记录器,然后使用WebRequest使用手工编码的GET / POST查询将其移植到HtmlAgilityPack,使用手工编码的GET / POST内容很好但显然无法处理显然呈现的JavaScript它适用于许多场景。
答案 4 :(得分:0)
我遇到了与Ruben关于注销/登录情况类似的问题。到目前为止我能找到的最好的推理与WatiN使用COM服务器运行IE的事实有关。可能存在关于处置的问题,但这是另一个奥普拉......
就超时情况而言,它偶尔会发生,但它通常会在NUnit控制台中弹出一条消息,然后继续。我在实现和我的实现之间可以看到的一个很大的区别是我将IE实例作为单例对象运行。这样,我就不必在测试之间关闭并重新打开IE,因此我没有遇到过注销/登录问题。因此,即使IE可见并且未在后台运行,我的测试周期也会缩短。
答案 5 :(得分:0)
public void ExampleTest()
{
IE ie = new IE("http://www.google.com");
ie.TextField(Find.ByName("q")).TypeText("WatiN");
var btnSearch = ie.Button(Find.ByValue("Google Search"));
btnSearch.ClickNoWait();
ie.WaitforComplete();
Link link = ie.Link(Find.ByUrl("http://watin.sourceforge.net/"));
Assert.That(link.Text == "WatiN Home");
}