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