Behat with selenium 2 无法连接到本地主机

Behat with selenium 2 fail to connect to localhost

我正在尝试在 selenium 环境中设置行为测试。现在我得到了以 dockers,

开头的硒

那是我的 docker-compose.yml 配置:

hub:
  image: selenium/hub
  ports:
    - "4444:4444"

chrome:
  image: selenium/node-chrome
  links:
    - hub

然后我配置了 behat.yml:

default:
    suites:
        default:
            paths:
                features: 'tests/features'
                bootstrap:  'tests/features/bootstrap'
            contexts:
                - FeatureContext: ~
    extensions:
        Behat\Symfony2Extension: ~
        Behat\MinkExtension:
            base_url:  http://localhost
            selenium2: ~

当我用@javascript 启动我的测试时(我想这个启动 selenium env)我得到错误:

Could not open connection: Curl error thrown for http POST to http://localhost:4444/wd/hub/session with params: {"desiredCapabilities":{"tags":["cli","PHP 7.0.15-1+deb.sury.org~trusty+1"],"browser":"firefox","ignoreZoomSetting":false,"name":"Behat feature suite","browserName":"firefox"}}

Failed to connect to localhost port 4444: Connection refused (Behat\Mink\Exception\DriverException)

当我登上 http://localhost:4444/wd/hub/sessions 时,我得到:

{"status":13,"value":{"message":"Session [(null externalkey)] not available and is not among the last 1000 terminated sessions.\nActive sessions are[]","class":"org.openqa.grid.common.exception.GridException","stackTrace":[{"fileName":"ActiveTestSessions.java","className":"org.openqa.grid.internal.ActiveTestSessions","methodName":"getExistingSession","lineNumber":110},{"fileName":"Registry.java","className":"org.openqa.grid.internal.Registry","methodName":"getExistingSession","lineNumber":404},{"fileName":"RequestHandler.java","className":"org.openqa.grid.web.servlet.handler.RequestHandler","methodName":"getSession","lineNumber":232},{"fileName":"RequestHandler.java","className":"org.openqa.grid.web.servlet.handler.RequestHandler","methodName":"process","lineNumber":117},{"fileName":"DriverServlet.java","className":"org.openqa.grid.web.servlet.DriverServlet","methodName":"process","lineNumber":83},{"fileName":"DriverServlet.java","className":"org.openqa.grid.web.servlet.DriverServlet","methodName":"doGet","lineNumber":61},{"fileName":"HttpServlet.java","className":"javax.servlet.http.HttpServlet","methodName":"service","lineNumber":687},{"fileName":"HttpServlet.java","className":"javax.servlet.http.HttpServlet","methodName":"service","lineNumber":790},{"fileName":"ServletHolder.java","className":"org.seleniumhq.jetty9.servlet.ServletHolder","methodName":"handle","lineNumber":808},{"fileName":"ServletHandler.java","className":"org.seleniumhq.jetty9.servlet.ServletHandler","methodName":"doHandle","lineNumber":587},{"fileName":"SessionHandler.java","className":"org.seleniumhq.jetty9.server.session.SessionHandler","methodName":"doHandle","lineNumber":221},{"fileName":"ContextHandler.java","className":"org.seleniumhq.jetty9.server.handler.ContextHandler","methodName":"doHandle","lineNumber":1127},{"fileName":"ServletHandler.java","className":"org.seleniumhq.jetty9.servlet.ServletHandler","methodName":"doScope","lineNumber":515},{"fileName":"SessionHandler.java","className":"org.seleniumhq.jetty9.server.session.SessionHandler","methodName":"doScope","lineNumber":185},{"fileName":"ContextHandler.java","className":"org.seleniumhq.jetty9.server.handler.ContextHandler","methodName":"doScope","lineNumber":1061},{"fileName":"ScopedHandler.java","className":"org.seleniumhq.jetty9.server.handler.ScopedHandler","methodName":"handle","lineNumber":141},{"fileName":"HandlerWrapper.java","className":"org.seleniumhq.jetty9.server.handler.HandlerWrapper","methodName":"handle","lineNumber":97},{"fileName":"Server.java","className":"org.seleniumhq.jetty9.server.Server","methodName":"handle","lineNumber":499},{"fileName":"HttpChannel.java","className":"org.seleniumhq.jetty9.server.HttpChannel","methodName":"handle","lineNumber":310},{"fileName":"HttpConnection.java","className":"org.seleniumhq.jetty9.server.HttpConnection","methodName":"onFillable","lineNumber":257},{"fileName":"AbstractConnection.java","className":"org.seleniumhq.jetty9.io.AbstractConnection","methodName":"run","lineNumber":540},{"fileName":"QueuedThreadPool.java","className":"org.seleniumhq.jetty9.util.thread.QueuedThreadPool","methodName":"runJob","lineNumber":635},{"fileName":"QueuedThreadPool.java","className":"org.seleniumhq.jetty9.util.thread.QueuedThreadPool","methodName":"run","lineNumber":555},{"fileName":"Thread.java","className":"java.lang.Thread","methodName":"run","lineNumber":745}]}}

我想这是 behat 配置的问题,但我不确定,因为我刚刚开始使用 behat 和 selenium。如果有人知道出了什么问题,我会很高兴得到一些帮助。

您缺少 wd_hostcapabilities 选项

试试这样的东西:

default:
    suites:
        default:
            paths:
                features: 'tests/features'
                bootstrap:  'tests/features/bootstrap'
            contexts:
                - FeatureContext: ~
    extensions:
        Behat\Symfony2Extension: ~
        Behat\MinkExtension:
            selenium2:
                browser: "chrome"
                wd_host: http://hub:4444/wd/hub

您的集线器也需要能够访问您的本地主机.....其中测试是 运行。

首先,尝试检查服务器的 apache/nginx 等,看看是否从 selenium 机器上得到任何 access/visits。

类似于tail -f /var/log/apache/access.log

或者你保存文件的任何地方....如果你什么也没得到,那么显然 selenium 没有访问你的机器

一种不同的方法是,部署您的代码作为测试环境的示例,然后您可以在 behat.yml 中执行某些操作,例如:

    Behat\MinkExtension:
        base_url:  http://my_test_host.com