2

我正在尝试使用 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”。

是否有实现 WebSocket 的替代 WebDriver?或者,有没有办法让它真正打开firefox或chrome?

我也很感激有关如何测试 WebSocket 代码的任何建议,但看起来这里还有另一个未回答的问题

我正在使用 Play 2.1.3。

4

2 回答 2

2

我不确定您为什么要使用 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
      }
    }
  }
}

我正在使用Java-WebSocket来调用 websocket。这个库甚至可以在握手期间发送自定义的 http 标头。

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

于 2013-08-21T11:33:34.007 回答
2

我用 Firefox 测试 WebSockets:

https://github.com/schleichardt/stackoverflow-answers/commit/13d5876791ef409e092e4a097f54247d851e17dc#L8R14

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

所以它看起来像

 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 驱动程序。

于 2013-08-25T22:56:06.970 回答