Charlie
Charlie

Reputation: 4329

WebDriverJS with PhantomJS works on OSX, but not on Linux

I'm using a combination of:

Each component works fine separately, and when I run:

var client = webdriverjs.remote({ 
    desiredCapabilities: { 
        browserName: 'phantomjs',  
        'phantomjs.binary.path': '/path-to/node_modules/phantomjs/bin/phantomjs'
    }, 
    logLevel: 'silent' 
});

client.init();

It works fine on OSX/Mac, but on our CI Linux server (Ubuntu), I get the following error message;

PhantomJS is launching GhostDriver...
Unable to open file '/path/to/phantomjsdriver.log'

Before the ineveitable Java stacktrace...

Driver info: driver.version: unknown
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
    at java.util.concurrent.FutureTask.get(FutureTask.java:83)
    at org.openqa.selenium.remote.server.DefaultSession.execute(DefaultSession.java:176)
    at org.openqa.selenium.remote.server.DefaultSession.<init>(DefaultSession.java:112)
    at org.openqa.selenium.remote.server.DefaultSession.createSession(DefaultSession.java:89)
    at org.openqa.selenium.remote.server.DefaultDriverSessions.newSession(DefaultDriverSessions.java:110)
    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:112)
    at org.openqa.selenium.remote.server.JsonHttpCommandHandler.handleRequest(JsonHttpCommandHandler.java:173)
    at org.openqa.selenium.remote.server.DriverServlet.handleRequest(DriverServlet.java:200)
    at org.openqa.selenium.remote.server.DriverServlet.doPost(DriverServlet.java:162)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.openqa.selenium.remote.server.DriverServlet.service(DriverServlet.java:128)
    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

&

Driver info: driver.version: PhantomJSDriver
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:590)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:241)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:127)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:140)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:110)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:99)
    ... 14 more
 Caused by: org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start.

I suspect a permissions issue, but wondered if anyone has run into this problem before. At the very least, it would be great to work out exactly why this is working on Mac.

Upvotes: 1

Views: 1947

Answers (1)

Charlie
Charlie

Reputation: 4329

This file - phantomjsdriver.log - Can only be created by a user with file write permissions. Executing the program as 'root' fixed the issue.

Upvotes: 2

Related Questions