Как нажать на другой элемент


У меня есть HTML, созданный Drupal, который выглядит более или менее так (в упрощенной форме)

<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>

Благодаря модным CSS и JS есть хороший флажок, встроенный в CSS, который прикреплен к span как::перед псевдо-элементом, поэтому окончательный визуализированный HTML выглядит более или менее так

<span class="checkbox-label">
  ::before
  "I have read and agree to "
  <a href="http://domain/tc.pdf">Terms & Conditions</a>
  " *"
</span>

В то же время входные элементы, конечно, становятся скрытыми и недоступными для Behat, и любая попытка поймать их приводит к таким ошибкам:

When I check "edit-ts-and-cs"
  Element is not currently visible and so may not be interacted with

Теперь проблема в том, что пользователь действительно нажимает, чтобы подтвердить согласие с T&Cs эффективно span.checkbox-label::before, но такой селектор отклоняется, так как селектор CSS их не поддерживает https://symfony.com/doc/current/components/css_selector.html и это важнейший компонент Mink для реализации PHP, вызывающий подобные ошибки

 Pseudo-elements are not supported. (Symfony\Component\CssSelector\Exception\ExpressionErrorException)

Когда я пытаюсь опустить::перед тем, как в селекторе любая попытка вызвать действие щелчка, чтобы поймать существующую ссылку, следует за href и переходит со страницы в PDF-документ.

Любая идея как решить эту проблему и заставить Behat произвести правильный щелчок JS?

Это, конечно, все о режиме @Javascript. Нет проблем работать в режиме, отличном от JS, и проверять входные данные напрямую, так как в этом случае они видны.

Author: Krzysztof Dabrowski, 2017-06-02

1 answers

В конце мне пришлось изменить html и обернуть исходный текст, который также доступен для кликабельности с дополнительным элементом span, поэтому в конце он выглядит так:

<span class="checkbox-label">
  ::before
  <span>I have read and agree to</span>
  <a href="http://domain/tc.pdf">Terms & Conditions</a>
  " *"
</span>

, который стал выбираемым и кликабельным с помощью

When I click on element "#edit-fieldset-ts-and-cs span.checkbox-label span"

 1
Author: Krzysztof Dabrowski, 2017-06-12 14:57:01