Behat如何点击其他元素
Behat how to click on other element
我有一个由 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>
多亏了 fancy CSS 和 JS,用 CSS 构建了一个很好的复选框,它作为 ::before 伪元素附加到 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
现在的问题是,用户真正点击确认同意条款和条件的内容实际上是 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)
当我尝试在选择器中省略 ::before 时,任何尝试都会导致单击操作以捕获现有 link 并跟随 href 并从页面导航到 PDF 文档。
知道如何解决它并强制 Behat 产生正确的 JS 点击吗?
这当然是关于@Javascript模式的。在非 JS 模式下运行并直接检查输入是没有问题的,因为在这种情况下它们是可见的。
最后我不得不修改 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"
我有一个由 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>
多亏了 fancy CSS 和 JS,用 CSS 构建了一个很好的复选框,它作为 ::before 伪元素附加到 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
现在的问题是,用户真正点击确认同意条款和条件的内容实际上是 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)
当我尝试在选择器中省略 ::before 时,任何尝试都会导致单击操作以捕获现有 link 并跟随 href 并从页面导航到 PDF 文档。
知道如何解决它并强制 Behat 产生正确的 JS 点击吗?
这当然是关于@Javascript模式的。在非 JS 模式下运行并直接检查输入是没有问题的,因为在这种情况下它们是可见的。
最后我不得不修改 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"