Dusk клик по элементу, содержащему текст при тестировании
8 января 2025
Создать /app/Providers/DuskServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Laravel\Dusk\Browser;
use Laravel\Dusk\ElementResolver;
class DuskServiceProvider extends ServiceProvider
{
/**
* Register Dusk's browser macros.
*/
public function boot(): void
{
ElementResolver::macro("findBySelectorAndText", function ($selector, $text) {
$elements = [];
// imitates ElementResolver::findButtonByText
foreach ($this->all($selector) as $element) {
if (str_contains($element->getText(), $text)) {
$elements[] = $element;
}
}
return $elements;
});
// imitates Concerns\InteractsWithMouse::click
Browser::macro("clickElementWithText", function ($selector, $text) {
$elements = $this->resolver->findBySelectorAndText($selector, $text);
foreach ($elements as $one) {
$one->click();
}
return $this;
});
}
}Добавить провайдер в /config/app.php
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => ServiceProvider::defaultProviders()->merge([
/*
* Package Service Providers...
*/
/*
* Application Service Providers...
*/
App\Providers\RouteServiceProvider::class,
])->toArray(),Можно пользоваться, но лучше это разместить в tests/DustTestCase.php в public static function prepare(): void, чтобы код выполнялся исключительно при запуске этих тестов.
source
source