作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试使用 PHPUnit 功能测试填写表单时,我总是收到以下错误:LogicException:所选节点没有表单祖先。 symfony2 phpunit 测试错误
这是代码,错误出现在代码的最后一行:
$editusercrawler = $client->request('GET', '/profile');
$this->assertTrue($editusercrawler->filter('html:contains("Edit Profile")')->count() > 0);
// Go To Edit
$link = $editusercrawler->filter('a:contains("Edit Profile")')->eq(0)->link();
$editusercrawler = $client->click($link);
//var_dump($client->getResponse()->getContent());
// Check if User Edit was called
$this->assertTrue($editusercrawler->filter('html:contains("Edit User")')->count() > 0);
//var_dump($client->getResponse()->getContent());
// Fill out form
//var_dump($client->getResponse()->getContent());
$editusercrawler = $client->click($link);
$editusercrawler = $client->request('GET', '/profile/edit');
var_dump($client->getResponse()->getContent());
$editUserForm = $editusercrawler->selectButton('update')->form();
最佳答案
当 HTML 结构不正确时,就会出现此问题。setNode 方法具有以下结构(我使用的是 Laravel )
protected function setNode(\DOMElement $node)
{
$this->button = $node;
if ('button' === $node->nodeName || ('input' === $node->nodeName && in_array(strtolower($node->getAttribute('type')), array('submit', 'button', 'image')))) {
if ($node->hasAttribute('form')) {
// if the node has the HTML5-compliant 'form' attribute, use it
$formId = $node->getAttribute('form');
$form = $node->ownerDocument->getElementById($formId);
if (null === $form) {
throw new \LogicException(sprintf('The selected node has an invalid form attribute (%s).', $formId));
}
$this->node = $form;
return;
}
// we loop until we find a form ancestor
do {
if (null === $node = $node->parentNode) {
throw new \LogicException('The selected node does not have a form ancestor.');
}
} while ('form' !== $node->nodeName);
} elseif ('form' !== $node->nodeName) {
throw new \LogicException(sprintf('Unable to submit on a "%s" tag.', $node->nodeName));
}
$this->node = $node;
}
如开头所述,您的 HTML 结构不正确。
无效示例
<form>
<div id="first">
<input type="text" value="Wont check this">
<div/>
</form>
<div id="second">
<input type="submit" value="Working">
</div>
有效示例
<form>
<div id="first">
<input type="text" value="Wont check this">
<div/>
<div id="second">
<input type="submit" value="Working">
</div>
</form>
这就是为什么它不起作用的简单解释。就我而言,我是在 Bootstrap 面板主体 div 中启动表单,但在面板页脚 div 中有提交按钮。
关于php - symfony2 phpunit 测试出现 LogicException : The selected node does not have a form ancestor. 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403172/
我是一名优秀的程序员,十分优秀!