Skip to content
This repository has been archived by the owner on Jul 29, 2024. It is now read-only.

Cannot start webdriver as a process #1895

Closed
Risto-Stevcev opened this issue Mar 4, 2015 · 10 comments
Closed

Cannot start webdriver as a process #1895

Risto-Stevcev opened this issue Mar 4, 2015 · 10 comments

Comments

@Risto-Stevcev
Copy link

Since 1.8.0, I can't start webdriver as a process when I run it with Firefox. It works if I don't run it as a process using require('child_process').spawn or grunt.util.spawn (a wrapper). I can confirm that the selenium-webdriver library itself runs fine as a process.

It gives me the following error:

ERROR - Unable to start a WebDriver session.

/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:113
  var template = new Error(this.message);
                 ^
UnknownError: Bad request
Command duration or timeout: 77 milliseconds
ERROR - Unable to start a WebDriver session.

/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:113
  var template = new Error(this.message);
                 ^
UnknownError: Bad request
Command duration or timeout: 77 milliseconds
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'arch', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.18.6-1-ARCH', java.version: '1.7.0_75'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
    at new bot.Error (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:113:18)
    at Object.bot.response.checkResponse (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/response.js:106:9)
    at /home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:152:24
    at /home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/base.js:1582:15
    at [object Object].webdriver.promise.ControlFlow.runInNewFrame_ (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1654:20)
    at notify (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:465:12)
    at notifyAll (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:442:7)
    at resolve (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:420:7)
    at fulfill (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:535:5)
    at /home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/base.js:1582:15
==== async task ====
WebDriver.createSession()
    at Function.webdriver.WebDriver.acquireSession_ (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:149:22)
    at Function.webdriver.WebDriver.createSession (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:123:30)
    at Builder.build (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/selenium-webdriver/builder.js:294:22)
    at DriverProvider.getNewDriver (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/lib/driverProviders/driverProvider.js:38:7)
    at Runner.createBrowser (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/lib/runner.js:180:37)
    at /home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/lib/runner.js:257:21
    at _fulfilled (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/q/q.js:797:54)
    at self.promiseDispatch.done (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/q/q.js:826:30)
    at Promise.promise.promiseDispatch (/home/foo/git/javascript/grunt-simple-protractor/node_modules/protractor/node_modules/q/q.js:759:13)
[launcher] Process exited with error code 1
@juliemr
Copy link
Member

juliemr commented Mar 5, 2015

Can you share the code you're using?

@Risto-Stevcev
Copy link
Author

It's showing up as an issue with my protractor package grunt-simple-protractor, but I've written a simpler Gist that shows the error in question. The folder structure is:

$ ls .
Gruntfile.js  node_modules  package.json  proc.js  tasks  tspec.js
$ ls tasks/
foo.js

It's a problem with firefox but not chrome. It might not clean up webdriver since it's a minimal example. If you need a quick way to kill webdriver:

$ alias webdriver="ps ax | grep webdriver | awk '{print \$1}' | head -n 2 | tr '\n' ' '"
$ alias -p
alias webdriver='ps ax | grep webdriver | awk '\''{print $1}'\'' | head -n 2 | tr '\''\n'\'' '\'' '\'''
$ kill -9 `webdriver`

@Risto-Stevcev
Copy link
Author

proc.js is the most minimal in that Gist. Just run it with node:

var spawn = require('child_process').spawn
var webdriver

(function runWebdriver() {
  webdriver = spawn('node', ['./node_modules/.bin/webdriver-manager', 'start'])
  webdriver.stdout.pipe(process.stdout)
  webdriver.stderr.pipe(process.stderr)
})()

function runProtractor() {
  var ptor = spawn('node', ['./node_modules/.bin/protractor', '--seleniumAddress', 'http://localhost:4444/wd/hub', '--specs', 'tspec.js', '--browser', 'firefox'])
  ptor.stdout.pipe(process.stdout)
  ptor.stderr.pipe(process.stderr)
}

var webdriverStarted = false
webdriver.stderr.on('data', function(data) {
  if (!webdriverStarted && (data && data.toString().match(/Started .*Server/))) {
    webdriverStarted = true
    runProtractor()
  }
})

@juliemr
Copy link
Member

juliemr commented Mar 10, 2015

What version of firefox are you using? I think this might be a duplicate of #1872

@Risto-Stevcev
Copy link
Author

I think it has something to do with either the webdriver update to 2.45 or protractor 1.8.0, but it's not a duplicate of that issue. It will work with 1.7.0 when I try to use firefox <35/36 (I tried it on 34), but it throws the above error when I use protractor 1.8.0. I've tried firefox 34 and 36.

@juliemr
Copy link
Member

juliemr commented Mar 11, 2015

