J'ai un HTML produit par Drupal qui ressemble plus ou moins à ça (sous forme simplifiée)
<fieldset data-drupal-selector="ts-and-cs" id="edit-fieldset-ts-and-cs" class="js-form-item">
<label class="js-form-type-checkbox js-form-item-ts-and-cs" data-validation="single-checkbox">
<input required="required" class="required form-checkbox" data-drupal-selector="edit-ts-and-cs" type="checkbox" id="edit-ts-and-cs" name="ts_and_cs" value="1" aria-required="true">
<span class="checkbox-label">I have read and agree to <a href="http://domain/tc.pdf">Terms & Conditions</a> *</span>
</label>
</fieldset>
Grâce à CSS et JS sophistiqués, il y a une belle case à cocher construite avec CSS qui est attachée dans span comme :: avant le pseudo-élément donc le HTML rendu final ressemble plus ou moins à ça
<span class="checkbox-label">
::before
"I have read and agree to "
<a href="http://domain/tc.pdf">Terms & Conditions</a>
" *"
</span>
Dans le même temps, les éléments d'entrée deviennent bien sûr cachés et ne sont pas accessibles par Behat et toute tentative de l'attraper génère des erreurs comme celle-ci:
When I check "edit-ts-and-cs"
Element is not currently visible and so may not be interacted with
Maintenant, le problème est que ce sur quoi l'utilisateur clique réellement, pour confirmer son accord avec les CGU, l'est effectivement, span.checkbox-label::before
mais un tel sélecteur est rejeté car le sélecteur CSS ne les prend pas en charge https://symfony.com/doc/current/components/css_selector.html et ceci est un composant crucial de Mink pour l'implémentation PHP qui génère des erreurs comme celle-ci
Pseudo-elements are not supported. (Symfony\Component\CssSelector\Exception\ExpressionErrorException)
Lorsque j'essaie d'omettre :: before dans le sélecteur, toute tentative provoque une action de clic pour attraper le lien existant et suit href et s'éloigne de la page vers le document PDF.
Une idée comment le résoudre et forcer Behat à produire le bon clic JS?
Il s'agit bien sûr du mode @Javascript. Il n'y a aucun problème pour fonctionner en mode non JS et vérifier directement les entrées car dans ce cas elles sont visibles.
À la fin, j'ai dû modifier le html et le texte initial enveloppé qui est également cliquable avec un élément span supplémentaire, donc à la fin, cela ressemble à ça:
<span class="checkbox-label">
::before
<span>I have read and agree to</span>
<a href="http://domain/tc.pdf">Terms & Conditions</a>
" *"
</span>
qui est devenu sélectionnable et cliquable par
When I click on element "#edit-fieldset-ts-and-cs span.checkbox-label span"
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots