0
votes

I'm new to the Intern framework and I'm trying to get a simple functional test running using a local Selenium Grid. It runs perfectly when I run Selenium as a standalone server, but when I try to use a Selenium Grid it fails. The browser launches, but only shows about:blank in the address bar. I'm using OS X 10.9.4 and running the tests in Chrome. I followed the instructions here to set up the grid, namely:

$ java -jar selenium-server-standalone-2.41.0.jar -role hub
$ java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://localhost:4444/grid/register
$ node node_modules/intern/runner.js config=tests/intern

Here's my test:

registerSuite({
    name: 'index',
    "sample test": function () {
        return this.remote
            .get("http://www.google.com");
    }
});

Here's the output I'm seeing from Intern:

$ node node_modules/intern/runner.js config=tests/intern
Listening on 0.0.0.0:9000
Starting tunnel...
Initialised chrome 36.0.1985.143 on MAC
Test main - index - sample test FAILED on chrome 36.0.1985.143 on MAC:
JavaScriptError: [POST http://localhost:4444/wd/hub/session/61150cc5-2cf0-42e4-adc7-bf27b4751ed2/execute / {"script":"return (function getCoverageData() {\n\t\t/*global __internCoverage:false */\n\t\treturn typeof __internCoverage !== 'undefined' && JSON.stringify(__internCoverage);\n\t}).apply(this, arguments);","args":[]}] Session [61150cc5-2cf0-42e4-adc7-bf27b4751ed2] was terminated due to FORWARDING_TO_NODE_FAILED
  at Server._post  <node_modules/intern/node_modules/leadfoot/Server.js:62:9>
  at ProxiedSession._post  <node_modules/intern/node_modules/leadfoot/Session.js:57:30>
  at ProxiedSession.Session.execute  <node_modules/intern/node_modules/leadfoot/Session.js:580:15>
  at ProxiedSession.lang.mixin.get  <node_modules/intern/lib/ProxiedSession.js:77:17>
  at CompatCommand.<anonymous>  <node_modules/intern/node_modules/leadfoot/Command.js:617:19>
  at <node_modules/intern/node_modules/leadfoot/node_modules/dojo/Promise.js:256:37>
  at runCallbacks  <node_modules/intern/node_modules/leadfoot/node_modules/dojo/Promise.js:13:18>
  at <node_modules/intern/node_modules/leadfoot/node_modules/dojo/Promise.js:204:17>
  at Object.run [as _onImmediate]  <node_modules/intern/node_modules/leadfoot/node_modules/dojo/Promise.js:143:29>
  at processImmediate [as _immediateCallback]  <timers.js:336:15>
  at new CompatCommand  <node_modules/intern/runner.js:195:14>
  at <CompatCommand.target.(anonymous function) [as get] (/Users/myuser/intern-test-example/node_modules/intern/node_modules/leadfoot/Command.js:592:11)>
  at Test.registerSuite.sample test [as test]  <tests/functional/index.js:11:18>
  at Test.run  <node_modules/intern/lib/Test.js:154:19>
  at <node_modules/intern/lib/Suite.js:212:13>
  at signalListener  <node_modules/intern/node_modules/dojo/Deferred.js:37:21>
  at Promise.then.promise.then  <node_modules/intern/node_modules/dojo/Deferred.js:258:5>
  at <node_modules/intern/lib/Suite.js:211:46>
  at process._tickCallback  <node.js:419:13>
No unit test coverage for chrome 36.0.1985.143 on MAC
chrome 36.0.1985.143 on MAC: 1/1 tests failed

TOTAL: tested 1 platforms, 1/1 tests failed

Output from the Selenium hub:

$ java -jar selenium-server-standalone-2.41.0.jar -role hub
Aug 19, 2014 4:32:29 PM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a selenium grid server
2014-08-19 16:32:29.925:INFO:osjs.Server:jetty-7.x.y-SNAPSHOT
2014-08-19 16:32:29.958:INFO:osjsh.ContextHandler:started o.s.j.s.ServletContextHandler{/,null}
2014-08-19 16:32:29.965:INFO:osjs.AbstractConnector:Started [email protected]:4444
Aug 19, 2014 4:32:59 PM org.openqa.grid.web.servlet.handler.RequestHandler process
INFO: Got a request to create a new session: Capabilities [{idle-timeout=60, browserName=chrome, name=tests/intern, selenium-version=2.41.0}]
Aug 19, 2014 4:33:04 PM org.openqa.grid.web.servlet.handler.RequestHandler process
INFO: Got a request to create a new session: Capabilities [{idle-timeout=60, browserName=chrome, name=tests/intern, selenium-version=2.41.0}]
Aug 19, 2014 4:33:04 PM org.openqa.grid.internal.ProxySet getNewSession
INFO: Available nodes: [host :http://X.X.X.X:5555]
Aug 19, 2014 4:33:04 PM org.openqa.grid.internal.BaseRemoteProxy getNewSession
INFO: Trying to create a new session on node host :http://X.X.X.X:5555
Aug 19, 2014 4:33:04 PM org.openqa.grid.internal.TestSlot getNewSession
INFO: Trying to create a new session on test slot {seleniumProtocol=WebDriver, platform=MAC, browserName=chrome, maxInstances=5}
Aug 19, 2014 4:33:06 PM org.openqa.grid.web.servlet.handler.RequestHandler process
SEVERE: cannot forward the request null
org.apache.http.client.ClientProtocolException
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:867)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:115)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
    at org.openqa.grid.internal.TestSession.sendRequestToNode(TestSession.java:370)
    at org.openqa.grid.internal.TestSession.forward(TestSession.java:227)
    at org.openqa.grid.web.servlet.handler.RequestHandler.forwardRequest(RequestHandler.java:96)
    at org.openqa.grid.web.servlet.handler.RequestHandler.process(RequestHandler.java:129)
    at org.openqa.grid.web.servlet.DriverServlet.process(DriverServlet.java:83)
    at org.openqa.grid.web.servlet.DriverServlet.doPost(DriverServlet.java:67)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.seleniumhq.jetty7.servlet.ServletHolder.handle(ServletHolder.java:565)
    at org.seleniumhq.jetty7.servlet.ServletHandler.doHandle(ServletHandler.java:479)
    at org.seleniumhq.jetty7.server.session.SessionHandler.doHandle(SessionHandler.java:225)
    at org.seleniumhq.jetty7.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)
    at org.seleniumhq.jetty7.servlet.ServletHandler.doScope(ServletHandler.java:406)
    at org.seleniumhq.jetty7.server.session.SessionHandler.doScope(SessionHandler.java:186)
    at org.seleniumhq.jetty7.server.handler.ContextHandler.doScope(ContextHandler.java:965)
    at org.seleniumhq.jetty7.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    at org.seleniumhq.jetty7.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
    at org.seleniumhq.jetty7.server.Server.handle(Server.java:349)
    at org.seleniumhq.jetty7.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:452)
    at org.seleniumhq.jetty7.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:47)
    at org.seleniumhq.jetty7.server.AbstractHttpConnection.messageComplete(AbstractHttpConnection.java:903)
    at org.seleniumhq.jetty7.server.AbstractHttpConnection$RequestHandler.messageComplete(AbstractHttpConnection.java:960)
    at org.seleniumhq.jetty7.http.HttpParser.parseNext(HttpParser.java:897)
    at org.seleniumhq.jetty7.http.HttpParser.parseAvailable(HttpParser.java:235)
    at org.seleniumhq.jetty7.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:66)
    at org.seleniumhq.jetty7.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:254)
    at org.seleniumhq.jetty7.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
    at org.seleniumhq.jetty7.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.http.ProtocolException: Transfer-encoding header already present
    at org.apache.http.protocol.RequestContent.process(RequestContent.java:92)
    at org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:131)
    at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:165)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:484)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
    ... 31 more

Output from the Selenium node:

$ java -jar selenium-server-standalone-2.39.0.jar -role node -hub http://localhost:4444/grid/regter
Aug 19, 2014 4:32:45 PM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a selenium grid node
16:33:00.598 INFO - Java: Oracle Corporation 24.60-b09
16:33:00.599 INFO - OS: Mac OS X 10.9.4 x86_64
16:33:00.603 INFO - v2.39.0, with Core v2.39.0. Built from revision ff23eac
16:33:00.654 INFO - Default driver org.openqa.selenium.ie.InternetExplorerDriver registration is skipped: registration capabilities Capabilities [{platform=WINDOWS, ensureCleanSession=true, browserName=internet explorer, version=}] does not match with current platform: MAC
16:33:00.673 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:5555/wd/hub
16:33:00.674 INFO - Version Jetty/5.1.x
16:33:00.674 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
16:33:00.675 INFO - Started HttpContext[/selenium-server,/selenium-server]
16:33:00.675 INFO - Started HttpContext[/,/]
16:33:00.681 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@511533be
16:33:00.681 INFO - Started HttpContext[/wd,/wd]
16:33:00.683 INFO - Started SocketListener on 0.0.0.0:5555
16:33:00.683 INFO - Started org.openqa.jetty.jetty.Server@2461e285
16:33:00.684 INFO - using the json request : {"class":"org.openqa.grid.common.RegistrationRequest","capabilities":[{"platform":"MAC","seleniumProtocol":"Selenium","browserName":"*firefox","maxInstances":5},{"platform":"MAC","seleniumProtocol":"Selenium","browserName":"*googlechrome","maxInstances":5},{"platform":"MAC","seleniumProtocol":"Selenium","browserName":"*iexplore","maxInstances":1},{"platform":"MAC","seleniumProtocol":"WebDriver","browserName":"firefox","maxInstances":5},{"platform":"MAC","seleniumProtocol":"WebDriver","browserName":"chrome","maxInstances":5},{"platform":"MAC","seleniumProtocol":"WebDriver","browserName":"internet explorer","maxInstances":1}],"configuration":{"port":5555,"register":true,"host":"X.X.X.X","proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy","maxSession":5,"role":"node","hubHost":"localhost","registerCycle":5000,"hub":"http://localhost:4444/grid/register","hubPort":4444,"url":"http://X.X.X.X:5555","remoteHost":"http://X.X.X.X:5555"}}
16:33:00.685 INFO - Starting auto register thread. Will try to register every 5000 ms.
16:33:00.685 INFO - Registering the node to hub :http://localhost:4444/grid/register
16:33:04.989 INFO - Executing: [new session: Capabilities [{idle-timeout=60, browserName=chrome, name=tests/intern, selenium-version=2.41.0}]] at URL: /session)
16:33:04.996 INFO - Creating a new session for Capabilities [{idle-timeout=60, browserName=chrome, name=tests/intern, selenium-version=2.41.0}]
Starting ChromeDriver (v2.10.267517) on port 17126
Only local connections are allowed.
16:33:06.089 INFO - Done: /session
16:33:06.175 INFO - Executing: [get: about:blank] at URL: /session/61150cc5-2cf0-42e4-adc7-bf27b4751ed2/url)
16:33:06.323 INFO - Done: /session/61150cc5-2cf0-42e4-adc7-bf27b4751ed2/url
16:33:06.337 INFO - Executing: [get local storage size] at URL: /session/61150cc5-2cf0-42e4-adc7-bf27b4751ed2/local_storage/size)
16:33:06.337 INFO - Executing: [get location context] at URL: /session/61150cc5-2cf0-42e4-adc7-bf27b4751ed2/location)
16:33:06.337 INFO - Executing: [take screenshot] at URL: /session/61150cc5-2cf0-42e4-adc7-bf27b4751ed2/screenshot)
16:33:06.339 INFO - Executing: [execute async script: arguments[0](true);, []] at URL: /session/61150cc5-2cf0-42e4-adc7-bf27b4751ed2/execute_async)
16:33:06.340 WARN - Exception thrown
org.openqa.selenium.UnsupportedCommandException: driver (org.openqa.selenium.chrome.ChromeDriver) does not support org.openqa.selenium.html5.LocationContext
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: host: 'myhost', ip: 'X.X.X.X', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.4', java.version: '1.7.0_60'
Driver info: driver.version: unknown
    at org.openqa.selenium.remote.server.handler.html5.Utils.convert(Utils.java:81)
    at org.openqa.selenium.remote.server.handler.html5.Utils.getLocationContext(Utils.java:42)
    at org.openqa.selenium.remote.server.handler.html5.GetLocationContext.call(GetLocationContext.java:31)
    at org.openqa.selenium.remote.server.handler.html5.GetLocationContext.call(GetLocationContext.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:170)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
