diff --git a/app/Browser/BrowserJob.php b/app/Browser/BrowserJob.php index d5549d1..8cf4d62 100644 --- a/app/Browser/BrowserJob.php +++ b/app/Browser/BrowserJob.php @@ -5,6 +5,7 @@ namespace App\Browser; use App\Models\Job; use App\Models\JobArtifact; use App\Models\JobRun; +use App\Notification\Notifications\JobDebugNotification; use App\Notification\Notifications\JobErrorNotification; use App\Notification\Providers\AllNotification; use Closure; @@ -22,6 +23,7 @@ use Illuminate\Queue\SerializesModels; use Laravel\Dusk\Browser; use Laravel\Dusk\Chrome\SupportsChrome; use Laravel\Dusk\Concerns\ProvidesBrowser; +use Log; use PHPUnit\Framework\Attributes\BeforeClass; use Throwable; @@ -333,19 +335,26 @@ abstract class BrowserJob implements ShouldQueue */ public function pasteText(Browser $browser, string $text, string $querySelector): void { - $text = $this->parseJavaScriptString($text); - $querySelector = $this->parseJavaScriptString($querySelector); + try { + $text = $this->parseJavaScriptString($text); + $querySelector = $this->parseJavaScriptString($querySelector); - $browser->script(" - var el = document.querySelector('{$querySelector}'), text = '{$text}'; - el.focus(); - const dataTransfer = new DataTransfer(); - dataTransfer.setData('text', text); - const event = new ClipboardEvent('paste', { - clipboardData: dataTransfer, - bubbles: true - }); - el.dispatchEvent(event) - "); + $browser->script(" + var el = document.querySelector('{$querySelector}'), text = '{$text}'; + el.focus(); + const dataTransfer = new DataTransfer(); + dataTransfer.setData('text', text); + const event = new ClipboardEvent('paste', { + clipboardData: dataTransfer, + bubbles: true + }); + el.dispatchEvent(event) + "); + } catch (Exception $e) { + $errorMessage = "Failed to paste text into element: {$querySelector} - " . $e->getMessage() . "\n With text: {$text}"; + Log::error($errorMessage); + $browser->screenshot(JobDebugScreenshot::getFileName($this->jobId)); + AllNotification::send(new JobDebugNotification($this->jobId, $errorMessage)); + } } }