minkphp / MinkSelenium2Driver

Selenium2 (webdriver) driver for Mink framework
MIT License
508 stars 162 forks source link

Base url not set #164

Closed umpirsky closed 10 years ago

umpirsky commented 10 years ago

Hi.

I am trying to run some javascript scenarios on Sylus where we use Behat3.

From my composer.json:

"require-dev": {
        "behat/behat":                       "~3.0",
        "behat/symfony2-extension":          "~2.0@dev",
        "behat/mink-extension":              "~2.0@dev",
        "behat/mink-browserkit-driver":      "~1.2@dev",
        "behat/mink-selenium2-driver":       "@dev",
        "behat/mink":                        "~1.6@dev",
        "doctrine/doctrine-fixtures-bundle": "2.2.*",
        "fzaninotto/faker":                  "~1.2",
        "phpspec/phpspec":                   "~2.0",
        "phpunit/phpunit":                   "~3.7"
    },

I get errors which basicaly tell me that base url is not set.

With Firefox 30:

    f.QueryInterface is not a function
      Build info: version: '2.42.2', revision: '6a6995d', time: '2014-06-03 17:42:03'
      System info: host: 'zenbook', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-29-generic', java.version: '1.7.0_55'
      Driver info: driver.version: unknown (WebDriver\Exception\UnknownError)

With Firefox 25.0 and verbose output:

 exception 'WebDriver\Exception\UnknownError' with message 'Target URL / is not well-formed.
      Build info: version: '2.42.2', revision: '6a6995d', time: '2014-06-03 17:42:03'
      System info: host: 'zenbook', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.13.0-29-generic', java.version: '1.7.0_55'
      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(140): WebDriver\Exception::factory(13, 'Target URL / is...')
      #1 vendor/instaclick/php-webdriver/lib/WebDriver/Session.php(130): WebDriver\AbstractWebDriver->curl('POST', '/url', Array)
      #2 vendor/behat/mink-selenium2-driver/src/Behat/Mink/Driver/Selenium2Driver.php(374): WebDriver\Session->open('/')
      #3 vendor/behat/mink/src/Behat/Mink/Session.php(143): Behat\Mink\Driver\Selenium2Driver->visit('/')
      #4 src/Sylius/Bundle/WebBundle/Behat/WebContext.php(83): Behat\Mink\Session->visit('/')
      #5 [internal function]: Sylius\Bundle\WebBundle\Behat\WebContext->iAmOnTheStoreHomepage()
      #6 vendor/behat/behat/src/Behat/Testwork/Call/Handler/RuntimeCallHandler.php(99): call_user_func_array(Array, Array)
      #7 vendor/behat/behat/src/Behat/Testwork/Call/Handler/RuntimeCallHandler.php(54): Behat\Testwork\Call\Handler\RuntimeCallHandler->executeCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
      #8 vendor/behat/behat/src/Behat/Testwork/Call/CallCenter.php(125): Behat\Testwork\Call\Handler\RuntimeCallHandler->handleCall(Object(Behat\Behat\Definition\Call\DefinitionCall))
      #9 vendor/behat/behat/src/Behat/Testwork/Call/CallCenter.php(80): 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/EventDispatchingStepTester.php(73): 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/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)
      #15 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)
      #16 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)
      #17 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)
      #18 vendor/behat/behat/src/Behat/Behat/Tester/Runtime/RuntimeFeatureTester.php(83): Behat\Behat\EventDispatcher\Tester\EventDispatchingScenarioTester->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/Hook/Tester/HookableFeatureTester.php(72): Behat\Behat\Tester\Runtime\RuntimeFeatureTester->test(Object(Behat\Behat\Context\Environment\UninitializedContextEnvironment), Object(Behat\Gherkin\Node\FeatureNode), false)
      #20 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)
      #21 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)
      #22 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)
      #23 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)
      #24 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)
      #25 vendor/behat/behat/src/Behat/Testwork/EventDispatcher/Tester/EventDispatchingExercise.php(70): Behat\Testwork\Tester\Runtime\RuntimeExercise->test(Array, false)
      #26 vendor/behat/behat/src/Behat/Testwork/Tester/Cli/ExerciseController.php(146): Behat\Testwork\EventDispatcher\Tester\EventDispatchingExercise->test(Array, false)
      #27 vendor/behat/behat/src/Behat/Testwork/Tester/Cli/ExerciseController.php(108): Behat\Testwork\Tester\Cli\ExerciseController->testSpecifications(Object(Symfony\Component\Console\Input\ArgvInput), Array)
      #28 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))
      #29 vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php(244): Behat\Testwork\Cli\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #30 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(891): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #31 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(191): Symfony\Component\Console\Application->doRunCommand(Object(Behat\Testwork\Cli\Command), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #32 vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(102): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #33 vendor/symfony/symfony/src/Symfony/Component/Console/Application.php(121): Behat\Testwork\Cli\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
      #34 vendor/behat/behat/bin/behat(31): Symfony\Component\Console\Application->run()
      #35 {main}

Part of my behat.yml:


    extensions:
        Behat\MinkExtension:
            sessions:
                default:
                    symfony2: ~
                javascript:
                    selenium2: ~
            browser_name: firefox
            base_url:     http://sylius.dev
            show_auto:    true
            show_cmd:     chromium-browser %s
        Behat\Symfony2Extension: ~

Am I missing something?

aik099 commented 10 years ago

Interesting. I think, that it's MinkExtension that should append base url from .behat.yml to the relative url, specified in the scenario step. I wonder why it doesn't do that this time.

This code is responsible for injecting base_url into final URL: https://github.com/Behat/MinkExtension/blob/8a47abd34f59f2c366aa95cae922540e1c4b1bfe/src/Behat/MinkExtension/Context/RawMinkContext.php#L124-L129 and it does that when url is detected as relative (no http word in it).

umpirsky commented 10 years ago

@aik099 Thanks for your response.

This is not called at all. It is visible in trace I posted, that RawMinkContext is not in the call trace.

aik099 commented 10 years ago

It is visible in trace I posted, that RawMinkContext is not in the call trace.

According to these lines

#4 src/Sylius/Bundle/WebBundle/Behat/WebContext.php(83): Behat\Mink\Session->visit('/')
#5 [internal function]: Sylius\Bundle\WebBundle\Behat\WebContext->iAmOnTheStoreHomepage()

your feature context class doesn't extend MinkContext (which has RawMinkContext as super class). That's why it doesn't work.

umpirsky commented 10 years ago

@aik099 Fixed in https://github.com/umpirsky/Sylius/commit/c34b2f30fdb90e54be6268d1e3320bfed8484c81. Thanks.

aik099 commented 10 years ago

Glad, that we're able to dig to problem's root so fast. Thanks.

umpirsky commented 10 years ago

Yes. Thank you @aik099.