【问题标题】:Waiting for page to be fully loaded using WatiN使用 WatiN 等待页面完全加载
【发布时间】:2013-08-27 18:40:49
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 当然,如果适用,您也可以使用WaitUntilContainsText()
    【解决方案2】:

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

    如果您正在测试 ASP.NET Ajax 站点,请在此处查看 Jeroen 在其回复中的链接:In WatiN how to wait until postback is complete - WaitForAsyncPostbackToComplete。我将这个想法用于一些方法和属性,以摆脱我的代码中大量的长时间睡眠调用。测试运行速度更快,结果更可靠。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多