Yii2中Codeception的see()方法仅搜索侧边栏问题求助
see()方法异常及表单提交失败问题 先拆解你遇到的两个测试失败场景,逐个给出解决方案:
1. 第一个测试:表单提交失败,停留在登录页
从报错信息能看到,提交表单后页面仍停留在登录页,还提示Username cannot be blank. Password cannot be blank.——这是因为你提交表单时用的字段参数格式错误了。
Codeception的submitForm()方法第二个参数需要的是表单字段的name属性值,而非CSS选择器ID。Yii2的ActiveForm生成的字段name格式是ModelName[attribute],比如你的Usuario模型对应的用户名字段name是Usuario[username],不是#usuario-username(这是CSS选择器写法)。
修改你的表单提交代码:
public function submitFormSuccessfully(\FunctionalTester $I) { $I->submitForm('#login-form', [ 'Usuario[username]' => 'Fulano', 'Usuario[password]' => '12345678' ]); $I->see('Mural'); }
修正后表单能正确提交数据,跳转到目标页面后就能找到"Mural"文本了。
2. 第二个测试:see()方法无法识别页面中存在的文本
从报错里的页面内容来看,页面明明有多个"Fulano",但see()却找不到,可能有以下几个原因:
原因1:搜索范围被意外限制
试试强制指定在整个页面的body标签内搜索,避免被局部上下文干扰:
$I->see('Fulano', 'body');
原因2:页面未完全加载
如果页面包含JS渲染的动态内容,添加等待步骤确保页面加载完成:
$I->amOnPage('gestor/mural'); $I->waitForPageLoad(); // 适用于WebDriver模块 // 若使用PhpBrowser模块,可简单等待 $I->wait(1); $I->see('Fulano');
原因3:旧版本Codeception的bug
你使用的Codeception 2.4.1是比较老旧的版本,可能存在see()方法的搜索逻辑bug。可以考虑升级到兼容PHP7.2的稳定版本(比如2.5.x系列),升级后再测试。
原因4:验证页面源码是否真的包含目标文本
如果以上方法都无效,用seeInPageSource()直接搜索页面源码,确认文本是否存在:
$I->seeInPageSource('Fulano');
如果这个方法能找到文本,说明see()方法的搜索逻辑存在问题,优先考虑升级Codeception。
额外建议
检查你的functional.suite.yml配置,确保启用的模块正确:
- 无浏览器测试用
PhpBrowser模块,确认配置了正确的url; - 有浏览器测试用
WebDriver模块,确保浏览器驱动配置正常。
内容的提问来源于stack exchange,提问作者G.Batt.

