等待使用WatiN完全加载页面

时间:2013-08-27 18:40:50

标签: c# .net visual-studio-2010 watin

我有两个与同一问题有关的问题...... 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来实现这一功能。

2 个答案:

答案 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调用不起作用,那么在循环中使用基本轮询概念和更短的睡眠将比长时间睡眠更好。