我正在尝试使用带有 Goutte 驱动程序的 Mink 对我的 Magento 安装执行测试,当我尝试使用 click()
或 press()
时它失败了> 在按钮上运行。
代码:
$page = $this->getSession()->getPage();
$checkout = $page->find('css', '.btn-proceed-checkout');
$checkout->click();
如何完成这项工作?为什么 Mink 实际上需要一个表单来单击按钮元素?或者是 Goutte 无法获取 JS 的问题?
最佳答案
TL;DR:使用不同的驱动程序或确保表单元素实际上在表单内。
Goutte 驱动程序非常棒,但不如真正的浏览器那么棒。它获取响应内容并使用 Goutte scraper 对其进行分析。为了给您的测试添加一些趣味,它允许您通过拦截值设置调用并将表单数据存储在对象中来输入和提交表单数据。当您单击一个按钮(我假设仅在 type="submit"
上)时,表单数据被添加到请求数据中并发送到服务器。
为了创建该表单对象,它会搜索最接近的父表单以获取基本的表单详细信息。因此,当您尝试在不属于表单的输入上设置一个值,或者在没有表单的情况下进行提交时 – 它找不到表单并抛出异常。
确保表单元素位于表单标签内应该可以解决此类问题。或者,您可以使用 Selenium2 驱动程序——它使用完全不同的机制。
关于php - 所选节点没有表单祖先 - Mink 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401236/