Как работать с объектами страницы в laravel-dusk

Я новичок в php и dusk, но я пытаюсь работать с объектом страницы в сумерках, и я застрял, потому что, когда я пытаюсь добавить объект страницы для тестирования, phpstorm сказал мне, что "Метод logInUserName не найден в $this". Может кто-нибудь объяснить мне, где я не прав?

У меня есть класс страницы:

<?php

namespace Tests\Browser\Pages;

use Laravel\Dusk\Browser;

class LogInPage extends Page
{
/**
 * Get the URL for the page.
 *
 * @return string
 */
public function url()
{
    return '/login';
}

/**
 *
 * @return void
 */
public function logInUserName(Browser $browser)
{
   $browser->type("#username", "lol");
}

}

У меня тестовый класс

use Tests\Browser\Pages\LogInPage;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use PHPUnit\Framework\Assert;

class ExampleTest extends DuskTestCase
{
/**
 * A basic browser test example.
 *
 * @return void
 */
public function testLogInFail()
{
    $this->browse(function (Browser $browser) {
        $browser
            ->visit(new LogInPage)
            ->logInUserName()
            ->keys("#password","lol")
            ->click("button.btn-primary"));}

1 ответ

Согласитесь, это раздражает, есть 2 способа обойти это

  1. Перезапустите цепочку на объекте браузера, вы все равно можете получить предупреждение о logInUserName, но вернете свой помощник по коду, который, я согласен, может быть полезен при изучении.
$browser
    ->visit(new LogInPage)
    ->logInUserName();
$browser
    ->keys("#password","lol")
    ->click("button.btn-primary"));
  1. Создайте вспомогательный файл, определяющий ваши пользовательские функции

Или используйте эту суть и создайте файл в корневом каталоге вашего проекта, который будет читать ваша IDE - https://gist.github.com/slava-vishnyakov/5eb90352fc97702f53a41888e5bae27a

Единственная проблема в том, что вы можете получить предупреждение PHPSTORM о наличии нескольких определений для класса Browser... не знаю, как обойти это

В результате что-то вроде этого

<?php

namespace Laravel\Dusk {
    class Browser
    {
        /**
         * @return Browser
         */
        public function logInUserName()
        {
        }
    }
}
Другие вопросы по тегам