【问题标题】:Simulate back/forward/refresh button in unit test with Wicket使用 Wicket 在单元测试中模拟后退/前进/刷新按钮
【发布时间】:2010-02-26 18:30:52
【问题描述】:

我想对单击浏览器的后退按钮(或前进或刷新)时我的页面的行为进行单元测试 (jUnit 4)。

我可以在单元测试中以某种方式模拟浏览器的后退/前进/刷新按钮吗? 是否有提供此类功能的实用程序类?

第二次编辑:

我了解 Wicket 测试工具不会模拟具有完整历史记录的浏览器。据我了解,我需要以下两件事来从单元测试中模拟浏览器的行为:

(1) 当我调用WicketTester.startPage()WicketTester.clickLink() 时,Wicket 必须告诉我发出了什么确切的请求(例如 URL)。

(2) Wicket 必须再次处理相同的请求,例如通过接受 (1) 先前记录的 URL。

我想以与WicketTesterFormTester 等兼容的方式执行此操作,因为我在这些类中使用了组件查找器、断言和更出色的功能。这意味着我必须从 Wicket 设施发出请求,而不是来自 HttpUnit / HtmlUnit / Selenium 等外部客户端。

【问题讨论】:

    标签: unit-testing wicket


    【解决方案1】:

    WicketTester 肯定不支持这一点,它明确使用不支持后退按钮的虚拟 WebApplication 来节省资源。

    我怀疑在 Wicket 中模拟会很痛苦......

    您最好的选择可能是使用基于浏览器的测试工具,例如 Selenium RC。我自己没有尝试过,但它确实有一个goBack() 方法,可以模拟点击浏览器后退按钮。

    【讨论】:

      【解决方案2】:

      查看HtmlUnit,您可以使用History 类模拟后退和前进事件。

      @Test
      public void testHistory() throws IOException {
          // Create a web client
          final WebClient webClient = new WebClient();
      
          // Surf to a page
          final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net/");
      
          // Click "Get started" link
          page.getAnchorByHref("gettingStarted.html").click();
      
          // Get History
          History history = webClient.getCurrentWindow().getHistory();
      
          // Current page
          assertEquals("http://htmlunit.sourceforge.net/gettingStarted.html",
                       history.getUrl(history.getIndex()).toString());
      
          // Go back one page
          history.back();
          assertEquals("http://htmlunit.sourceforge.net/",
                       history.getUrl(history.getIndex()).toString());
      }
      

      【讨论】:

        【解决方案3】:

        您无法在 wicket 单元测试中模拟“返回”功能,这完全超出了 wicket 的作用范围,但是您可以测试几乎所有单击返回时会发生的事情

        发布一些更具体的关于您要测试的内容,通常一个后退按钮只会在检票口中为您提供一堆“分离”组件,您可以测试这些

        【讨论】:

        • 我猜你是对的,WicketTester 不可能做到这一点。我尝试使用WebRequestCycle 来解决问题,但我做不到。现在,我会放弃,因为我没有更多的时间。不过,“您可以测试几乎所有点击返回时会发生的事情”是什么意思?
        • 如果你在组件上使用分离和附加方法,你可以模拟某些返回按钮的行为。基本上,当您离开检票口页面时,它会分离组件及其模型以节省空间,如果您对这些模型对象进行操作,除非它们知道如何重新连接自己,否则这将导致引发异常。
        • 我也有同样的问题。我想测试我是否返回,我的带有 ajax 更改的页面状态是否已恢复(而不是全新的 Page)。有什么提示吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多