代码之家  ›  专栏  ›  技术社区  ›  Meg Claypool

在Mac上将Behat和Mink与Selenium和Chrome、Safari或Firefox连接

  •  4
  • Meg Claypool  · 技术社区  · 7 年前

    编辑:感谢 mykbas's answer ,我的系统已启动并运行!我写了一个 pretty thorough how-to 对于任何想要分步操作的Mac用户,包括使用Docker容器的选项:)


    我看了又看,我在任何地方都找不到这个精确的问题,所以我要继续问。。。我对编程非常陌生,所以我不确定哪些信息是明显的/多余的,哪些信息是关键的。我会尽量犯太多的错误。

    我的最终目标是能够在Mac上为使用javascript的网站编写和运行Behat测试。 如果我完全走错了方向,请随时把我送到另一个方向。

    我在试着跟踪 BDD, Behat, Mink and other Wonderful Things 辅导的在我们谈到硒元素之前,一切都很顺利。

    我正在运行Mac OS 10.12.6

    我使用composer安装了Behat和一些扩展,

    composer require behat/mink-extension behat/mink-goutte-driver
    behat/mink-selenium2-driver facebook/webdriver
    

    (当我键入此内容时,我意识到我的部分问题可能是我试图使用Selenium 2驱动程序来驱动Selenium 3。。。 minkphp/MinkSelenium2Driver: Selenium 3 support #254 呃。我应该下载最新版本的Selenium 2吗?除了我读到一些关于Selenium 2不支持最新版本浏览器的内容,这将是一个令人沮丧的问题,因为它们都会自动更新到我电脑上的最新版本……)

    我下载了 Selenium Standalone Server 3.8.1 并将其应用于~/应用程序。它不在我的$路径中,但因为我直接调用它,所以我认为它不需要。

    我还下载了chromedriver和geckodriver,并将它们放在/usr/local/bin/中 在我的$路径中。

    $ ./behat --version
    behat version 3.4.3
    
    $ chromedriver --version
    ChromeDriver 2.34.522932 (4140ab217e1ca1bec0c4b4d1b148f3361eb3a03e)
    
    $ geckodriver --version
    geckodriver 0.19.1
    

    (此时,我只是在谷歌上搜索和下载 任何东西 这听起来很适用,希望 某物 工程…:叹息:)

    就浏览器版本而言,我有:

    • Chrome版本63.0.3239.84(官方版本)(64位)
    • Firefox Quantum版本63.0.3239.84(官方版本)(64位)
    • Safari版本11.0.2(12604.4.7.1.4)

    如果Behat能成功地与 任何 其中的一个。

    我的行为。yml包含:

    default:
      extensions:
        Behat\MinkExtension:
          base_url: http://127.0.0.1:8000/
          goutte: ~
          selenium2:
            wd_host: 127.0.0.1:4444/wd/hub
    

    我的FeatureContext。php包含:

    <?php
    
    use Behat\Behat\Context\Context;
    use Behat\Behat\Context\SnippetAcceptingContext;
    use Behat\Gherkin\Node\PyStringNode;
    use Behat\Gherkin\Node\TableNode;
    use Behat\MinkExtension\Context\MinkContext;
    
    /**
     * Defines application features from the specific context.
     */
    class FeatureContext extends MinkContext implements Context, SnippetAcceptingContext
    {
        /**
         * Initializes context.
         *
         * Every scenario gets its own context instance.
         * You can also pass arbitrary arguments to the
         * context constructor through behat.yml.
         */
        public function __construct()
        {
        }
    }
    

    我的/功能/搜索。功能包括:

    Feature: Search
      In order to find products dinosaurs love
      As a web user
      I need to be able to search for products
    
      @javascript
      Scenario: Searching for a product that exists
        Given I am on "/"
        When I fill in "searchTerm" with "Samsung"
        And I press "search_submit"
        Then I should see "Samsung Galaxy"
    

    在浏览器的一个单独选项卡中,我启动了Selenium Standalone Server:

    $ java -jar /Users/noxlady/Applications/selenium-server-standalone-3.8.1.jar
    19:04:54.801 INFO - Selenium build info: version: '3.8.1', revision: '6e95a6684b'
    19:04:54.801 INFO - Launching a standalone Selenium Server
    2017-12-15 19:04:55.246:INFO::main: Logging initialized @1087ms to org.seleniumhq.jetty9.util.log.StdErrLog
    19:04:55.386 INFO - Using `new FirefoxOptions()` is preferred to `DesiredCapabilities.firefox()`
    19:04:55.443 INFO - Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
    19:04:55.458 INFO - Using `new EdgeOptions()` is preferred to `DesiredCapabilities.edge()`
    19:04:55.463 INFO - Driver class not found: com.opera.core.systems.OperaDriver
    19:04:55.463 INFO - Using `new OperaOptions()` is preferred to `DesiredCapabilities.operaBlink()`
    19:04:55.467 INFO - Using `new SafariOptions()` is preferred to `DesiredCapabilities.safari()`
    19:04:55.469 INFO - Driver class not found: org.openqa.selenium.phantomjs.PhantomJSDriver
    19:04:55.570 INFO - Driver provider class org.openqa.selenium.ie.InternetExplorerDriver registration is skipped:
     registration capabilities Capabilities {browserName: internet explorer, ensureCleanSession: true, platform: WINDOWS, version: } does not match the current platform MAC
    19:04:55.570 INFO - Driver provider class org.openqa.selenium.edge.EdgeDriver registration is skipped:
     registration capabilities Capabilities {browserName: MicrosoftEdge, platform: WINDOWS, version: } does not match the current platform MAC
    19:04:55.703 INFO - Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
    19:04:55.703 INFO - Using `new EdgeOptions()` is preferred to `DesiredCapabilities.edge()`
    19:04:55.703 INFO - Using `new FirefoxOptions()` is preferred to `DesiredCapabilities.firefox()`
    19:04:55.704 INFO - Using `new OperaOptions()` is preferred to `DesiredCapabilities.operaBlink()`
    19:04:55.704 INFO - Using `new SafariOptions()` is preferred to `DesiredCapabilities.safari()`
    19:04:55.731 INFO - Using the passthrough mode handler
    2017-12-15 19:04:55.805:INFO:osjs.Server:main: jetty-9.4.7.v20170914
    2017-12-15 19:04:55.870:WARN:osjs.SecurityHandler:main: ServletContext@o.s.j.s.ServletContextHandler@1a75e76a{/,null,STARTING} has uncovered http methods for path: /
    2017-12-15 19:04:55.879:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@1a75e76a{/,null,AVAILABLE}
    2017-12-15 19:04:55.964:INFO:osjs.AbstractConnector:main: Started ServerConnector@79207381{HTTP/1.1,[http/1.1]}{0.0.0.0:4444}
    2017-12-15 19:04:55.965:INFO:osjs.Server:main: Started @1806ms
    19:04:55.965 INFO - Selenium Server is up and running
    

    “Selenium服务器已启动并运行”这一点听起来很有希望!访问两者 http://127.0.0.1:4444/ http://0.0.0.0:4444/ 在我的浏览器中,我会看到一个漂亮的Selenium独立版v.3.8.1页面(只有在终端中运行Selenium时才可用),因此Selenium jar文件似乎正在运行 某物 ...

    当我删除@javascript并运行我的测试(使用Goutte)时,我得到:

    $  ./behat
    Feature: Search
      In order to find products dinosaurs love
      As a web user
      I need to be able to search for products
    
      Scenario: Searching for a product that exists # features/search.feature:7
        Given I am on "/"                           # FeatureContext::visit()
        When I fill in "searchTerm" with "Samsung"  # FeatureContext::fillField()
        And I press "search_submit"                 # FeatureContext::pressButton()
        Then I should see "Samsung Galaxy"          # FeatureContext::assertPageContainsText()
    
    1 scenario (1 passed)
    4 steps (4 passed)
    0m3.15s (14.27Mb)
    

    然而,当我把@javascript放回去时(所以它使用的是Selenium),Firefox启动了,然后就好像坐在那里一样。大约45秒后,我的终端感到厌烦,并发出以下信息:

    ./behat --verbose
    Feature: Search
      In order to find products dinosaurs love
      As a web user
      I need to be able to search for products
    
      @javascript
      Scenario: Searching for a product that exists # features/search.feature:7
        Given I am on "/"                           # FeatureContext::visit()
          WebDriver\Exception\UnknownError: Timed out waiting 45 seconds for Firefox to start.
          Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T19:05:32.194Z'
          System info: host: 'Megs-MacBook.local', ip: 'fe80:0:0:0:1057:7410:918d:cd36%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.6', java.version: '9.0.1'
          Driver info: driver.version: unknown in vendor/instaclick/php-webdriver/lib/WebDriver/Exception.php:155
          Stack trace:
          #0 vendor/instaclick/php-webdriver/lib/WebDriver/AbstractWebDriver.php(157): WebDriver\Exception::factory(13, 'Timed out waiti...')
          #1 vendor/instaclick/php-webdriver/lib/WebDriver/WebDriver.php(70): WebDriver\AbstractWebDriver->curl('POST', '/session', Array, Array)
          #2 vendor/behat/mink-selenium2-driver/src/Selenium2Driver.php(287): WebDriver\WebDriver->session(Array, Array)
          #3 vendor/behat/mink/src/Session.php(70): Behat\Mink\Driver\Selenium2Driver->start()
          #4 vendor/behat/mink/src/Mink.php(117): Behat\Mink\Session->start()
          #5 vendor/behat/mink-extension/src/Behat/MinkExtension/Context/RawMinkContext.php(108): Behat\Mink\Mink->getSession(NULL)
          #6 vendor/behat/mink-extension/src/Behat/MinkExtension/Context/RawMinkContext.php(131): Behat\MinkExtension\Context\RawMinkContext->getSession(NULL)
          #7 vendor/behat/mink-extension/src/Behat/MinkExtension/Context/MinkContext.php(49): Behat\MinkExtension\Context\RawMinkContext->visitPath('/')
          #8 [internal function]: Behat\MinkExtension\Context\MinkContext->visit('/')
          #9 vendor/behat/behat/src/Behat/Testwork/Call/Handler/RuntimeCallHandler.php(109): call_user_func_array(Array, Array)
          #10 vendor/behat/behat/src/Behat/Testwork/Call/Handler/RuntimeCallHandler.php(64): Behat\Testwork\Call\Handler\RuntimeCallHandler->executeCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
          #11 vendor/behat/behat/src/Behat/Testwork/Call/CallCenter.php(140): Behat\Testwork\Call\Handler\RuntimeCallHandler->handleCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
          #12 vendor/behat/behat/src/Behat/Testwork/Call/CallCenter.php(96): Behat\Testwork\Call\CallCenter->handleCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
          #13 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeStepTester.php(125): Behat\Testwork\Call\CallCenter->makeCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
          #14 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeStepTester.php(73): Behat\Behat\Tester\Runtime\RuntimeStepTester->testDefinition(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), Object(Behat\Behat\Definition\SearchResult), false)
          #15 vendor/behat/behat/src/Behat/Behat/Hook/Tester/HookableStepTester.php(74): Behat\Behat\Tester\Runtime\RuntimeStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
          #16 vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/TickingStepTester.php(59): Behat\Behat\Hook\Tester\HookableStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
          #17 vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/EventDispatchingStepTester.php(73): Behat\Behat\EventDispatcher\Tester\TickingStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
          #18 vendor/behat/behat/src/Behat/Behat/Tester/StepContainerTester.php(59): Behat\Behat\EventDispatcher\Tester\EventDispatchingStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
          #19 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeScenarioTester.php(76): Behat\Behat\Tester\StepContainerTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
          #20 vendor/behat/behat/src/Behat/Behat/Hook/Tester/HookableScenarioTester.php(74): Behat\Behat\Tester\Runtime\RuntimeScenarioTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
          #21 vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/EventDispatchingScenarioTester.php(103): Behat\Behat\Hook\Tester\HookableScenarioTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
          #22 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/IsolatingScenarioTester.php(69): Behat\Behat\EventDispatcher\Tester\EventDispatchingScenarioTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
          #23 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeFeatureTester.php(84): Behat\Behat\Tester\Runtime\IsolatingScenarioTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
          #24 vendor/behat/behat/src/Behat/Behat/Hook/Tester/HookableFeatureTester.php(72): Behat\Behat\Tester\Runtime\RuntimeFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
          #25 vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/EventDispatchingFeatureTester.php(71): Behat\Behat\Hook\Tester\HookableFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
          #26 vendor/behat/behat/src/Behat/Testwork/Tester/Runtime/RuntimeSuiteTester.php(63): Behat\Behat\EventDispatcher\Tester\EventDispatchingFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
          #27 vendor/behat/behat/src/Behat/Testwork/Hook/Tester/HookableSuiteTester.php(73): Behat\Testwork\Tester\Runtime\RuntimeSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
          #28 vendor/behat/behat/src/Behat/Testwork/EventDispatcher/Tester/EventDispatchingSuiteTester.php(72): Behat\Testwork\Hook\Tester\HookableSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
          #29 vendor/behat/behat/src/Behat/Testwork/Tester/Runtime/RuntimeExercise.php(71): Behat\Testwork\EventDispatcher\Tester\EventDispatchingSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
          #30 vendor/behat/behat/src/Behat/Testwork/EventDispatcher/Tester/EventDispatchingExercise.php(70): Behat\Testwork\Tester\Runtime\RuntimeExercise->test(Array, false)
          #31 vendor/behat/behat/src/Behat/Testwork/Ordering/OrderedExercise.php(80): Behat\Testwork\EventDispatcher\Tester\EventDispatchingExercise->test(Array, false)
          #32 vendor/behat/behat/src/Behat/Testwork/Tester/Cli/ExerciseController.php(149): Behat\Testwork\Ordering\OrderedExercise->test(Array, false)
          #33 vendor/behat/behat/src/Behat/Testwork/Tester/Cli/ExerciseController.php(108): Behat\Testwork\Tester\Cli\ExerciseController->testSpecifications(Object(Symfony\Component\Console\Input\ArgvInput), Array)
          #34 vendor/behat/behat/src/Behat/Testwork/Cli/Command.php(63): Behat\Testwork\Tester\Cli\ExerciseController->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #35 vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php(242): Behat\Testwork\Cli\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #36 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(842): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #37 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(193): Symfony\Component\Console\Application->doRunCommand(Object(Behat\Testwork\Cli\Command), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #38 vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(124): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #39 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(117): Behat\Testwork\Cli\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #40 vendor/behat/behat/bin/behat(34): Symfony\Component\Console\Application->run()
          #41 {main}
    
          Next Behat\Mink\Exception\DriverException: Could not open connection: Timed out waiting 45 seconds for Firefox to start.
          Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T19:05:32.194Z'
          System info: host: 'Megs-MacBook.local', ip: 'fe80:0:0:0:1057:7410:918d:cd36%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.6', java.version: '9.0.1'
          Driver info: driver.version: unknown in vendor/behat/mink-selenium2-driver/src/Selenium2Driver.php:290
          Stack trace:
          #0 vendor/behat/mink/src/Session.php(70): Behat\Mink\Driver\Selenium2Driver->start()
          #1 vendor/behat/mink/src/Mink.php(117): Behat\Mink\Session->start()
          #2 vendor/behat/mink-extension/src/Behat/MinkExtension/Context/RawMinkContext.php(108): Behat\Mink\Mink->getSession(NULL)
          #3 vendor/behat/mink-extension/src/Behat/MinkExtension/Context/RawMinkContext.php(131): Behat\MinkExtension\Context\RawMinkContext->getSession(NULL)
          #4 vendor/behat/mink-extension/src/Behat/MinkExtension/Context/MinkContext.php(49): Behat\MinkExtension\Context\RawMinkContext->visitPath('/')
          #5 [internal function]: Behat\MinkExtension\Context\MinkContext->visit('/')
          #6 vendor/behat/behat/src/Behat/Testwork/Call/Handler/RuntimeCallHandler.php(109): call_user_func_array(Array, Array)
          #7 vendor/behat/behat/src/Behat/Testwork/Call/Handler/RuntimeCallHandler.php(64): Behat\Testwork\Call\Handler\RuntimeCallHandler->executeCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
          #8 vendor/behat/behat/src/Behat/Testwork/Call/CallCenter.php(140): Behat\Testwork\Call\Handler\RuntimeCallHandler->handleCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
          #9 vendor/behat/behat/src/Behat/Testwork/Call/CallCenter.php(96): Behat\Testwork\Call\CallCenter->handleCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
          #10 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeStepTester.php(125): Behat\Testwork\Call\CallCenter->makeCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
          #11 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeStepTester.php(73): Behat\Behat\Tester\Runtime\RuntimeStepTester->testDefinition(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), Object(Behat\Behat\Definition\SearchResult), false)
          #12 vendor/behat/behat/src/Behat/Behat/Hook/Tester/HookableStepTester.php(74): Behat\Behat\Tester\Runtime\RuntimeStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
          #13 vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/TickingStepTester.php(59): Behat\Behat\Hook\Tester\HookableStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
          #14 vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/EventDispatchingStepTester.php(73): Behat\Behat\EventDispatcher\Tester\TickingStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
          #15 vendor/behat/behat/src/Behat/Behat/Tester/StepContainerTester.php(59): Behat\Behat\EventDispatcher\Tester\EventDispatchingStepTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\StepNode), false)
          #16 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeScenarioTester.php(76): Behat\Behat\Tester\StepContainerTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
          #17 vendor/behat/behat/src/Behat/Behat/Hook/Tester/HookableScenarioTester.php(74): Behat\Behat\Tester\Runtime\RuntimeScenarioTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
          #18 vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/EventDispatchingScenarioTester.php(103): Behat\Behat\Hook\Tester\HookableScenarioTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
          #19 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/IsolatingScenarioTester.php(69): Behat\Behat\EventDispatcher\Tester\EventDispatchingScenarioTester->test(Object(Behat\Behat\Context\Environment\InitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
          #20 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeFeatureTester.php(84): Behat\Behat\Tester\Runtime\IsolatingScenarioTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), Object(Behat\Gherkin\Node\ScenarioNode), false)
          #21 vendor/behat/behat/src/Behat/Behat/Hook/Tester/HookableFeatureTester.php(72): Behat\Behat\Tester\Runtime\RuntimeFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
          #22 vendor/behat/behat/src/Behat/Behat/EventDispatcher/Tester/EventDispatchingFeatureTester.php(71): Behat\Behat\Hook\Tester\HookableFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
          #23 vendor/behat/behat/src/Behat/Testwork/Tester/Runtime/RuntimeSuiteTester.php(63): Behat\Behat\EventDispatcher\Tester\EventDispatchingFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
          #24 vendor/behat/behat/src/Behat/Testwork/Hook/Tester/HookableSuiteTester.php(73): Behat\Testwork\Tester\Runtime\RuntimeSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
          #25 vendor/behat/behat/src/Behat/Testwork/EventDispatcher/Tester/EventDispatchingSuiteTester.php(72): Behat\Testwork\Hook\Tester\HookableSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
          #26 vendor/behat/behat/src/Behat/Testwork/Tester/Runtime/RuntimeExercise.php(71): Behat\Testwork\EventDispatcher\Tester\EventDispatchingSuiteTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Testwork\Specification\GroupedSpecificationIterator), false)
          #27 vendor/behat/behat/src/Behat/Testwork/EventDispatcher/Tester/EventDispatchingExercise.php(70): Behat\Testwork\Tester\Runtime\RuntimeExercise->test(Array, false)
          #28 vendor/behat/behat/src/Behat/Testwork/Ordering/OrderedExercise.php(80): Behat\Testwork\EventDispatcher\Tester\EventDispatchingExercise->test(Array, false)
          #29 vendor/behat/behat/src/Behat/Testwork/Tester/Cli/ExerciseController.php(149): Behat\Testwork\Ordering\OrderedExercise->test(Array, false)
          #30 vendor/behat/behat/src/Behat/Testwork/Tester/Cli/ExerciseController.php(108): Behat\Testwork\Tester\Cli\ExerciseController->testSpecifications(Object(Symfony\Component\Console\Input\ArgvInput), Array)
          #31 vendor/behat/behat/src/Behat/Testwork/Cli/Command.php(63): Behat\Testwork\Tester\Cli\ExerciseController->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #32 vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php(242): Behat\Testwork\Cli\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #33 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(842): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #34 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(193): Symfony\Component\Console\Application->doRunCommand(Object(Behat\Testwork\Cli\Command), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #35 vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(124): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #36 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(117): Behat\Testwork\Cli\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
          #37 vendor/behat/behat/bin/behat(34): Symfony\Component\Console\Application->run()
          #38 {main}
        When I fill in "searchTerm" with "Samsung"  # FeatureContext::fillField()
        And I press "search_submit"                 # FeatureContext::pressButton()
        Then I should see "Samsung Galaxy"          # FeatureContext::assertPageContainsText()
    
    --- Failed scenarios:
    
        features/search.feature:7
    
    1 scenario (1 failed)
    4 steps (1 failed, 3 skipped)
    0m46.70s (13.28Mb)
    

    同时,在运行Selenium Server的终端选项卡中添加了以下内容:

    2017-12-15 19:14:05.837:INFO:osjshC.ROOT:qtp1021436681-16: org.openqa.selenium.remote.server.WebDriverServlet-49049a04: Initialising WebDriverServlet
    19:14:05.975 INFO - Found handler: org.openqa.selenium.remote.server.commandhandler.BeginSession@a667021
    19:14:05.990 INFO - /session: Executing POST on /session (handler: BeginSession)
    19:14:06.197 INFO - Capabilities are: Capabilities {browser: firefox, browserName: firefox, ignoreZoomSetting: false, marionette: false, name: Behat feature suite, tags: [Megs-MacBook.local, PHP 7.0.24]}
    19:14:06.202 INFO - Capabilities {browser: firefox, browserName: firefox, ignoreZoomSetting: false, marionette: false, name: Behat feature suite, tags: [Megs-MacBook.local, PHP 7.0.24]} matched class org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.firefox.XpiDriverService)
    

    如果你们中有人有在Mac上与Behat浏览器对话的经验,我将非常非常感谢你们的帮助。如果你需要更多的信息(比如日志之类的),我会完全提供,但你可能需要给我“白痴指南”,告诉我如何找到它。。。

    无论如何,感谢您努力完成这一切,并提前感谢您提供的任何帮助:)

    3 回复  |  直到 6 年前
        1
  •  3
  •   mykbas    7 年前

    遇到同样的问题 known issue with new mink-extension 2.3 你只需要设置 marionette: null

    extensions:
        Behat\MinkExtension:
            base_url: http://127.0.0.1:8000
            javascript_session: selenium2
    
            browser_name: chrome
            selenium2:
                capabilities:
                    # required by mink-extension 2.3
                    marionette: null
                    browserName: chrome
                    browser: chrome
                    version: 63
    
        2
  •  2
  •   lauda    7 年前

    启动selenium服务器时,需要设置驱动程序。

    java -Dwebdriver.chrome.driver=path_to_chrome_driver -jar path_to_selenium_server.jar
    

    我建议将它们(selenium服务器和浏览器驱动程序)放在同一个目录中,并使用bash脚本启动服务器。
    您不必指定 wd_host 如果服务器位于具有默认端口的本地计算机上 4444 .

    我没有尝试firefox,chrome很好用。 您何时使用浏览器 @javascript 在功能级别标记,您也可以使用 @insulated 因此,您的浏览器开始时没有cookie和缓存。

    @insulated @javascript
    Feature: Feature name
    
    
      @my_tag
      Scenario: Feature name - scenario summary

    尝试一下行为。yml类:

    default:
      suites:
        default:
          contexts:
            - FeatureContext
      formatters:
        pretty:
        junit:
        html:
          output_path: %paths.base%/report
    
      extensions:
        Behat\MinkExtension:
          goutte: ~
          selenium2:
            browser: chrome
            capabilities:
              chrome:
                switches:
                  - "start-maximized"
          base_url: 'base_url'
    
    
    dev:
      extensions:
        Behat\MinkExtension:
          base_url: 'base_url_dev'
    

    当您使用其他浏览器时,还应使用该驱动程序启动selenium服务器,并在behat中更改名称。yml,对于firefox,您需要geckdriver和gecko。驱动程序,而不是chrome。

        3
  •  1
  •   Bjinse    7 年前

    另一种解决方案是跳过selenium,通过D.More的ChromeExtension直接使用chrome驱动程序。使用Chrome驱动程序可以在窗口和无头环境下工作。使用无头版本的chrome和该驱动程序也比使用selenium快得多。参考我的行为。yml:

    default:
    translation:
        locale: nl
    extensions:
        DMore\ChromeExtension\Behat\ServiceContainer\ChromeExtension: ~
        Behat\MinkExtension:
            browser_name: chrome
            base_url: https://www.yoursite.com
            sessions:
                default:
                    chrome:
                        api_url: "http://127.0.0.1:9222"
                        download_behavior: allow
                        download_path: ~/Downloads
                        validate_certificate: false
    

    还有我的作曲家。json:

    {
    "require-dev": {
        "behat/behat": "^3.4",
        "behat/mink-extension": "^2.3",
        "behat/mink-selenium2-driver": "^1.3"
    },
    "require": {
        "behat/mink-goutte-driver": "^1.2",
        "dmore/chrome-mink-driver": "^2.5",
        "dmore/behat-chrome-extension": "^1.1"
    }
    

    }

    请注意,在运行behat之前,您需要启动chrome(无头或无头)。为此,我在中创建了三个别名。bash\u配置文件(在我的主页目录中:

    alias chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome'
    alias chromedriver='chrome --disable-gpu --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222'
    alias chromedriverheadless='chrome --disable-gpu --headless --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222'
    

    chromedriver(检查$路径某处的位置)应与安装的Chrome版本匹配。如果停止工作,Chrome通常会自我更新,但chromedriver不会。 我的mac上有这个解决方案。