From 658756102d7e4d6830db3831566fd8428e243314 Mon Sep 17 00:00:00 2001 From: effulgentsia <alex.bronstein@acquia.com> Date: Fri, 20 Nov 2020 09:55:20 -0800 Subject: [PATCH] Issue #3183420 by alexpott, catch: Override \Behat\Mink\Driver\Selenium2Driver::uploadFile() in DrupalSelenium2Driver (cherry picked from commit d77c9b4542a34e2a68e5dd151e1d76c83cce79a1) --- .../DrupalSelenium2Driver.php | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/core/tests/Drupal/FunctionalJavascriptTests/DrupalSelenium2Driver.php b/core/tests/Drupal/FunctionalJavascriptTests/DrupalSelenium2Driver.php index 605819c33820..76d1416056a9 100644 --- a/core/tests/Drupal/FunctionalJavascriptTests/DrupalSelenium2Driver.php +++ b/core/tests/Drupal/FunctionalJavascriptTests/DrupalSelenium2Driver.php @@ -43,6 +43,32 @@ public function setCookie($name, $value = NULL) { $this->getWebDriverSession()->setCookie($cookieArray); } + /** + * {@inheritdoc} + */ + public function attachFile($xpath, $path) { + $element = $this->getWebDriverSession()->element('xpath', $xpath); + + if ('input' !== strtolower($element->name()) || 'file' !== strtolower($element->attribute('type'))) { + $message = 'Impossible to %s the element with XPath "%s" as it is not a %s input'; + + throw new DriverException(sprintf($message, 'attach a file on', $xpath, 'file')); + } + + // Upload the file to Selenium and use the remote path. This will + // ensure that Selenium always has access to the file, even if it runs + // as a remote instance. + try { + $remotePath = $this->uploadFileAndGetRemoteFilePath($path); + } + catch (\Exception $e) { + // File could not be uploaded to remote instance. Use the local path. + $remotePath = $path; + } + + $element->postValue(['value' => [$remotePath]]); + } + /** * Uploads a file to the Selenium instance and returns the remote path. * -- GitLab