所选节点没有表单祖先 - Mink错误

时间:2014-08-20 09:28:55

标签: php magento mink

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

代码:

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

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

2 个答案:

答案 0 :(得分:2)

TL; DR:使用不同的驱动程序或确保表单元素实际位于表单中。

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

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

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

答案 1 :(得分:1)

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

在我的情况下,问题是<script>内的一些<form>块(角度模板)。