Глобальные селекторы CSS для тестов Laravel Dusk

Я использую Laravel Dusk для написания Selenium тестов для своего проекта. У меня есть класс под названием PrivilegeLevelsTest в моей папке tests\Browser.

Я использую в этом классе много сложных селекторов, таких как ->type('.gen-search-table[data-uri="table/userSearch"] input', $this->lettersToSearch)

Я видел в документации, что эти селекторы могут быть объявлены в классе Page, в методе siteElements, но эти объявления можно увидеть только из папки Pages. Поскольку я не хочу помещать туда свой тест, я спрашиваю, есть ли альтернативный способ увидеть эти объявления снаружи?

Мой Page.php выглядит так:

<?php

namespace Tests\Browser\Pages;

use Laravel\Dusk\Page as BasePage;

abstract class Page extends BasePage
{
 /**
 * Get the global element shortcuts for the site.
 *
 * @return array
 */
public static function siteElements()
{
    return [
        '@element' => '#selector',
        '@search' => '.gen-search-table[data-uri="table/userSearch"] input'
    ];
}
}  

И я хочу использовать @search вот так:

     public function testAdminCanListUsers()
     {
     $this->browse(function(Browser $browser) {
        $browser->loginAs($this->user)
            ->visit('/profile')
            ->pause(3000)
            ->type('@search', $this->lettersToSearch)
            ->pause(3000)
            ->press('Show All')
            ->assertSee($this->userToSearch->user_name);
        });
     }

person Fogarasi Norbert    schedule 23.07.2018    source источник


Ответы (1)


Вы должны создать свой собственный класс Page:

class MyPage extends Page {

}

Затем используйте его с on():

$browser->loginAs($this->user)
    ->visit('/profile')
    ->pause(3000)
    ->on(new MyPage)
    ->type('@search', $this->lettersToSearch)
    ->pause(3000)
    ->press('Show All')
    ->assertSee($this->userToSearch->user_name);
person Jonas Staudenmeir    schedule 23.07.2018