Not sure what to say. Your example script above is working fine for me. Is anyone else having this issue?

@Risto-Stevcev
Copy link
Author

What environment are you using? I'm running Arch Linux with Node 0.12.0 and OpenJDK 7. I can run the selenium-webdriver package as a process just fine. It's not a race condition either.

The stack trace is pretty cryptic when I run node proc.js. It looks like java.util.concurrent.ExecutionException gets thrown because WebDriver gets aborted because org.openqa.selenium.UnsupportedCommandException gets thrown. Here's the trace:

[foo@arch tmp]$ node proc.js 
seleniumProcess.pid: 21638
22:31:22.757 INFO - Launching a standalone server
Setting system property webdriver.chrome.driver to /home/foo/git/javascript/tmp/node_modules/protractor/selenium/chromedriver
22:31:22.786 INFO - Java: Oracle Corporation 24.75-b04
22:31:22.786 INFO - OS: Linux 3.18.6-1-ARCH amd64
22:31:22.797 INFO - v2.45.0, with Core v2.45.0. Built from revision 5017cb8
22:31:22.841 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: LINUX
22:31:22.891 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
22:31:22.892 INFO - Version Jetty/5.1.x
22:31:22.892 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
22:31:22.893 INFO - Started HttpContext[/selenium-server,/selenium-server]
22:31:22.893 INFO - Started HttpContext[/,/]
22:31:22.909 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@4d98c155
22:31:22.909 INFO - Started HttpContext[/wd,/wd]
22:31:22.912 INFO - Started SocketListener on 0.0.0.0:4444
22:31:22.912 INFO - Started org.openqa.jetty.jetty.Server@746c0995
Using the selenium server at http://localhost:4444/wd/hub
[launcher] Running 1 instances of WebDriver
22:31:23.280 INFO - Executing: [new session: Capabilities [{count=1, browserName=firefox}]])
22:31:23.292 INFO - Creating a new session for Capabilities [{count=1, browserName=firefox}]
22:31:25.249 WARN - Exception thrown
java.util.concurrent.ExecutionException: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'arch', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.18.6-1-ARCH', java.version: '1.7.0_75'
Driver info: driver.version: unknown
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.openqa.selenium.remote.server.DefaultSession.execute(DefaultSession.java:175)
    at org.openqa.selenium.remote.server.DefaultSession.<init>(DefaultSession.java:111)
    at org.openqa.selenium.remote.server.DefaultSession.createSession(DefaultSession.java:88)
    at org.openqa.selenium.remote.server.DefaultDriverSessions.newSession(DefaultDriverSessions.java:109)
    at org.openqa.selenium.remote.server.handler.NewSession.handle(NewSession.java:57)
    at org.openqa.selenium.remote.server.handler.NewSession.handle(NewSession.java:1)
    at org.openqa.selenium.remote.server.rest.ResultConfig.handle(ResultConfig.java:110)
    at org.openqa.selenium.remote.server.JsonHttpCommandHandler.handleRequest(JsonHttpCommandHandler.java:172)
    at org.openqa.selenium.remote.server.DriverServlet.handleRequest(DriverServlet.java:201)
    at org.openqa.selenium.remote.server.DriverServlet.doPost(DriverServlet.java:163)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.openqa.selenium.remote.server.DriverServlet.service(DriverServlet.java:129)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.openqa.jetty.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
    at org.openqa.jetty.jetty.servlet.ServletHandler.dispatch(ServletHandler.java:680)
    at org.openqa.jetty.jetty.servlet.ServletHandler.handle(ServletHandler.java:571)
    at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1526)
    at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1479)
    at org.openqa.jetty.http.HttpServer.service(HttpServer.java:920)
    at org.openqa.jetty.http.HttpConnection.service(HttpConnection.java:820)
    at org.openqa.jetty.http.HttpConnection.handleNext(HttpConnection.java:986)
    at org.openqa.jetty.http.HttpConnection.handle(HttpConnection.java:837)
    at org.openqa.jetty.http.SocketListener.handleConnection(SocketListener.java:243)
    at org.openqa.jetty.util.ThreadedServer.handle(ThreadedServer.java:358)
    at org.openqa.jetty.util.ThreadPool$PoolThread.run(ThreadPool.java:537)
Caused by: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'arch', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.18.6-1-ARCH', java.version: '1.7.0_75'
Driver info: driver.version: unknown
    at org.openqa.selenium.remote.server.DefaultDriverProvider.callConstructor(DefaultDriverProvider.java:69)
    at org.openqa.selenium.remote.server.DefaultDriverProvider.newInstance(DefaultDriverProvider.java:53)
    at org.openqa.selenium.remote.server.DefaultDriverFactory.newInstance(DefaultDriverFactory.java:54)
    at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.java:214)
    at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:168)
    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)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.openqa.selenium.remote.server.DefaultDriverProvider.callConstructor(DefaultDriverProvider.java:59)
    ... 9 more