16:33:06.340 WARN - Exception thrown
org.openqa.selenium.UnsupportedCommandException: driver (org.openqa.selenium.chrome.ChromeDriver) does not support org.openqa.selenium.html5.WebStorage
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: host: 'myhost', ip: 'X.X.X.X', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.4', java.version: '1.7.0_60'
Driver info: driver.version: unknown
    at org.openqa.selenium.remote.server.handler.html5.Utils.convert(Utils.java:81)
    at org.openqa.selenium.remote.server.handler.html5.Utils.getWebStorage(Utils.java:52)
    at org.openqa.selenium.remote.server.handler.html5.GetLocalStorageSize.call(GetLocalStorageSize.java:31)
    at org.openqa.selenium.remote.server.handler.html5.GetLocalStorageSize.call(GetLocalStorageSize.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:170)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
16:33:06.344 WARN - Exception: driver (org.openqa.selenium.chrome.ChromeDriver) does not support org.openqa.selenium.html5.LocationContext
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: host: 'myhost', ip: 'X.X.X.X', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.4', java.version: '1.7.0_60'
Driver info: driver.version: unknown
16:33:06.345 WARN - Exception: driver (org.openqa.selenium.chrome.ChromeDriver) does not support org.openqa.selenium.html5.WebStorage
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: host: 'myhost', ip: 'X.X.X.X', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.4', java.version: '1.7.0_60'
Driver info: driver.version: unknown
16:33:06.618 INFO - Done: /session/61150cc5-2cf0-42e4-adc7-bf27b4751ed2/screenshot
16:33:06.631 INFO - Done: /session/61150cc5-2cf0-42e4-adc7-bf27b4751ed2/execute_async

I know that the FORWARDING_TO_NODE_FAILED error is supposed to mean there's a network issue, but I don't see how that could be the case as everything is running locally. I've tried other Selenium versions (2.39, 2.40, 2.41, and 2.42.2) and other browsers (Firefox, Safari) with no luck. Any help would be appreciated here.

1

1 Answers

2
votes

Selenium Grid is buggy and requires a Content-Length header on all non-GET requests (Selenium server standalone does not). Intern 2.0.3 works around this issue, so if you update to 2.0.3, things should just work.