From Install to JS Testing

Video not working?

It looks like your browser may not support the H264 codec. If you're using Linux, try a different browser or try installing the gstreamer0.10-ffmpeg gstreamer0.10-plugins-good packages.

Thanks! This saves us from needing to use Flash or encode videos in multiple formats. And that let's us get back to making more videos :). But as always, please feel free to message us.

Welcome to the magical world of Behat, my favorite library. No joke this thing is the best. Behat is about two things:

BDD, Functional Testing and... Planning a Feature???

First, functionally testing your application. Which means writing code that will open a browser, fill out a form, hit submit and verify text on the other side.

Why test your application? Well, imagine you are in charge of safety at Jurassic Park, your job is to make sure guests aren't eaten by dinosaurs. You need to be certain that the new pterodactyl exhibit that's being put in won't turn off the electric fence around the velociraptor pen. No tests? Good luck, they know how to open doors.

And second, designing your application. As developers we'll often just start coding without thinking about what we're building or how the feature will behave.

Using behavior driven development, which Behat helps you do, you'll actually plan things out beforehand.

Imagine a world where communication on your team is perfect, you always deliver exactly what your client wants, electricity on the raptor fence never goes down and chocolate ice cream is always free. Yep, that's where we're going.

Behat Docs

Over in the browser, let's surf to the Behat documentation. In this tutorial we're covering version 3, and for whatever reason when I recorded this the website still defaults to version 2.5. So double check that you are actually looking at version 3's documentation.

I've got our project, the raptor store, loaded here. This is where dinosaurs go for the newest iphone and other cool electronics. There's a homepage, an admin section and that's basically it. This store is built using a very small Symfony2 application -- but hey, don't panic if you're not using Symfony: everything here will translate to whatever you're using.

Cool, we've got a search box, let's look up some sweet Samsung products. And here are the two results we have. I want to start this whole Behat thing by testing this. Hold onto your butts, let's going to get this thing running!

Install and Configuration

Over in the terminal run composer require and instead of using behat/behat we'll grab: behat/mink-extension and behat/mink-goutte-driver:

composer require behat/mink-extension behat/mink-goutte-driver

These are plugins for Behat and another library called Mink and they require Behat and Mink. We see the Mink library downloaded here, and the Behat library downloaded down there. So life is good!

Once you've downloaded Behat you'll have access to an executable called ./vendor/bin/behat or just bin/behat for Symfony2 users. Running it now gives us a nice strong error:

vendor/bin/behat

That's ok because we need to run it with --init at the end just one time in our application:

vendor/bin/behat --init

This did an underwhelming amount of things for us. It created two directories and one file.

In PhpStorm we see a features directory, a bootstrap directory and a little FeatureContext.php file and that's all of it:

... lines 1 - 2
use Behat\Behat\Context\Context;
use Behat\Behat\Context\SnippetAcceptingContext;
... lines 5 - 6
... lines 8 - 10
class FeatureContext implements Context, SnippetAcceptingContext
{
... lines 13 - 19
public function __construct()
{
}
}

While we're here, I'll add a use statement for MinkContext and make it extend that. I'll explain that in a minute:

... lines 1 - 6
use Behat\MinkExtension\Context\MinkContext;
... lines 9 - 11
class FeatureContext extends MinkContext implements Context, SnippetAcceptingContext
... lines 13 - 25

One last bit of setup: at the root of your project create a behat.yml file. I'll paste in some content to get us started:

6 lines behat.yml
default:
extensions:
Behat\MinkExtension:
base_url: http://localhost:8000
goutte: ~

When we run Behat it will looks for a behat.yml file and this tells it:

Yo! Our application lives at localhost:8000, so look for it there.

Your First Feature and Scenario

Behat is installed, let's get to writing features! In the features directory create a new file called search.feature and we'll just start describing the search feature on the raptor store using a language called Gherkin which you're about to see here.

Feature: Search
In order to find products dinosaurs love
As a website user
I need to be able to search for products
... lines 5 - 11

Here I'm just using human readable language to describe the search feature in general. Within each feature we'll have many different scenarios or user flows. So let's start with Scenario: Searching for a product that exists. Now using very natural language I'll describe the flow.

... lines 1 - 5
Scenario: Search for a word that exists
Given I am on "/"
When I fill in "searchTerm" with "Samsung"
And I press "search_submit"
Then I should see "Samsung Galaxy S II"

Don't stress out about the formatting of this, we'll cover that in detail.

The only two things that should look weird to you are searchTerm and search_submit because they are weird. searchTerm is the name attribute of this box here, and search_submit is the id of this button. We'll talk more about this later: I'm actually breaking some rules. But I want to get this working as quickly as possible.

Running Behat

Ready for me to blow your mind? Just by writing this one scenario we now have a test for our app. In the terminal run ./vendor/bin/behat and boom! It just read that scenario and actually went to our homepage, filled in the search box, pressed the button and verified that "Samsung Galaxy" was rendering on the next page. Why don't we see this happen? By default, it runs things using invisible curl request instead of opening up a real browser.

Testing JavaScript

The downside to this is that if you have JavaScript on your page that this scenario depends on, it isn't going to work since this isn't actually opening up a real browser. So, how can we run this in a real browser? There are actually a bunch of different ways. The easiest is by using Selenium.

Grab another library with composer require behat/mink-selenium2-driver. You'll also need to download the selenium server which is really easy, it's just a jar file. Click this link here under downloads to get the Selenium Standalone Server. I already have this, so I'm not actually going to download it.

To run things in Selenium, open a new tab in your terminal, and run the jar file that you just downloaded. For me that's

java -jar ~/Downloads/selenium-server-standalone-2.45.0.jar

Tip

Firefox 47.0.0 and lower is not supported at all since Selenium 3.0.0 - update Firefox to the latest version and install the new geckodriver for it in order to use the latest Selenium server.

This will load and run as a daemon, so it should just hang there.

Our library is done downloading and we just need to activate it in our behat.yml with the line:

7 lines behat.yml
default:
extensions:
Behat\MinkExtension:
... lines 4 - 5
selenium2: ~

This gives me the option to use goutte to run the test using curl requests or Selenium to have things run in a browser. By default, this will just select goutte. So how do we make it use Selenium? I'm so glad you asked!

Above the scenario that you want to run in Selenium add @javascript:

... lines 1 - 5
@javascript
Scenario: Search for a word that exists
... lines 8 - 12

And that's it. Go back to the terminal and let's rerun this test. It actually opens the browser, it's quick but you can see it clicking around to complete the scenario. Cool!

Tip

FireFox is buggy with the new Selenium 3 server that's why it's preferable to use Google Chrome. You can explicitly specify the browser in the behat.yml config file:

