Christophe Meneses - Développeur
  • Liste des articles
  • Contact
  • Linkedin
  • Github
  • Flux RSS
Tous les articles Panther Remplir un champ de formulaire caché avec Symfony Panther (php-webdriver)
Panther

Remplir un champ de formulaire caché avec Symfony Panther (php-webdriver)

Publié le 27/05/2019.

Panther utilise php-webdriver pour contrôler le navigateur. Il ne peut interagir qu'avec les éléments visibles de la page affichée. Si on souhaite par exemple remplir un champ caché d'un formulaire, la librairie va retourner l'exception suivante : Facebook\WebDriver\Exception\InvalidElementStateException: invalid element state: Element is not currently interactable and may not be manipulated. Nous allons voir dans cette article comment résoudre ce problème.

Solution

Dans Panther, il existe la méthode executeScript() qui permet d'exécuter du JavaScript.

L'astuce est d'utiliser cette méthode pour exécuter du JavaScript qui va rendre visible le champ du formulaire. Ce dernier est habituellement caché à l'utilisateur mais pour tester fonctionnellement notre code, ce n'est pas grave de l'afficher. Une fois visible, on peut interagir avec lui comme les autres champs du formulaire.

Exemple

Dans un formulaire mon_form, on a un champ message qui est caché par du style CSS. Son id est mon-form-message.

On exécute du JavaScript pour supprimer son style. Il devient alors visible pour Panther.

Il suffit ensuite de tester le formulaire de manière classique :

public function testMonForm()
{
    $crawler = $this->client->request('GET', '/ma-page-à-tester');

    $this->client->executeScript('document.getElementById(\'mon-form-message\').style=\'\'');

    $form = $crawler->selectButton('Envoyer')->form([
        'mon_form[nom]' => 'Un nom',
        'mon_form[prenom]' => 'Un prénom',
        'mon_form[email]' => 'np@gmail.com',
        'mon_form[message]' => 'un message',
    ]);
    $crawler = $this->client->submit($form);

    $this->assertTrue(1 == $crawler->filter('.alert-danger')->count());
}

Il n'y aura plus d'exception en provenance de php-webdriver.

Version

Cet article a été testé avec :

Panther : 0.3
Début de l'article

Tous les articles Panther Remplir un champ de formulaire caché avec Symfony Panther (php-webdriver)

Liste des articles par catégorie

  1. Tous 124
  2. Apache2
  3. APC1
  4. Assetic2
  5. Bash2
  6. CentOS9
  7. Composer6
  8. CSS1
  9. Debian1
  10. Deployer1
  11. Design Pattern11
  12. Docker6
  13. Doctrine14
  14. Elasticsearch3
  15. Git6
  16. Google Charts1
  17. Hardware1
  18. Hébergement1
  19. JavaScript1
  20. jQuery4
  21. Kibana2
  22. Logstash1
  23. Machine Learning1
  24. MariaDB2
  25. Memcached2
  26. MySQL3
  27. Nginx2
  28. Panther3
  29. PHP59
  30. PHP_CodeSniffer1
  31. PHP-FPM2
  32. PhpMyAdmin1
  33. PhpStorm3
  34. PHPUnit6
  35. PostgreSQL2
  36. RabbitMQ2
  37. SQL1
  38. SVN4
  39. Sybase ASE1
  40. Symfony56
  41. Twig3
  42. Ubuntu14
  43. Vue.js2
  44. Vuex1
  45. Webpack Encore1
  46. Xdebug5

Derniers articles publiés

PHP
Différence entre les mots clés self et static dans le langage PHP

Symfony / Docker / Nginx
Migrer un projet Symfony du protocole HTTP 1.1 au protocole HTTP 2

Vue.js
Utiliser un filtre Vue.js directement dans le JavaScript

PHP / Symfony
Supprimer les messages de dépréciation de type : The "sensio_framework_extra.routing.loader.annot_*" service is deprecated since version 5.2

Symfony / RabbitMQ
Exemple d'utilisation du composant Messenger pour envoyer des emails en asynchrone avec RabbitMQ

PHP Symfony MariaDB HTML5 CSS3 JavaScript Bootstrap

© 2014 - 2019 réalisé par Christophe MENESES