Selenium:无法找到请求的二进制文件

时间:2017-06-07 18:14:42

标签: selenium firefox

设置

  • 操作系统:Ubuntu 17
  • Selenium :2.53.1
    • 使用参数启动:-Dwebdriver.firefox.bin="/home/tyler/Documents/Code/dev/tests/functional/firefox-47.0.1/firefox-bin"
  • Firefox :47.0.1
    • 安装路径:/home/tyler/Documents/Code/dev/tests/functional/firefox-47.0.1/
  • 驱动程序:geckodriver 0.11.1

注意: 我尝试过使用最新版本的selenium,geckodriver,Firefox以及Chrome,但似乎有一个兼容性问题,因为当PHPUnit启动浏览器时Selenium崩溃。 [Details Here]

问题

启动测试时,Selenium会返回如下所示的文本。最相关的部分似乎是WARN - Exception: 'webdriver.firefox.bin' property set, but unable to locate the requested binary: "/home/tyler/Documents/Code/dev/tests/functional/firefox-47.0.1/firefox-bin"

深入研究Selenium的回购,我看到here当Java方法File.Exist()没有返回true时抛出这是一个错误。为了解决这个问题,我在Selenium独立服务器jar和Firefox目录上执行了chmod 777,以确保可以从中读取。

13:53:30.688 INFO - Executing: [new session: Capabilities [{0={platform=[{value=LINUX}]}, browserName=firefox}]])
13:53:30.694 INFO - Creating a new session for Capabilities [{0={platform=[{value=LINUX}]}, browserName=firefox}]
13:53:30.698 WARN - Exception thrown
java.util.concurrent.ExecutionException: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03'
System info: host: 'tyler-Precision-5520', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.10.0-21-generic', java.version: '1.8.0_131'
Driver info: driver.version: unknown
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.openqa.selenium.remote.server.DefaultSession.execute(DefaultSession.java:183)
        at org.openqa.selenium.remote.server.DefaultSession.<init>(DefaultSession.java:119)
        at org.openqa.selenium.remote.server.DefaultSession.createSession(DefaultSession.java:95)
        at org.openqa.selenium.remote.server.DefaultDriverSessions.newSession(DefaultDriverSessions.java:124)
        at org.openqa.selenium.remote.server.handler.NewSession.handle(NewSession.java:59)
        at org.openqa.selenium.remote.server.handler.NewSession.handle(NewSession.java:1)
        at org.openqa.selenium.remote.server.rest.ResultConfig.handle(ResultConfig.java:111)
        at org.openqa.selenium.remote.server.JsonHttpCommandHandler.handleRequest(JsonHttpCommandHandler.java:79)
        at org.openqa.selenium.remote.server.DriverServlet.handleRequest(DriverServlet.java:204)
        at org.openqa.selenium.remote.server.DriverServlet.doPost(DriverServlet.java:166)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at org.openqa.selenium.remote.server.DriverServlet.service(DriverServlet.java:132)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        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.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03'
System info: host: 'tyler-Precision-5520', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.10.0-21-generic', java.version: '1.8.0_131'
Driver info: driver.version: unknown
        at org.openqa.selenium.remote.server.FirefoxDriverProvider.callConstructor(FirefoxDriverProvider.java:101)
        at org.openqa.selenium.remote.server.FirefoxDriverProvider.newInstance(FirefoxDriverProvider.java:68)
        at org.openqa.selenium.remote.server.DefaultDriverFactory.newInstance(DefaultDriverFactory.java:60)
        at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.java:222)
        at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.java:1)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:176)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.openqa.selenium.remote.server.FirefoxDriverProvider.callConstructor(FirefoxDriverProvider.java:91)
        ... 9 more
Caused by: java.lang.ExceptionInInitializerError
        at org.openqa.selenium.firefox.FirefoxBinary.<init>(FirefoxBinary.java:60)
        at org.openqa.selenium.firefox.FirefoxBinary.<init>(FirefoxBinary.java:56)
        at org.openqa.selenium.firefox.FirefoxDriver.getBinary(FirefoxDriver.java:203)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:128)
        ... 14 more
Caused by: org.openqa.selenium.WebDriverException: 'webdriver.firefox.bin' property set, but unable to locate the requested binary: "/home/tyler/Documents/Code/dev/tests/functional/firefox-47.0.1/firefox-bin"
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03'
System info: host: 'tyler-Precision-5520', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.10.0-21-generic', java.version: '1.8.0_131'
Driver info: driver.version: FirefoxDriver
        at org.openqa.selenium.firefox.internal.Executable.locateFirefoxBinaryFromSystemProperty(Executable.java:145)
        at org.openqa.selenium.firefox.internal.Executable.<clinit>(Executable.java:45)
        ... 18 more
13:53:30.701 WARN - Exception: 'webdriver.firefox.bin' property set, but unable to locate the requested binary: "/home/tyler/Documents/Code/dev/tests/functional/firefox-47.0.1/firefox-bin"

1 个答案:

答案 0 :(得分:0)

在默认目录中安装Firefox会更容易,因此您可以这样做:

WebDriver driver = new FirefoxDriver();

您也可以将您的目录添加到系统的PATH变量中(需要重新启动)。

最后,您可以在代码中定义路径。来自另一个Q/A on SO的Java示例:

File browserAppPath = new File("/usr/bin/firefox/firefox-bin");
WebDriver driver = new FirefoxDriver( new FirefoxBinary(browserAppPath), new FirefoxProfile());