assertVisible($this->selector()) ->assertVisible('@email') ->assertVisible('@password') ->assertVisible('@submit'); } /** * Get the element shortcuts for the component. * * @return array */ public function elements(): array { return [ '@email' => 'input[id="email"]', '@password' => 'input[id="password"]', '@submit' => 'button[type="submit"]', '@remember' => 'input[name="remember"]', '@error' => '.text-red-500', ]; } /** * Fill in the login form. */ public function fillForm(Browser $browser, string $email, string $password): void { $browser->type('@email', $email) ->type('@password', $password); } /** * Submit the login form. */ public function submit(Browser $browser): void { $browser->press('@submit'); } /** * Login with the given credentials. */ public function loginWith(Browser $browser, string $email, string $password): void { $this->fillForm($browser, $email, $password); $this->submit($browser); } /** * Assert that the form fields are required. */ public function assertFieldsRequired(Browser $browser): void { $browser->assertAttribute('@email', 'required', 'true') ->assertAttribute('@password', 'required', 'true') ->assertAttribute('@email', 'type', 'email') ->assertAttribute('@password', 'type', 'password'); } /** * Assert that the form has validation errors. */ public function assertHasErrors(Browser $browser): void { $browser->assertPresent('@error'); } }