0

我有两个与同一问题相关的问题... 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 ) 我在这里找到了上述问题的解决方案,但我坚持了一点,因为我找不到这些接口的库参考,即IElementIBrowser。这些接口在扩展方法中使用。我也问过那篇文章的作者,等待他的回复。我在 VS 2010 中通过使用 WatiN 2.5 和 .Net framework 3.5 进行此应用。

4

2 回答 2

3

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

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

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

于 2013-08-30T03:57:28.353 回答
1

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

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

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

于 2013-09-03T20:39:15.183 回答