如何点击其他元素

时间:2017-06-02 13:24:04

标签: php symfony pseudo-element behat mink

我有一个由Drupal制作的HTML,看起来或多或少(简化形式)

<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作为:: before伪元素之前,所以最终呈现的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&amp; Cs的协议有效span.checkbox-label::before但是这样的选择器被拒绝,因为CSS选择器不支持https://symfony.com/doc/current/components/css_selector.html这个是Mink for PHP实现抛出错误的重要组成部分

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

当我尝试在选择器中省略::之前任何尝试都会导致单击操作以捕获现有链接并跟随href并从页面导航到PDF文档。

任何想法如何解决它并迫使Behat产生正确的JS点击?

这当然是关于@Javascript模式的。在非JS模式下操作并直接检查输入没有问题,因为在这种情况下它们是可见的。

1 个答案:

答案 0 :(得分:1)

最后我不得不修改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"