Playframework 使用支持WebSocket的浏览器进行播放集成测试

Playframework 使用支持WebSocket的浏览器进行播放集成测试,playframework,websocket,playframework-2.0,Playframework,Websocket,Playframework 2.0,我正在尝试使用WithBrowser对我的WebSocket代码进行一些简单的集成测试: class ApplicationControllerSpec extends Specification{ "Application Controller" should { "do something" in new WithBrowser{ browser.goTo("http://localhost:3333") browser.pageSou

我正在尝试使用WithBrowser对我的WebSocket代码进行一些简单的集成测试:

  class ApplicationControllerSpec extends Specification{
    "Application Controller" should {
      "do something" in new WithBrowser{
        browser.goTo("http://localhost:3333")
        browser.pageSource must contain("Hello")
      }
    }
  }
当我这样做时,我会得到一个很长的错误,但其中一部分会说:

WebDriverException:com.gargoylesoftware.htmlunit.ScriptException: ReferenceError:未定义“WebSocket”

是否有其他WebDriver实现了WebSocket?或者,有没有办法让它真正打开firefox或chrome

我也希望您能就如何测试WebSocket代码提供建议,但似乎还有另一个未回答的问题


我正在使用Play 2.1.3。

我不确定您为什么要使用WithBrowser来测试websocket,但这是 我是如何做到的:

class ApplicationSpec extends Specification {

  "Application" should {
    "work" in {
      running(TestServer(9000)) {
        val client = new WebSocketClient(URI.create("ws://localhost:9000/test"),
          new Draft_17(), Map("HeaderKey1" -> "HeaderValue1"), 0) {

          def onError(p1: Exception) {
            println("onError")
          }

          def onMessage(message: String) {
            println("onMessage, message = " + message)
          }

          def onClose(code: Int, reason: String, remote: Boolean) {
            println("onClose")
          }

          def onOpen(handshakedata: ServerHandshake) {
            println("onOpen")
          }
        }
        client.connectBlocking()
        client.send("message")

        Thread.sleep(1000)
        success
      }
    }
  }
}
我过去常叫websocket。这个图书馆甚至可以发送 握手期间自定义http头

注意,我不做任何断言,所以我必须在测试结束时返回成功。
我需要一个Thread.sleep,否则会发生运行时异常(“没有启动的应用程序”),因为测试在websocket通信完成之前完成。

我不确定为什么要使用WithBrowser测试websocket,但这是错误的 我是如何做到的:

class ApplicationSpec extends Specification {

  "Application" should {
    "work" in {
      running(TestServer(9000)) {
        val client = new WebSocketClient(URI.create("ws://localhost:9000/test"),
          new Draft_17(), Map("HeaderKey1" -> "HeaderValue1"), 0) {

          def onError(p1: Exception) {
            println("onError")
          }

          def onMessage(message: String) {
            println("onMessage, message = " + message)
          }

          def onClose(code: Int, reason: String, remote: Boolean) {
            println("onClose")
          }

          def onOpen(handshakedata: ServerHandshake) {
            println("onOpen")
          }
        }
        client.connectBlocking()
        client.send("message")

        Thread.sleep(1000)
        success
      }
    }
  }
}
我过去常叫websocket。这个图书馆甚至可以发送 握手期间自定义http头

注意,我不做任何断言,所以我必须在测试结束时返回成功。
我需要Thread.sleep,否则会发生运行时异常(“没有启动的应用程序”),因为测试在websocket通信完成之前完成。

我使用Firefox测试websocket:

WithBrowser
支持浏览器作为第一个参数,请参见

所以它看起来像

 class ApplicationControllerSpec extends Specification{
    "Application Controller" should {
      "do something" in new WithBrowser(play.api.test.Helpers.FIREFOX){
        browser.goTo("http://localhost:3333")
        browser.pageSource must contain("Hello")
      }
    }
  }

如果您使用firefox,最好为其加载最新的selenium驱动程序。

我使用firefox测试WebSocket:

WithBrowser
支持浏览器作为第一个参数,请参见

所以它看起来像

 class ApplicationControllerSpec extends Specification{
    "Application Controller" should {
      "do something" in new WithBrowser(play.api.test.Helpers.FIREFOX){
        browser.goTo("http://localhost:3333")
        browser.pageSource must contain("Hello")
      }
    }
  }

如果您使用firefox,最好为其加载最新的selenium驱动程序。

这对我来说还不起作用。根据我发现的错误消息,我的selenium驱动程序似乎与firefox(版本24)不兼容。如何“加载最新的selenium驱动程序”?谢谢,不用客气。我仔细查看了您的github页面,发现您已将其添加为依赖项。现在工作。不确定在我没有添加依赖项时默认运行的是什么。这对我来说还不起作用。根据我发现的错误消息,我的selenium驱动程序似乎与firefox(版本24)不兼容。如何“加载最新的selenium驱动程序”?谢谢,不用客气。我仔细查看了您的github页面,发现您已将其添加为依赖项。现在工作。不确定当我没有添加依赖项时默认运行的是什么。