无法获取Codeception来填充表单字段

Raf*_*del 6 php acceptance-testing laravel blade codeception

我正在尝试为学习目的进行简单的验收测试.这是一个简单的身份验证方案:用户输入/admin,如果没有记录,他会被重定向/login到填写表单.

当我运行测试时,我收到此错误:

1) Couldn't login with a password protected area in LoginCest.loginUserWithProperCredentials
Guy couldn't fill field "username","rafael": Field matching id|name|label|value or css or xpath selector does not exist

Scenario Steps:
5. I fill field "username","rafael" <==== RED
4. I see current url equals "/login"
3. I am on page "/admin"
2. So that I Perform administrative tasks
1. As a Site Owner
Run Code Online (Sandbox Code Playgroud)

现在这是我的观点:

//create.blade.php
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Login</title>
    </head>
    <body>
        <h1>Login</h1>
        {{ Form::open() }}
            <div>
                {{ Form::Label('username', 'Username') }}
                {{ Form::Text('username', '') }}
            </div>
            <div>
                {{ Form::label('password', 'Password') }}
                {{ Form::password('password', '') }}
            </div>
            <div>
                {{ Form::submit('Login') }}
            </div>
        {{ Form::close() }}
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是测试:

class LoginCest
{

    public function loginUserWithProperCredentials(WebGuy $I){
        $I->am("Site Owner");
        $I->wantTo("Login with a password protected area");
        $I->lookForwardTo("Perform administrative tasks");

        $I->amOnPage('/admin');
        $I->seeCurrentUrlEquals('/login');

        $I->fillField('username', 'rafael');
        $I->fillField("password", "123456");
        $I->click("Login");

        $I->seeCurrentUrlEquals("/admin");
        $I->see("Admin area", "h1");
    }

}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

小智 2

你可以从html中复制用户名的XPath,并写入:

$I->fillField('//*[@id="addPosDialog"]/div/button','Username');
Run Code Online (Sandbox Code Playgroud)

' //*[@id="addPosDialog"]/div/button' - 将你的 xpath 粘贴到那里。您可以使用 xpath、name、id 和其他定位器。当我遇到问题时,fillField我通常会做这样的事情。

在这种情况下,HTML 代码比视图代码更重要。如果我的建议不能解决问题,需要查看 HTML 代码。