# behat.yml
default:
  extensions:
    Behat\MinkExtension:
      browser_name: chrome

We write human readable instructions and they turn into functional tests, and this just barely scratches the surface of how this will change your development. Let's keep going and figure out what's really going on here.

Leave a comment!

  • 2020-02-10 Jf

    Hi weaverryan

    I added these lines to my composer.json
    And all my tests work!
    Yes very much that behat is compatible sf5


    "repositories": [
    {
    "type": "vcs",
    "url": "https://github.com/ewbarnard/Mink.git"
    },
    {
    "type": "vcs",
    "url": "https://github.com/ewbarnard/MinkExtension.git"
    },
    {
    "type": "vcs",
    "url": "https://github.com/jfsenechal/SymfonyExtension.git"
    },
    {
    "type": "vcs",
    "url": "https://github.com/jfsenechal/contexts.git"
    }
    ]

  • 2020-02-06 weaverryan

    Hey Cristóbal Rejdych!

    I haven't checked Ed's work, but in order for this all to work, you need to use Ed's fork of the GitHub packages instead of the real ones. For example, is fork of friends-of-behat/symfony-extension lives at https://github.com/ewbarnar... - and I talk a bit ab out how you would use a forked repository here: https://symfonycasts.com/sc...

    Overall, relying in forked packages is not a great idea... the best is that we would get Symfony 5 support in Behat soon :/.

    Cheers!

  • 2020-02-06 weaverryan

    Hey Jf!

    I haven't taken a look at Ed' work, but typically if you want to point Composer at a fork instead of the real repository, here is a comment explaining a bit about that: https://symfonycasts.com/sc...

    Let us know if it works! And hopefully Behat will have proper Symfony 5 support soon.

    Cheers!

  • 2020-02-06 Cristóbal Rejdych

    I follow your steps but when i try install (behat/mink:dev-master --dev) I get error message it requires symfony/css-selector version ^2.7 | ^3.0 | ^4.0 . I had installed css-selector 5.0.4 and I couldn't downgrade it to 4.0. Can you tell me how you resolve that conflict? Thanks for reply .

  • 2020-02-06 Jf

    Hi Diego
    it's for symfony 5
    I follow the explanations of Ed Barnard https://disqus.com/by/disqu...
    I fork the 4 projects mentioned.
    I change the composer.json so that it is compatible with sf5
    but i don't know how to install these forks in my app

  • 2020-02-05 Diego Aguiar

    Hey Jf

    I don't fully understand your question. To make Behat work with this project you will have to first, download the course code from this page. Run composer install, and then follow the steps that Ed Barnard posted

    Cheers!

  • 2020-02-05 Jf

    Hello

    I forked this repositories and update their composer files, but how can I install this in my application ?
    Should i create packages ?

  • 2020-01-29 weaverryan

    Hey Ed Barnard!

    Thanks for posting this :). This tutorial is on my list to "check" because I feared that it was totally incompat with Symfony 5... or at least you would need to do some magic to get it to work. I'll hopefully have some details soon to make this installable on Symfony 5 - some repositories may need a "poke" to release Symfony5-compatible versions.

    Cheers!

  • 2020-01-25 Ed Barnard

    To install on Symfony 5, I needed to fork the following four repos and update their composer.json files to allow Symfony 5 packages:

    - Fork behat/mink
    - Fork behat/mink-extension
    - Fork behat/symfony2-extension
    - Fork friends-of-behat/symfony-extension (remove package-builder conflict declaration)

    My installation steps are:


    symfony composer update
    symfony composer req behat/behat:dev-master --dev
    symfony composer req behat/mink:dev-master --dev
    symfony composer req behat/mink-extension:dev-master --dev
    symfony composer req behat/symfony2-extension:dev-master --dev
    symfony composer req friends-of-behat/symfony-extension:dev-master --dev
    vendor/bin/behat
    symfony composer req phpunit --dev

    The demo feature file works with the above setup but I've not gone beyond that point as I type this.

  • 2019-11-08 Victor Bocharsky

    Hey Ronald,

    Thank you for sharing the version that works for you. Yeah, with latest version it works not perfect. I'd recommend you to try to use Google Chrome instead of Firefox, it might work better with Behat nowadays.

    Cheers!

  • 2019-11-07 Ronald Fischer

    I had the same problems with running Selenium in Docker. When I limited the version of selenium/standalone-firefox to 2.53.1 the tests went through. Seems like the Mink Selenium drivers have trouble with newer browser/Selenium versions. Not that surprising considering the last stable version is from 2016. The development versions didn't work either.

    The strange thing is, that when i ran behat with the -v parameter it actually showed the correct html.

  • 2019-10-30 Victor Bocharsky

    Hey Gonzalo,

    Hm, I don't know how it works internally, but we do use Docker containers on our CircleCI and it just works. As I understand, our base containers is "php" ( https://hub.docker.com/_/php ) and our Selenium containers is "selenium/standalone-chrome" ( https://hub.docker.com/r/se... ). So, I know little about Docker, but these two just work for us, though not sure what's done behind the scene of it. What Selenium container do you use? Try to use this one. I suppose, you just need to forward some ports, i.e. make them explicit and accessible from the Selenium container to your host machine, or maybe for your PHP containers instead, not sure.

    As a workaround, I suppose you can just install the Selenium server manually on your PHP container and spin up it,

    I hope this helps!

    Cheers!

  • 2019-10-29 Gonzalo Guevara

    How to use it with docker, I have initialized a container with selenium, but I can't connect it with another container that has the php application inside. Any ideas?

  • 2019-10-25 Diego Aguiar

    Is your web-server running? Also, remember that you need to start chrome and selenium in case you are using it

    Cheers!

  • 2019-10-25 Diego Aguiar

    Hey RAJAONA Ywoumé

    Try installing behat/mink@dev-master it's not recommended to install the dev-master branch but in this case they don't give us other option until they add compatibility with Symfony4 and since it's a dev dependency there is no much risk being taken

    Cheers!

  • 2019-10-25 RAJAONA Ywoumé

    Hi, someone can help me ???
    Could not open connection: Unable to create new service: ChromeDriverService

  • 2019-10-25 RAJAONA Ywoumé

    mink extension doesn't work in my environement
    SF4.3 and php7.3
    - behat/mink-extension 2.3.0 requires behat/mink ^1.5 -> satisfiable by behat/mink[v1.5.0, v1.6.0, v1.6.1, v1.7.0, v1.7.1].
    - behat/mink-extension 2.3.1 requires behat/mink ^1.5 -> satisfiable by behat/mink[v1.5.0, v1.6.0, v1.6.1, v1.7.0, v1.7.1].
    - behat/mink v1.7.1 requires symfony/css-selector ~2.1|~3.0 -> no matching package found.
    - behat/mink v1.7.0 requires symfony/css-selector ~2.1 -> no matching package found.
    - behat/mink v1.6.1 requires symfony/css-selector ~2.0 -> no matching package found.
    - behat/mink v1.6.0 requires symfony/css-selector ~2.0 -> no matching package found.
    - behat/mink v1.5.0 requires symfony/css-selector ~2.0 -> no matching package found.
    - Installation request for behat/mink-extension ^2.3 -> satisfiable by behat/mink-extension[2.3.0, 2.3.1].

    i think that the library work with older library ??? or ??? please help me ? i cant work with demo when installing dependency i have error continue 2 so i migrate in sf4 the source code but i have a pbm when i'm installing mink library, someone can help me please ?

  • 2019-08-15 weaverryan

    Hey Virginie Burlot!

    > I don't have the time to use more than one technology. I barely have the time to implement one,

    I get that :p.

    > I don't know if I will go for Behat, PHPUnit, or phpscpec. I'm following your course on PHPUnit at this time, and will folliow with the one on phpscpec next. I liked how you user Behat on the REST API courses though.

    PHPUnit will be your easiest option if you want to implement tests on your API. That's simply because it's the "lowest-level" tool - there's no BDD or magic at all, which has some negatives, but also lowers the barrier to entry. Using Behat is probably the highest barrier to entry with the API stuff (even though it's fun to use it). A middle-ground would probably be to use PHPUnit, but in a BDD kind of way. You wouldn't have feature files or scenarios (sadly), but you still could think of each test class as a "feature" and each method as a "scenario" (and you could even name that method in a descriptive way to show what "thing" you're API user is actually trying to accomplish in that test). By building a base "test class" with your own helper methods, you can also help make your tests more descriptive - e.g. instead of something like $client->request('POST', '/login'), you would say $this->login(), which is shorter... but also more descriptive.

    Anyways, take that advice or leave it - it's all up to what you want and "can" take on :).

    Cheers!

  • 2019-08-12 Virginie Burlot

    Thank you for your answer.
    I actually passed on this part of the course. I just watched it, and not practiced it.

    I'm studying different testing technology because I have a big project coming up (a big API which will replace an old webapp), and I don't need to know how to test JS for this one.

    I don't have the time to use more than one technology. I barely have the time to implement one, but I prefer to be late for a "good" reason, than on time and discovering flaws afterwards.
    I don't know if I will go for Behat, PHPUnit, or phpscpec. I'm following your course on PHPUnit at this time, and will folliow with the one on phpscpec next. I liked how you user Behat on the REST API courses though.

    I will try again later, when I could, to make Mink work correctly, and I will try your suggestions. :)

  • 2019-08-12 weaverryan

    Hey Virginie Burlot!

    Sorry for my slow reply! This is exactly when this type of testing gets tricky... because when something doesn't work... you're thinking "But why? What's missing?". One of my favorite debugging techniques is the "I break" technique shown here: https://symfonycasts.com/sc...

    This will "freeze" the browser right before it fails... which sometimes can be useful to see what's going wrong - e.g. you discover that the button you're trying to click is missing or there's an error on the page (things that are difficult to spot if the page just disappears immediately when it fails). I might also try commenting-out this line and seeing if the NEXT line works or also fails.

    Let me know what you find out! You could definitely also skip this part, and see if things start working in a bit. Overall, this *could* be a browser/driver setup issue... or just some other problem (like an error on the page, for example). The first type is a bit harder to debug :/.

    Cheers!

  • 2019-08-06 Virginie Burlot

    Hi !

    I have an issue while running the scenario with the @javascript option (the same one as Leora had a year ago) :

    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()
    When I fill in "searchTerm" with "Samsung" # FeatureContext::fillField()
    Form field with id|name|label|value|placeholder "searchTerm" not found. (Behat\Mink\Exception\ElementNotFoundException)
    And I press "search_submit" # FeatureContext::pressButton()
    Then I should see "Samsung Galaxy" # FeatureContext::assertPageContainsText()


    --- Scénarios échoués:


    features\search.feature:7


    1 scénario (1 échecs)
    4 étapes (1 succès, 1 échecs, 2 ignorés)
    0m6.74s (12.29Mb)

    I've read every comment here. I have the same issue on Firefox or Chrome, for the first one, I've installed GeckoDriver, then I saw the last note, I installed ChromeDriver, and use the browser_name in my behat.yml. My Selenium Server is started.
    I have no issue without the @javascript option.

    Do I have to have everything working here to pursue on this course ? I'm most of the time working on APIs and back-end, I will probably, not in the near future, need to run tests on JS on front-end for that matter. I will need to work on a big API, and I'm really looking forward BDD.

    I'm really not familiar with these tools, I may have made mistake while installing everything.

  • 2019-05-29 Victor Bocharsky

    Hey Nigel,

    Wow, that's complex! Glad you found a solution that kinda fits you, and thanks for sharing it with others! Good luck with it!

    P.S. Good plan about sending a PR later ;)

    Cheers!

  • 2019-05-28 pukkaTaT

    Hi Victor,

    Ultimately extending Selenium2Driver didn't work for me; as you said copying the the whole Selenium2Driver code into the extending class is bad practice and just extending the class does not grant access to the private methods or variables.

    So what I finally did was create a Selenium2DriverDecorator:

    From FeatureContext I create a new decorator:


    private function getDecoratedDriver(): Selenium2DriverDecorator
    {
    return new Selenium2DriverDecorator($this->getSession()->getDriver());
    }

    In the Selenium2DriverDecorator constructor I assign the driver to a private property:


    class Selenium2DriverDecorator

    private $driver;

    public function __construct(DriverInterface $driver)
    {
    $this->driver = $driver;
    }

    And then access methods and properties irrespective of their visibility via the __call and __get magic methods.

     

    public function __call($methodName, $args)
    {
    $driver = $this->driver;
    $closure = function (DriverInterface $driver) use ($methodName, $args) {
    return $driver->$methodName(...$args);
    };

    $closure = Closure::bind($closure, null, $driver);

    return $closure($driver);
    }

    public function __get($name)
    {
    $driver = $this->driver;
    $closure = function (DriverInterface $driver) use ($name) {
    return $driver->$name;
    };
    $closure = Closure::bind($closure, null, $driver);

    return $closure($this->driver);
    }

    This allows me to treat the decorator as if it was the driver itself which makes the code more readable:

    And I can achieve what I set out to do (simulate "dragenter" and "dragleave" events):


    public function simulateEventAfterDragstart(
    string $event,
    string $sourceXpath,
    string $destinationXpath): void
    {
    $source = $this->findElement($sourceXpath);
    $destination = $this->findElement($destinationXpath);

    $this->wdSession->moveto(array(
    'element' => $source->getID()
    ));

    $script = $this->getSimpleEventScript('dragstart');

    $this->withSyn();
    $this->executeJsOnElement($source, $script);


    $script = $this->getSimpleEventScript($event);
    $this->withSyn();
    $this->executeJsOnElement($destination, $script);
    }


    private function getSimpleEventScript($event): string
    {
    return <<<JS_HEREDOC
    (function (element) {
    var event = document.createEvent("HTMLEvents");

    event.initEvent("$event", true, true);
    event.dataTransfer = {};

    element.dispatchEvent(event);
    }({{ELEMENT}}));
    JS_HEREDOC;
    }

    It took me a while but I think that this is the best solution.

    When I've got all the functionality I need I will suggest updates for the GitHub repository.

    Kind regards,

    Nigel

  • 2019-05-27 Victor Bocharsky

    Hey Nigel,

    Thank you for sharing your solution with others! Yes, it looks like you extended it correct, I don't see any other way to do it. Well, you can hack things by copy/paste that file to your project and do necessary changes in it, but it will be dirty, and this way you won't have updates from the library :/ So, your way is much more intelligent, but as you see it has some limitations.

    I don't know why exactly you need to extend that Selenium2Driver, but if you think there's a bug or a missing feature - I'd recommend you to open an issue in its repository: https://github.com/minkphp/... - this should be the correct one. You can discuss your idea there, and maybe open a PR to implement it if people will agree on it.

    Cheers!

  • 2019-05-27 pukkaTaT

    So,

    I realised that even if I could extend Behat\Mink\Driver\Selenium2Driver it would fail because there are so many private methods that the extending class would not have access to.

    So I changed behat.yml to include this:

    default:
    extensions:
    App\Tests\Behat\MinkExtension\ServiceContainer\CustomMinkExtension:
    browser_name: chrome
    base_url: http://theatre.localhost
    javascript_session: selenium2e
    goutte: ~
    selenium2e: ~

    I extended MinkExtension:

    class CustomMinkExtension extends MinkExtension
    {
    public function __construct()
    {
    $this->registerDriverFactory(new ExtendedSelenium2Factory());
    MinkExtension::__construct();
    }
    }

    I extended Selenium2Factory:

    class ExtendedSelenium2Factory extends Selenium2Factory

    getDriverName return 'selenium2e';

    buildDriver (array $config) to build ExtendedSelenium2Driver instead of Selenium2Driver

    and

    Just copied the whole of Selenium2Driver into ExtendedSelenium2Driver and worked from there.

    I think that this is the only way?

    Kind regards,

    Nigel

  • 2019-05-24 pukkaTaT

    Hi Ryan,

    I'd like to extend Behat\Mink\Driver\Selenium2Driver so that I can add a few methods and still have access to the public and protected methods that the class offers.

    Is there a way to achieve this in behat.yml?

    I'm using Symfony 4 and in my behat.yml I have:

    default:
    extensions:
    Behat\MinkExtension:
    browser_name: chrome
    base_url: http://theatre.localhost
    javascript_session: selenium2
    goutte: ~
    selenium2: ~
    Behat\Symfony2Extension:
    kernel:
    bootstrap: features/bootstrap/bootstrap.php
    class: App\Kernel
    suites:
    default:
    contexts:
    - FeatureContext:
    kernel: '@kernel'
    - DebugContext
    - Behat\MinkExtension\Context\MinkContext

    I came up with this to execute private methods on the driver but it's messy:

    public function executeMethodOnDriver($driver, $methodName, ...$params)
    {
    $closure = function (Selenium2Driver $driver) use ($methodName, $params) {
    return $driver->$methodName(...$params);
    };

    $closure = Closure::bind($closure, null, $driver);

    return $closure($driver);
    }

    for example:

      /**
    * @Given I test xpath
    */
    public function iTestXpath()
    {
    $driver = $this->getSession()->getDriver();
    $xpath = '//div[contains(@class, "address")]';
    $source = $this->executeMethodOnDriver($driver, 'findElement', $xpath);
    }

    I suppose I could extend RawMinkContext and then use __call as a proxy to executeMethodOnDriver.

    Kind regards,

    Nigel

  • 2019-05-13 Diego Aguiar

    Hey Marwen Ben Ahmed

    I believe you still have to install behat/mink library. Give it a try and let me know if it works

    Cheers!

  • 2019-05-12 Marwen Ben Ahmed

    hello friends,
    when i run command ./vendor/bin/behat i show this issue :
    Mink instance has not been set on Mink context class. Have you enabled the Mink Extension? (RuntimeException)

    and my behat.yml file has this content :

    default:
    extensions:
    Behat\MinkExtension:
    browser_name: chrome
    base_url: https://front.manewco.lo
    goutte: ~
    selenium2: ~

    and my package.json has this code :

    "require-dev": {
    "behat/behat": "^3.5",
    "behat/mink-extension": "^2.3",
    "behat/mink-goutte-driver": "^1.2",
    "behat/mink-selenium2-driver": "^1.3",
    "behat/symfony2-extension": "^2.1",}

    any idea of this bug please ???
    thank's ....

  • 2019-02-11 weaverryan

    Hey Carlos Eduardo!

    Hmm, that errors comes from using the "selenium" driver - but we need to use the selenium2 driver in this tutorial. Double-check that you have "selenium2: ~" in your behat.yml file and not just "selenium: ~".

    Cheers!

  • 2019-02-09 Carlos Eduardo

    Why am i getting ...
    [RuntimeException]
    Install MinkSeleniumDriver in order to activate selenium session.

    ?

  • 2019-01-14 Diego Aguiar

    Hey Murad

    That goes far beyond the scope of this tutorial but after watching it and understanding how Behat works, you will feel more confident on doing it by yourself.

    Cheers!

  • 2019-01-14 Diego Aguiar

    Hey Murad

    You firstly have to install and setup a Selenium server and install ChromeDriver, after that you only have to add this config to your behat.yml file:


    default:
    extensions:
    Behat\MinkExtension:
    ...
    javascript_session: selenium2
    selenium2:
    capabilities:
    chrome:
    switches: ['disable-popup-blocking']

    Probably this gist may help you out a bit more: https://gist.github.com/jk/...

    Cheers!

  • 2019-01-14 weaverryan

    Hey Murad!

    So, the SnippetAcceptingContext was deprecated, but it has not been removed from Behat yet - so it *should* work. I would recommend either re-adding it, or using the "--snippets-for" option that Victor mentioned above.

    Btw, don't use ContextSnippetGenerator - I don't know where you found that - but it has a totally different purpose :).

    You said earlier:

    > What I can use instead of SnippetAcceptingContext ? Because it is not working any more

    What do you mean by it not working anymore? Do you run Behat but the snippets are not added to your class? Or do you get an error? Give us as much information as possible to help :).

    Cheers!

  • 2019-01-14 Murad

    How this framework can be converted into page object model?

  • 2019-01-14 Murad

    Hi Viktor, you've done a great job. But I think there are compatibility issues between extensions. My framework is working with goutte driver but not with selenium. Selenium2Extension is also not working. Could you describe how a framework can be created as a new project from scratch? How can I downgrade symfony 4 to the version that can work with extensions used for test automation. Thank you.

  • 2019-01-14 Victor Bocharsky

    Hey Murad,

    This tutorial is still relevant. If you have any problems, please, ask in comments and we would try to help you to figure out the problem. If the problem in this tutorial, we would be happy to add some notes to it to help other users avoid hitting problems. What do you think should be updated here? Or why do you think this tutorial should be updated? We would be glad to your feedback with more detailed info!

    Cheers!

  • 2019-01-11 Murad

    I think this tutorial should be updated

  • 2019-01-11 Murad

    I used
    use Behat\Behat\Context\Snippet\Generator\ContextSnippetGenerator;

    But when I'm implementing that one as here below
    class LoginContext extends RawMinkContext implements Context, ContextSnippetGenerator

    phpStorm asks interface reference

  • 2019-01-11 Victor Bocharsky

    Hey Murad,

    From the docs https://firefox-source-docs... :
    > Selenium users must update to version 3.11 or later to use geckodriver. Other clients that follow the W3C WebDriver specification are also supported.

    Here's the page where you can find more info how to install it: https://firefox-source-docs... . As you can see, you can find an installation file from releases on GitHub, for example: https://github.com/mozilla/...

    If you're on a Mac and use Brew - I think you can easily install it as "brew install geckodriver".

    I hope this helps!

    Cheers!

  • 2019-01-11 Victor Bocharsky

    Hey Murad,

    Instead of SnippetAcceptingContext I see you can use "--snippets-for", see deprecation message:
    https://github.com/Behat/Be...

    Cheers!

  • 2019-01-11 Victor Bocharsky

    Hey Murad,

    I does not mean Composer dependencies. Please, try to reinstall chrome driver in your OS. Btw, do you have chromedriver installed in your OS?

    Cheers!

  • 2019-01-09 Murad

    How can I install geckodriver for Selenium 3 version?

  • 2019-01-09 Murad

    And What I can use instead of SnippetAcceptingContext ?
    Because it is not working any more

  • 2019-01-09 Murad

    Thank you Victor,
    Here is my dependencies list. What else or which one should I reinstall?
    --
    "require": {
    "behat/behat": "^3.5",
    "behat/mink-selenium2-driver": "^1.3",
    "behat/mink-extension": "^2.3",
    "vaimo/binary-geckodriver": "^2.0.1",
    "tzander/page-factory": "dev-master",
    "sensiolabs/behat-page-object-extension": "^2.1",
    "vanare/behat-cucumber-json-formatter": "^1.1",
    "bex/behat-screenshot": "^1.2",
    "tonicforhealth/phpunit-extend-report": "^0.1.0",
    "fzaninotto/faker": "^1.8",
    "ext-json": "*",
    "behat/mink-goutte-driver": "^1.2",
    "shimabox/selenium-downloader": "^0.2.0",
    "facebook/webdriver": "^1.6",
    "spatie/phpunit-watcher": "^1.8",
    "symfony/panther": "^0.2.0"
    },

  • 2019-01-09 Victor Bocharsky

    Hey Murad,

    Hm, difficult to say.... try to re-install the chrome driver, on the internet I see it should help with this kind of error. If not, you can try to switch to the Firefox browser.

    Cheers!

  • 2019-01-08 Murad

    Hi, I have this error when trying to run feature file:

    Could not open connection: Unable to create new service: ChromeDriverService
    Build info: version: '3.9.1', revision: '63f7b50', time: '2018-02-07T22:42:28.403Z'

    Could you help to initialize the browser? Thank you

  • 2018-12-13 Victor Bocharsky

    Hey Sergey,

    Unfortunately, behat/mink package does not have a release for Symfony 4, see: https://github.com/minkphp/... . The only workaround to install it for now is to use master branch for it, like:
    1. composer req behat/mink:dev-master
    2. composer req behat/mink-extension

    Or wait until a new behat/mink release that will support Symfony 4

    Cheers!

  • 2018-12-12 Sergey Zaharchenko

    Hi there!
    Can not install mink extension in Symfony 4.2:

    composer require behat/mink-extension

    Got error:
    Problem 1
    - behat/mink-extension 2.3.0 requires behat/mink ^1.5 -> satisfiable by behat/mink[v1.5.0, v1.6.0, v1.6.1, v1.7.0, v1.7.1].
    - behat/mink-extension 2.3.1 requires behat/mink ^1.5 -> satisfiable by behat/mink[v1.5.0, v1.6.0, v1.6.1, v1.7.0, v1.7.1].
    - behat/mink v1.7.1 requires symfony/css-selector ~2.1|~3.0 -> no matching package found.
    - behat/mink v1.7.0 requires symfony/css-selector ~2.1 -> no matching package found.
    - behat/mink v1.6.1 requires symfony/css-selector ~2.0 -> no matching package found.
    - behat/mink v1.6.0 requires symfony/css-selector ~2.0 -> no matching package found.
    - behat/mink v1.5.0 requires symfony/css-selector ~2.0 -> no matching package found.
    - Installation request for behat/mink-extension ^2.3 -> satisfiable by behat/mink-extension[2.3.0, 2.3.1].

    Tried to directly install symfony/css-selector 3.0:
    composer require symfony/css-selector 3.0

    Got this:

    Restricting packages listed in "symfony/symfony" to "4.2.*"

    [InvalidArgumentException]
    Could not find package symfony/css-selector in a version matching 3.0

    Can I change that restriction somehow? Could you give any advice how to install it on Symfony 4.2?

  • 2018-12-11 weaverryan

    Hey Luis Mas!

    We may, but we don't currently have any immediate plans to do so. However, we would be happy to answer any questions you have!

    Cheers!

  • 2018-12-06 Luis Mas

    Hi, are you going to update it to Symfony 4?

    Thanks!

  • 2018-09-17 Diego Aguiar

    Ohh, so that was the problem, I'm glad to hear that you could fix your problem :)
    Cheers!

  • 2018-09-16 Leora Wenger

    I installed the last version of chromedriver - then it worked. (I also had to install homebrew and follow those instructions as well). Finally passed!

  • 2018-09-16 Leora Wenger

    No, I copied the search.feature straight from the text on the course page. When I specify Chrome as the browser in behat.yml, I get a slightly different error message:
    When I fill in "searchTerm" with "Samsung" # FeatureContext::fillField()
    unknown error: call function result missing 'value'
    (Session info: chrome=69.0.3497.92)
    (Driver info: chromedriver=2.31.488774 (7e15618d1bf16df8bf0ecf2914ed1964a387ba0b),platform=Mac OS X 10.13.6 x86_64) (WebDriver\Exception\UnknownError)

  • 2018-09-14 Diego Aguiar

    Hey Leora Wenger sorry for the late response. Hmm, so you are actually hitting your homepage, try to find any other element on that page, just to be sure that everything is working correctly.
    What I believe is that you don't have any form field named "searchTerm" (remember that IT is case sensitive)

  • 2018-09-13 Leora Wenger

    Wow, that was a long response (still get the error under) - there is more, but it won't let me post all, too long:

    │ http://localhost:8000/

    │ <html><head>
    │ <meta charset="UTF-8">
    │ <title>KnpUniversity: The Raptor Store!</title>

    │ <link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css">
    │ <link rel="stylesheet" href="/css/main.css">
    │ <link rel="stylesheet" href="/css/font-awesome.min.css">
    │ </head>
    │ <body>


    │ <div class="container">
    │ <div class="header clearfix">
    │ <nav class="navigation-margin">
    │ <ul class="nav nav-pills pull-right">
    │ <li>
    Home
    │ </li>
    │ <li>Admin</li>
    │ <li>Login</li>
    │ <li>Reset DB</li>
    │ </ul>
    │ </nav>
    │ <h1>The Raptor Store</h1>
    │ </div>
    │ <hr>

    Fence security activated



    │ <div class="row">
    │ <div class="col-sm-12">

    │ <section>
    │ <h1 class="text-center">Welcome to the Raptor Store</h1>

    │ <div class="row">
    │ <div class="col-sm-8 col-sm-offset-2">
    │ <h2>
    │ Today's sweet products:
    │ </h2>
    │ <table class="table table-striped">
    │ <thead>
    │ <tr>
    │ <th>Name</th>
    │ <th>Price</th>
    │ </tr>
    │ </thead>
    │ <tbody>
    │ <tr>
    │ <td>Kindle Fire HD 7</td>
    │ <td>$199.99</td>
    │ </tr>
    │ <tr>
    │ <td>Samsung Galaxy S II</td>
    │ <td>$434.99</td>
    │ </tr>
    │ <tr>
    │ <td>Samsung 3D Slim LED</td>
    │ <td>$2,497.99</td>
    │ </tr>
    │ </tbody>
    │ </table>
    │ </div>
    │ </div>
    │ </section>
    │ </div>
    │ </div>
    │ </div>

  • 2018-09-13 Diego Aguiar

    Hmm I think it should just work. Add the step And print last response after step "Given I am on "/" "
    let's see what's returning

  • 2018-09-13 Leora Wenger

    (formatting got removed when I posted the behat.yml file)

  • 2018-09-13 Leora Wenger

    default:
    extensions:
    Behat\MinkExtension:
    base_url: http://localhost:8000
    goutte: ~
    selenium2: ~
  • 2018-09-13 Diego Aguiar

    Interesting... so probably your configuration is not correct. Can you show me your behat.yml file please

  • 2018-09-13 Leora Wenger

    Diego, I have both Selenium server running as well as Chrome, and I still get that error message.

  • 2018-09-13 Diego Aguiar

    Hey Leora Wenger

    In order to use "@javascript tag" you need to start your selenium server first and probably a browser as well, it depends on your local environment.

    Cheers!

  • 2018-09-13 Leora Wenger

    Hi, I am getting an error on the "searchTerm" section when using Selenium. I did not get this error when @javascript is not in the search.feature file:
    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/bootstrap/search.feature:7
    Given I am on "/" # FeatureContext::visit()
    When I fill in "searchTerm" with "Samsung" # FeatureContext::fillField()
    Form field with id|name|label|value|placeholder "searchTerm" not found. (Behat\Mink\Exception\ElementNotFoundException)
    And I press "search_submit" # FeatureContext::pressButton()
    Then I should see "Samsung Galaxy" # FeatureContext::assertPageContainsText()

    --- Failed scenarios:

    features/bootstrap/search.feature:7

    1 scenario (1 failed)
    4 steps (1 passed,

  • 2018-03-28 Victor Bocharsky

    Hey Mr. ß ,

    Have you installed that geckodriver as we mentioned in this chapter? Also, are you trying to use Firefox? Could you try to use Google Chrome instead? I really had a bad experience using Selenium with Firefox lately.

    Cheers!

  • 2018-03-25 Mr. ß

    Hi,

    Whenever I tried to run behat, I get this error. My search.feature looks like:

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

    ```Could not open connection: Unable to create new service: GeckoDriverService
    Build info: version: '3.11.0', revision: 'e59cfb3', time: '2018-03-11T20:33:15.31Z'
    System info: host: 'Babaganas-MacBook-Pro.local', ip: 'fe80:0:0:0:1c14:2aa5:e04f:a9a7%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.3', java.version: '10'
    Driver info: driver.version: unknown (Behat\Mink\Exception\DriverException)```

    Can you please help me?

  • 2017-12-18 Diego Aguiar

    Hey Daka
    When you create a step automatically via Behat console, it adds you a "pending" check line code, what it does is to throw a custom exception which you haven't added the import. You can just remove it, or add the import by yourself

    Have a nice day

  • 2017-12-18 Daka

    running behat
    it gives me error:
    Scenario: checking all urls to see if they are all have access denied # features/accessDenied.feature:6
    Given I am on "/" # FeatureContext::iAmOn()
    Fatal error: Class 'PendingException' not found (Behat\Testwork\Call\Exception\FatalThrowableError)
    When I fill in "searchTerm" with "Samsung" # FeatureContext::iFillInWith()
    And I press "search_submit" # FeatureContext::iPress()
    Then I should see "Samsung Galaxy S II"

    this is my composer
    "require": {
    "php": ">=5.5.9",
    "symfony/symfony": "3.1.*",
    "doctrine/orm": "^2.5",
    "doctrine/doctrine-bundle": "^1.6",
    "doctrine/doctrine-cache-bundle": "^1.2",
    "symfony/swiftmailer-bundle": "^2.3",
    "symfony/monolog-bundle": "^2.8",
    "symfony/polyfill-apcu": "^1.0",
    "sensio/distribution-bundle": "^5.0",
    "sensio/framework-extra-bundle": "^3.0.2",
    "incenteev/composer-parameter-handler": "^2.0",
    "knplabs/knp-markdown-bundle": "^1.4",
    "doctrine/doctrine-migrations-bundle": "^1.1",
    "ramsey/uuid": "^3.7",
    "behat/mink-extension": "^2.3",
    "behat/mink-goutte-driver": "^1.2"
    },
    "require-dev": {
    "sensio/generator-bundle": "^3.0",
    "symfony/phpunit-bridge": "^3.0",
    "nelmio/alice": "^2.1",
    "doctrine/doctrine-fixtures-bundle": "^2.3"
    },

  • 2017-11-10 Victor Bocharsky

    Great! Feel free to contact us again if you still have some troubles with it. We'd be glad to help you to fix it ;)

    Cheers!

  • 2017-11-09 Simon Carr

    Thank you Victor, I will give that a go

  • 2017-11-09 Victor Bocharsky

    Hm, I was experienced a few weird things with Firefox. Could you try to use Google Chrome instead? I bet it'll fix your problem. IIRC, Firefox is just not ready to the latest Behat / Selenium server. The other things: your deps and version of selenium server - look good for me.

    Cheers!

  • 2017-11-09 Simon Carr

    Browser if Firefox,
    Here is a snippet from my composer.json

    "behat/behat": "^3.4",
    "behat/mink-extension": "^2.2",
    "behat/mink-goutte-driver": "^1.2",
    "behat/mink-selenium2-driver": "^1.3",

    I am using selenium-server-standalone-3.7.1.jar

    Then I should see "Suppliers" comes from the video You can see it at 4:43

    Thanks
    Simon

  • 2017-11-09 Victor Bocharsky

    Hey Simon,

    Your scenario looks fine, which browser you run this scenario in? Google Chrome or Firefox? What's your version of Behat and what's your version of Selenium server? I think you just have some problems with compatibility, probably simple upgrade of selenium server could fix the problem.

    Also, where's the "I should see..." step definition comes from? Is it from Behat core?

    Cheers!

  • 2017-11-08 Simon Carr

    Using Windows 10 and Symfony 3.3. I have the following scenario


    Feature: Supplier
    In order to be able to work with suppliers
    As a web user
    I need to be able to see a list of suppliers

    @javascript
    Scenario: Listing all suppliers
    Given I am on "/suppliers"
    Then I should see "Suppliers"

    When I run Behat, The browser opens and I quickly see the page before it closes, then I get the following error


    @javascript
    Scenario: Listing all suppliers # features\suppliers.feature:6
    Given I am on "/suppliers" # FeatureContext::visit()
    Then I should see "Suppliers" # FeatureContext::assertPageContainsText()
    Element not found with xpath, //html
    (WebDriver\Exception\NoSuchElement)

    --- Failed scenarios:

    features\suppliers.feature:6

    1 scenario (1 failed)
    2 steps (1 passed, 1 failed)
    0m2.70s (11.65Mb)
  • 2017-08-21 Victor Bocharsky

    Hey Thierno,

    Hm, "getId() === getId()" is a bad thing to do. Do you implement \Serializable interface, i.e. do you have serialize()/unserialize() methods in your User entity or parent classes which this entity extends? Could you make sure you serialize/unserialize fields correctly, i.e. you have the same fields number and its order in both methods? Probably you could debug where exactly it fails in default Symfony\Component\Security\Core\User\UserChecker (if you do not override it)?

    Cheers!

  • 2017-08-17 Thierno Diop

    Hi weaver i am using guard but when a user logged in he is automatically log out here is the message in the log : The security token was removed due to an AccountStatusException.
    But it works when i implement the Symfony\Component\Security\Core\User\EquatableInterface like this :
    public function isEqualTo(UserInterface $user)

    {

    return $user->getId() === $this->getId();

    }

    but i don't think this is normal.
    Help please.

  • 2017-07-23 weaverryan

    Yo Pawel!

    Hmm. It looks like an issue with Selenium: https://github.com/Selenium.... This happens from time-to-time: as browsers make updates, Selenium needs to be updated to work with those browser changes. So, unfortunately, you will see issues like this occasionally - they're often fixed in the next version of Selenium. I would try a different browser for now, to see if you have better luck.

    Cheers!

  • 2017-07-21 Paweł

    I put `selenium-server-standalone-3.4.0.jar` and `geckodriver` in my root project dir. I got error: `Exception thrown
    org.openqa.selenium.UnsupportedCommandException: mouseMoveTo`.
    I am using:
    Geckodriver v0.18.0
    Firefox 54
    Linux Mint 18.2

  • 2017-07-03 Victor Bocharsky

    Hey Evgeniy,

    Hm, are we talking about "BDD, Behat, Mink and other Wonderful Things" course? Probably if you did not have SQLite extension - you would have a huge error about it. I think the same is for permissions problem, so that's weird. Are you sure you do not see any errors in your terminal after "php app/console doctrine:database:create" command execution? What is your output? You should see something like:

    > ~/Downloads/behat/finish: $ app/console doctrine:database:create
    > Created database ~/Downloads/behat/finish/app/app.db for connection named default.

    Is it the same for you? Could you paste it here?

    Anyway, I just double checked it: Downloaded the course code, went to the finish/ directory. installed Composer dependencies and run "php app/console doctrine:database:create" - and it works for me fine.

    Cheers!

  • 2017-06-30 Евгений Явгель

    Thanks for answer. But after command: php app/console doctrine:database:create no misstake but DB does not creating (( And "app/app.db" database file doesn"t create .... Why?

  • 2017-06-30 Victor Bocharsky

    Hey Евгений,

    That's not a full Symfony Standard Edition, just some kind of micro app based on Symfony components. This project doesn't have any parameters.yml and parameters.yml.dist files. For simplicity, all the configuration happens in app/config.yml - you can see:


    doctrine:
    dbal:
    driver: pdo_sqlite
    path: %kernel.root_dir%/app.db

    So as you can see we use SQLite DB for this course, and after you run that commands from README file you will have "app/app.db" database file. So try to run those commands and make sure the app.db file is created. Of course, feel free to change driver to "pdo_mysql" if you want to use MySQL instead, but then you also need to set up its credentials under the "doctrine.dbal" key in config.yml.

    Cheers!

  • 2017-06-30 Евгений Явгель

    Hi! I'm having trouble trying to load up DB. In README file after step 2 (composer install) I try to load DB by running stack of command: php app/console doctrine:database:create
    php app/console doctrine:schema:update --force
    php app/console doctrine:fixtures:load But in app/config I have no parameters,yml or parameters.yml.dist .... how can DB loading in this case ? README file says after running stack of commands above I must receive `app/app.db` file. But I havn"t app.db file. I cant run php app/console doctrine:database:create command Can you help me or explain what i miss?

  • 2017-05-15 weaverryan

    You already answered this for yourself in another thread, but I want to answer it here in case for others :). This tutorial is currently about an old bundle - in version 2.8 Guard was accepted into core (yay!) and now works a bit differently. You can find a screencast about this in our Symfony security tutorial: http://knpuniversity.com/sc...

    Cheers!

  • 2017-05-15 Sergio Valije Guiadanes

    Hi everyone!

    I'm having this problem Viral had before, but I'm with this fancy Symfony 3.2.8 and I tried to follow the steps.

    Here is the output I got when I try to run my application

    InvalidConfigurationException in ArrayNode.php line 317:
    Unrecognized option "knpu_guard" under "security.firewalls.main"

    I'm missing something ?

    Thanks in advance!

  • 2017-03-27 Victor Bocharsky

    Hey UnkRec,

    No, you don't have - Guard component installed out-of-the-box, so just you can start using it. This tutorial is still current, but in some places we have notes if something was changed/renamed - just skip installation section if you're on Symfony 2.8 or higher.

    Cheers!

  • 2017-03-26 UnkRec

    Do we have to install Guard via composer if using the latest version of Symfony 3 (to date)?
    How much of this " KnpUGuard: Symfony Authentication with a Smile Tutorial" is current?

  • 2017-02-27 weaverryan

    That's a great idea - I've gotten this question several times! I'll add it to our idea list :). In short, one approach would be have 2 authenticators. When the first (e.g. something that checks username/password) is successful, instead of *actually* being successful, set something on the session, and then fail authentication (e.g. by returning false in getCredentials()). In onAuthenticationError, if that session value exists, instead of sending them back to the login page, redirect to some other URL (where the 2nd factor is checked). On that URL, add the form for the 2nd authentication. Have a 2nd authenticator handle the submit: it would check that the session value from the first is present (to make sure someone didn't skip to this step) and then process as normal. You might also need a listener that redirects to the 2nd factor page for for ALL other URLs once that session token is set (i.e. once the first factor has been successful).

    It's honestly not something I've ever tried. It's one of those problems that's not technically *that* hard to solve (after all, it's just 2 different forms), but I'm not convinced that the above method is all that smooth, or the smoothest possible.

    Cheers!

  • 2017-02-27 AwesomeDeveloper

    Be nice to see an article on how to add two factor authentication using guard. I'm trying to play around with it but nothing concrete yet.

  • 2016-12-17 weaverryan

    Thanks for sharing the link! And yea, I know what you mean - Behat docs are a bit light on some setup details... which is a shame, because it's SO rewarding to work with afterwards :). Happy you got there!

  • 2016-12-17 James D

    FYI, I found this article on Gecko webdrivers super handy:

    http://michalzalecki.com/se...

    Also also, thanks so much for this course. I've been meaning to get round to learning Behat properly for months and I've always had set up problems. This is the first place I've found that explains how to get started properly.

  • 2016-12-09 weaverryan

    Sweet! So happy that worked - and thank you for the follow-up! Awesome!

  • 2016-12-07 James D

    Bingo! Worked a treat, thanks Ryan. I downloaded the Mac archive from https://github.com/mozilla/..., unzipped it, put the executable in my project root (though I guess it could have gone anywhere, and might more sensibly be kept somewhere like /usr/local/share or something.

    As you described, I added the path to the executable to my path, and now I can run tests with Selenium.

    Thanks again for your help!

  • 2016-12-05 weaverryan

    Hey James!

    Yea, Selenium is temporarily in a weird place right now as they've recently released their 3.0 version of the server, which has some differences with how the old one works. As I understand it, you need to also download the gecko-driver in order to use Firefox (https://github.com/mozilla/... or the Chrome driver to use Chrome (https://github.com/mozilla/.... I *think* that you just need to make sure these are in your path (i.e. that you can just say chromedriver from the command line) - I don't *think* that you actually need to run them manually. I'm doing a lot of "think" because, while I have the new Selenium 3 server running on my machine, I had the chrome-driver installed a long time ago, so I'm not 100% positive what I might have done with my setup way back then.

    Anyways, let me know if downloading gecko-driver helps. Otherwise, we'll find the solution. I think we may need a note on this tutorial about the new setup steps with Selenium.

    Cheers and apologies for the inconvenience with Selenium!

  • 2016-12-04 James D

    Hey - I'm having a little bit of trouble with the Selenium part of this tutorial. I can run the scenario without Selenium, but when I try to do it using the @javascript option, Selenium opens up a Firefox window then just hangs. After a while I get a message saying:

    Could not open connection: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms.

    ...followed by a load of console output from Firefox that I don't really understand.

    Any suggestions for what to do next would be much appreciated.

  • 2016-09-29 Tom NotMyRealSurname

    Yes, that helped a lot and I have it up and running now.

  • 2016-09-28 Victor Bocharsky

    Hey Tom,

    Ah, yes, this course have not been completely released yet. Take a look at "knpuniversity/oauth2-client-bundle" bundle, it helps a lot with OAuth2. BTW, it has some examples how to integrate this bundle with Symfony Guard: https://github.com/knpunive... . Let us know if you have any questions about integration.

    Cheers!

  • 2016-09-27 Tom NotMyRealSurname

    Anyone figured out how to do Facebook / Google / OAuth with this bundle? It's my main reason to come here and then it says "coming soon" ... :-/

  • 2016-09-25 weaverryan

    Ah, great news!

  • 2016-09-23 Thierno Diop

    I notify the owner of the server about the problem and he fixed it buy setting varnish Thx a lot

  • 2016-09-23 weaverryan

    Yea, I agree that it sounds like a session-saving issue. But since you say that you *can* see session files created, and that they are created on each request, then it makes me wonder if Varnish is stripping the cookies so that each request (to Symfony) looks like a fresh request (i.e. one that has no cookie). I would remove Varnish, at least to test, and see if that fixes the problem.

    Cheers!

  • 2016-09-22 Thierno Diop

    No i did that dump to verify if the session was working i asked to the owner of the server he tell me that he installed varnish and since i juste replaced a project who was on the server with mine i mean its the same domain i think that is the problem

  • 2016-09-22 Victor Bocharsky

    The PHPSESSID does not store in cookies for this domain. You can see it in Google Chrome Developer Tool. I think it's because you have a dump statement in DefaultController.php on line 17. Please, remove it and check again.