Intern 2.0 не работает с локальной сетью Selenium Grid

Я новичок в среде Intern и пытаюсь запустить простой функциональный тест с использованием локальной Selenium Grid. Он отлично работает, когда я запускаю Selenium как автономный сервер, но когда я пытаюсь использовать Selenium Grid, он терпит неудачу. Браузер запускается, но в адресной строке показывает только about:blank. Я использую OS X 10.9.4 и запускаю тесты в Chrome. Я следовал инструкциям здесь, чтобы установить вверх по сетке, а именно:

$ 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

Вот мой тест:

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

Вот результат, который я вижу от 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

Вывод из селенового хаба:

$ 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

Вывод из узла Selenium:

$ 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

Я знаю, что ошибка FORWARDING_TO_NODE_FAILED должна означать проблему с сетью, но я не понимаю, как это может быть, поскольку все работает локально. Я пробовал другие версии Selenium (2.39, 2.40, 2.41 и 2.42.2) и другие браузеры (Firefox, Safari) безуспешно. Любая помощь будет оценена здесь.


person Jake Stoeffler    schedule 19.08.2014    source источник


Ответы (1)


Selenium Grid содержит ошибки и требует заголовка Content-Length для всех запросов, отличных от GET (автономный сервер Selenium не требует). Intern 2.0.3 решает эту проблему, поэтому, если вы обновитесь до 2.0.3, все должно работать.

person C Snover    schedule 19.08.2014