我有两个与同一问题有关的问题...... Q1 )我正在使用WatiN(3.5)来实现网站的自动化。 情况是我想在结果页面完全加载时获取 div 标记,但是WatiN不等待该页面被加样并尝试捕获该div导致获得div空值。这个div由AJAX填充。这是我用来避免该错误的代码,但它不起作用。
while (resultDiv == null)
{
browser.Div("ui-tabs-1").WaitUntilExists();
resultDiv = browser.Div("ui-tabs-1");
}
那么如何使用WatiN等待页面完全加载?
Q2 )我找到了上述问题here的解决方案,但我坚持了一点,因为我找不到这些接口的库参考,即 IElement 和 IBrowser 。这些接口用于扩展方法。 我还询问了那篇文章的作者并等待他的回复。 我正在通过在VS 2010中使用WatiN 2.5和.Net framework 3.5来实现这一功能。
答案 0 :(得分:3)
我在使用Ajax的网站上遇到了与watin类似的问题。 这是解决方法。
//点击非Ajax网站上加载结果的链接/标签/按钮。
我们在这里有一个函数,browser.WaitForComplete()
但它只在页面处于加载状态时才有效。但是如果Ajax在浏览器窗口的一部分上得到更新。所以浏览器没有加载状态。
因此,这个问题的一个解决方案是
使用Thread.Sleep(10000);
此时间可能因网站加载所需div的正常时间而异。
答案 1 :(得分:1)
Thread.Sleep 可以使用,但除了概念验证以外,等待加载的东西确实是Thread.Sleep应该避免的问题。如果您在最长时间内睡觉,睡眠会增加不必要的空闲时间,并在等待较短时间时给出误报。
如果您正在测试ASP.NET Ajax站点,请参阅此处响应中的Jeroen链接:In WatiN how to wait until postback is complete - WaitForAsyncPostbackToComplete。我将这个想法用于一些方法和属性,以摆脱许多长时间Sleep调用的代码。测试运行得更快,结果更可靠。
如果您使用不同的客户端框架时特定的JS调用不起作用,那么在循环中使用基本轮询概念和更短的睡眠将比长时间睡眠更好。