Шаги для воспроизведения
Создать маршрут, который возвращает HTML-страницу с обработчиком событий onbeforeunload:
Код: Выделить всё
Route::get('/leave', function () {
return '
Page
Test page
[url=/]page[/url]
window.onbeforeunload = function(e) {
e = e || window.event;
if (e) {
e.returnValue = "Go?";
}
return "Go?";
};
';
});
Код: Выделить всё
phpCopypublic function testLeave(): void
{
$this->browse(function (Browser $browser) {
$browser->visit('/leave')
->pause(15000);
});
}
Ожидаемое поведение:
Когда тест уходит со страницы ( либо щелкнув ссылку, либо используя методы навигации Dusk), оно должно вызвать событие onbeforeunload и отобразить диалоговое окно подтверждения.
Фактическое поведение:
Событие onbeforeunload не запускается, и диалоговое окно подтверждения не отображается, когда тест уходит со страницы. Это происходит как при программном нажатии ссылки, так и при использовании встроенных методов навигации Dusk.
Дополнительная информация:
Эта проблема не присутствовала в Laravel 10 с Dusk 7, где тест успешно вызвал событие onbeforeunload.
Событие onbeforeunload работает должным образом при ручном взаимодействии со страницей в браузере.
Для ручной проверки я удалил --headless=new параметр в файле DuskTestCase.php, чтобы напрямую наблюдать за поведением браузера.
Не могли бы вы изучить эту проблему и предоставить рекомендации о том, как правильно тестировать события onbeforeunload в Laravel 11 с помощью Dusk?
Версия Dusk: 8.2.6
Версия Laravel: 11.25
Версия PHP: 8.3.3
Версия PHPUnit: 11.3.6
Подробнее здесь: https://stackoverflow.com/questions/790 ... -11-dusk-8