关于 c#: 等待页面使用 WatiN 完全加载

Waiting for page to be fully loaded using WatiN

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

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

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

Q2) 我在这里找到了解决上述问题的方法,但由于找不到这些接口(即 IElement 和 IBrowser)的库引用,我陷入了困境。这些接口在扩展方法中使用。
我也问过那篇文章的作者,等待他的回复。
我正在通过在 VS 2010 中使用 WatiN 2.5 和 .Net framework 3.5 进行此应用。


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

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

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


可以使用Thread.Sleep,但除了概念证明之外,等待加载确实是Thread.Sleep 应该避免的问题。如果您在操作将要花费的最长时间内睡眠,睡眠会增加不必要的空闲时间,并在等待较少时间时给出误报失败。

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

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