Почему я не могу использовать селектор класса тела с Laravel Dusk?

Я использую Laravel 5.5 и Dusk 2.0. У меня есть следующий html.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
</head>
<body class="my-body-class" id="my-body-div">
    <div class="my-content-class" id="my-content-div">
        Content goes here.
    </div>
</body>
</html>

Вот мой тест в сумерках.

public function testBasicExample()
{
    $this->browse(function (Browser $browser) {
        $browser->visit('/test/admin-fixed-layout');
        $this->assertNotNull($browser->element('.my-content-class'));
        $this->assertNotNull($browser->element('#my-content-div'));
        // $this->assertNotNull($browser->element('.my-body-class'));
        $this->assertNotNull($browser->element('#my-body-div'));
    });
}

Если я раскомментирую утверждение, использующее селектор класса тела, тест завершится неудачно. Почему?


person DatsunBing    schedule 21.09.2017    source источник


Ответы (1)


Это связано с тем, что по умолчанию префикс установлен на body:

public function __construct($driver, $prefix = 'body')
{
    $this->driver = $driver;
    $this->prefix = trim($prefix);
}

в Laravel\Dusk\ElementResolver классе.

Если вам действительно нужно это изменить (но, вероятно, в этом нет смысла), вы можете добавить следующий метод в класс Tests/DuskTestCase:

protected function newBrowser($driver)
{
    return new \Laravel\Dusk\Browser($driver, new \Laravel\Dusk\ElementResolver($driver, ''));
}

Это переопределит браузер по умолчанию и передаст пустой префикс вместо префикса по умолчанию body.

person Marcin Nabiałek    schedule 26.09.2017