【问题标题】:Behat with selenium 2 fail to connect to localhost使用 selenium 2 的 Behat 无法连接到 localhost
【发布时间】:2017-03-20 13:20:32
【问题描述】:

我正在尝试在硒环境中设置我的行为测试。现在我从 dockers 开始使用 selenium,

这是我的 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)我得到错误:

无法打开连接:http POST 向http://localhost:4444/wd/hub/session 抛出Curl 错误,参数为:{"desiredCapabilities":{"tags":["cli","PHP 7.0.15-1+deb.sury.org~ trusty+1"],"browser":"firefox","ignoreZoomSetting":false,"name":"Behat 功能套件","browserName":"firefox"}}

无法连接到 localhost 端口 4444:连接被拒绝 (Behat\Mink\Exception\DriverException)

当我进入http://localhost:4444/wd/hub/sessions 时,我明白了:

{"status":13,"value":{"message":"Session [(null externalkey)] 不可用并且不在最后 1000 个终止的会话中。\n活动会话是 []","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.DriverServle t","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},{"文件名":"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","class名称":"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$2","met hodName":"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$3","methodName":"run","lineNumber": 555},{"fileName":"Thread.java","className":"java.lang.Thread","methodName":"run","lineNumber":745}]}}

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

【问题讨论】:

标签: php symfony selenium behat


【解决方案1】:

您缺少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 机器获得任何访问/访问。

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

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

另一种方法是,部署您的代码(例如测试环境),然后您可以在 behat.yml 中执行以下操作,例如:

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

【讨论】:

  • 好吧,我使用了第一种方法。似乎它奏效了。但还不够,现在我收到错误:Could not open connection: Error forwarding the new session Empty pool of VM for setup Capabilities [{browser=firefox, name=Behat feature suite, browserName=chrome, ignoreZoomSetting=false, tags=[cli, PHP 7.0.15-1+deb.sury.org~trusty+1]}] (Behat\Mink\Exception\DriverException)
  • 我编辑了我的帖子...你的服务器上的 selenium 是否有任何点击?否则尝试将behat.ymlbase_url的值编辑为base_url: http://whtaeverr_your_php_container_is_called_indocker_compose
  • 我检查了日志,似乎我的测试甚至没有达到硒。我将base_url: http://localhost 添加到我的behat.yml。但仍然出现同样的错误。
猜你喜欢
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
相关资源
最近更新 更多