等待使用WatiN完全加载页面

我有两个与同一问题有关的问题…… Q1 )我正在使用WatiN(3.5)来实现网站的自动化。 情况是我想在结果页面完全加载时获取div标签,但是WatiN不等待该页面被加样,并尝试使用该div来导致div为null。 这个div由AJAX填充。 这是我用来避免该错误的代码,但它不起作用。

while (resultDiv == null) { browser.Div("ui-tabs-1").WaitUntilExists(); resultDiv = browser.Div("ui-tabs-1"); } 

那么如何使用WatiN等待页面完全加载?

Q2 )我在这里找到了上述问题的解决方案,但我陷入了困境,因为我找不到这些接口的库参考,即IElementIBrowser 。 这些接口用于扩展方法。 我还询问了那篇文章的作者并等待他的回复。 我正在通过在VS 2010中使用WatiN 2.5和.Net framework 3.5来实现此function。

我在使用Ajax的网站上遇到了与watin类似的问题。 这是解决方法。

//单击链接/选项卡/按钮后,在非Ajax网站上加载结果。 我们这里有一个函数, browser.WaitForComplete()但它只在页面处于加载状态时才有效。 但是如果Ajax在浏览器窗口的一部分上得到更新。 所以没有浏览器的加载状态。

所以这个问题的一个解决方案是使用Thread.Sleep(10000); 此时间可能因网站加载所需div的正常时间而异。

可以使用Thread.Sleep,但除了概念validation之外的其他任何事情,等待加载的东西确实是Thread.Sleep应该避免的问题。 如果您在最长时间内hibernate,则睡眠会增加不必要的空闲时间,并在等待较短时间时出现误报。

如果您正在测试ASP.NET Ajax站点,请参阅此处响应中的Jeroen链接: 在WatiN中如何等待回发完成 – WaitForAsyncPostbackToComplete。 我将这个想法用于一些方法和属性,以摆脱我的许多长睡眠调用的代码。 测试运行得更快,结果更可靠。

如果特定的JS调用不能正常工作,因为您正在使用不同的客户端框架,那么在循环中使用基本轮询概念和较短的睡眠将比长时间睡眠更好。