Caused by: org.openqa.selenium.UnsupportedCommandException: Bad request
Command duration or timeout: 145 milliseconds
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'arch', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.18.6-1-ARCH', java.version: '1.7.0_75'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:126)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:104)
    ... 14 more
22:31:25.253 WARN - Exception: Bad request
Command duration or timeout: 145 milliseconds
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'arch', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.18.6-1-ARCH', java.version: '1.7.0_75'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
ERROR - Unable to start a WebDriver session.

/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:113
  var template = new Error(this.message);
                 ^
UnknownError: Bad request
Command duration or timeout: 145 milliseconds
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'arch', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.18.6-1-ARCH', java.version: '1.7.0_75'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
    at new bot.Error (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:113:18)
    at Object.bot.response.checkResponse (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/response.js:106:9)
    at /home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:152:24
    at /home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/base.js:1582:15
    at [object Object].webdriver.promise.ControlFlow.runInNewFrame_ (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1654:20)
    at notify (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:465:12)
    at notifyAll (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:442:7)
    at resolve (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:420:7)
    at fulfill (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:535:5)
    at /home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/base.js:1582:15
==== async task ====
WebDriver.createSession()
    at Function.webdriver.WebDriver.acquireSession_ (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:149:22)
    at Function.webdriver.WebDriver.createSession (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:123:30)
    at Builder.build (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/selenium-webdriver/builder.js:294:22)
    at DriverProvider.getNewDriver (/home/foo/git/javascript/tmp/node_modules/protractor/lib/driverProviders/driverProvider.js:38:7)
    at Runner.createBrowser (/home/foo/git/javascript/tmp/node_modules/protractor/lib/runner.js:180:37)
    at /home/foo/git/javascript/tmp/node_modules/protractor/lib/runner.js:257:21
    at _fulfilled (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/q/q.js:797:54)
    at self.promiseDispatch.done (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/q/q.js:826:30)
    at Promise.promise.promiseDispatch (/home/foo/git/javascript/tmp/node_modules/protractor/node_modules/q/q.js:759:13)
[launcher] Process exited with error code 1

@juliemr
Copy link
Member

juliemr commented Mar 17, 2015

I'm closing, since this doesn't seem to be a general issue. We can continue to discuss, however.

I'm using Mac OSX. It looks like your driver version is not found? Are you sure your version of the selenium standalone is up to date?

@juliemr juliemr closed this as completed Mar 17, 2015
@Risto-Stevcev
Copy link
Author

It's definitely updated to 2.45.0:

$ ./node_modules/.bin/webdriver-manager update
Updating selenium standalone
downloading https://selenium-release.storage.googleapis.com/2.45/selenium-server-standalone-2.45.0.jar...
Updating chromedriver
downloading https://chromedriver.storage.googleapis.com/2.14/chromedriver_linux64.zip...
chromedriver_2.14.zip downloaded to /home/foo/git/javascript/tmp/node_modules/protractor/selenium/chromedriver_2.14.zip
selenium-server-standalone-2.45.0.jar downloaded to /home/foo/git/javascript/tmp/node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar

And it can run webdriver or selenium standalone just fine if it's not a process. For example, if you change line 7 of proc.js in the Gist to this:

  webdriver = spawn('java', ['-jar', './node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar'])

It still has the same issue with the same trace. I think this is a protractor issue, because I can run selenium-webdriver just fine. For example, this minimal example works:

/* example.js */
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder()
            .withCapabilities(webdriver.Capabilities.firefox())
            .build();
driver.get('http://www.google.com');

var element = driver.findElement(webdriver.By.name('q'));
element.sendKeys('Cheese!');
element.submit();

driver.getTitle().then(function(title) {
  console.log('Page title is: ' + title);
});

driver.wait(function() {
  return driver.getTitle().then(function(title) {
    return title.toLowerCase().lastIndexOf('cheese!', 0) === 0;
  });
}, 3000);

driver.getTitle().then(function(title) {
  console.log('Page title is: ' + title);
});

driver.quit();

and

/* proc2.js */
var spawn = require('child_process').spawn;
spawn('node', ['example.js']);
node proc2.js

Since selenium-webdriver requires python, I have to install it with the --python=python2.7 switch due to Arch Linux using python 3.4.3 by default.

I thought it might be a python issue, but if I switch the symlink for /usr/bin/python to point to python2.7, it still fails.

@Risto-Stevcev
Copy link
Author

Just a heads up:
I tested this in my CI environment with ubuntu 12.04 and kernel 3.8, and it's working fine. I'm starting to think this might be an issue with the kernel versions. Arch currently runs on kernel 3.19.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants