【问题标题】:The selected node does not have a form ancestor - Mink error所选节点没有表单祖先 - Mink 错误
【发布时间】:2014-10-13 14:31:51
【问题描述】:

我正在尝试使用 Mink 和 Goutte 驱动程序对我的 Magento 安装执行测试,但当我尝试在按钮上使用 click()press() 函数时它失败了。

代码:

$page = $this->getSession()->getPage();
    $checkout = $page->find('css', '.btn-proceed-checkout');
    $checkout->click();

如何获得这项工作?为什么 Mink 实际上需要一个表单来单击按钮元素?还是与 Goutte 无法获取 JS 相关的问题?

【问题讨论】:

  • 那有帮助吗?

标签: php magento mink


【解决方案1】:

TL;DR:使用不同的驱动程序或确保表单元素实际上在表单内。

Goutte 驱动程序非常棒,但不如真正的浏览器那么棒。它获取响应内容并使用 Goutte scraper 对其进行分析。为了给您的测试添加一些趣味,它允许您通过拦截值设置调用并将表单数据存储在对象中来输入和提交表单数据。当您单击按钮时(我假设仅在 type="submit" 上),表单数据将添加到请求数据中并发送到服务器。

为了创建该表单对象,它会搜索最近的父表单以获取基本表单详细信息。因此,当您尝试在不属于表单的输入上设置一个值,或者在没有表单的情况下进行提交时,它会找不到表单并引发异常。

确保表单元素位于表单标签内应该可以解决此类问题。或者,您可以使用 Selenium2 驱动程序——它使用完全不同的机制。

【讨论】:

    【解决方案2】:

    问题出在 DOM 中。我设法通过在 DOM 树中将<button> 放置在靠近<form> 的位置进行调试。

    就我而言,问题在于<form> 内的一些<script> 块(角度模板)。

    【讨论】:

    • 您能详细说明一下吗? <script> 块是如何干扰的?您是如何解决您的问题的?
    • 当然。据我记得,我在
      .那是破坏 html 解析器。我通过将所有
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2015-06-04
    • 2019-06-17
    相关资源
    最近更新 更多