diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php
index 129c1ea4cdfe6bfd98d4eac5bcb06feb980be5ed..6ce658324b81666b0f2860bab3515a873c6ee2d2 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php
@@ -9,6 +9,7 @@
 use Drupal\FunctionalJavascriptTests\JSWebAssert;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
+use Drupal\Tests\system\Traits\OffCanvasTestTrait;
 
 /**
  * Tests the Layout Builder disables interactions of rendered blocks.
@@ -18,6 +19,7 @@
 class LayoutBuilderDisableInteractionsTest extends WebDriverTestBase {
 
   use ContextualLinkClickTrait;
+  use OffCanvasTestTrait;
 
   /**
    * {@inheritdoc}
@@ -31,6 +33,7 @@ class LayoutBuilderDisableInteractionsTest extends WebDriverTestBase {
     'node',
     'search',
     'contextual',
+    'off_canvas_test',
   ];
 
   /**
@@ -88,7 +91,6 @@ protected function setUp(): void {
    * Tests that forms and links are disabled in the Layout Builder preview.
    */
   public function testFormsLinksDisabled() {
-    $this->markTestSkipped();
     // Resize window due to bug in Chromedriver when clicking on overlays over
     // iFrames.
     // @see https://bugs.chromium.org/p/chromedriver/issues/detail?id=2758
@@ -219,6 +221,11 @@ protected function assertContextualLinksClickable(): void {
 
     $this->clickContextualLink('.block-field-blocknodebundle-with-section-fieldbody [data-contextual-id^="layout_builder_block"]', 'Configure');
     $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.ui-dialog-titlebar [title="Close"]'));
+    // We explicitly wait for the off-canvas area to be fully resized before
+    // trying to press the Close button, instead of waiting for the Close button
+    // itself to become visible. This is to prevent a regularly occurring random
+    // test failure.
+    $this->waitForOffCanvasArea();
     $page->pressButton('Close');
     $assert_session->assertNoElementAfterWait('css', '#drupal-off-canvas');
 
diff --git a/core/modules/system/tests/modules/off_canvas_test/js/resize-helper.es6.js b/core/modules/system/tests/modules/off_canvas_test/js/resize-helper.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7dd3de9bf5332e74b204bacf83696ea0e290d36
--- /dev/null
+++ b/core/modules/system/tests/modules/off_canvas_test/js/resize-helper.es6.js
@@ -0,0 +1,18 @@
+(function ({ offCanvas }) {
+  const originalResetSize = offCanvas.resetSize;
+
+  /**
+   * Wraps the Drupal.offCanvas.resetSize() method.
+   *
+   * @param {jQuery.Event} event
+   *   The event triggered.
+   * @param {object} event.data
+   *   Data attached to the event.
+   */
+  offCanvas.resetSize = (event) => {
+    originalResetSize(event);
+    // Set an attribute so that tests can reliably detect when the off-canvas
+    // area has been resized.
+    event.data.$element.attr('data-resize-done', 'true');
+  };
+})(Drupal);
diff --git a/core/modules/system/tests/modules/off_canvas_test/js/resize-helper.js b/core/modules/system/tests/modules/off_canvas_test/js/resize-helper.js
new file mode 100644
index 0000000000000000000000000000000000000000..77c613f3fa254a13d4b93ee76c41713a02704e16
--- /dev/null
+++ b/core/modules/system/tests/modules/off_canvas_test/js/resize-helper.js
@@ -0,0 +1,18 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+(function (_ref) {
+  let {
+    offCanvas
+  } = _ref;
+  const originalResetSize = offCanvas.resetSize;
+
+  offCanvas.resetSize = event => {
+    originalResetSize(event);
+    event.data.$element.attr('data-resize-done', 'true');
+  };
+})(Drupal);
\ No newline at end of file
diff --git a/core/modules/system/tests/modules/off_canvas_test/off_canvas_test.libraries.yml b/core/modules/system/tests/modules/off_canvas_test/off_canvas_test.libraries.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6d653dacd7c271dfcce71c5e1d9cdd9abb866fb1
--- /dev/null
+++ b/core/modules/system/tests/modules/off_canvas_test/off_canvas_test.libraries.yml
@@ -0,0 +1,5 @@
+resize_helper:
+  js:
+    js/resize-helper.js: {}
+  dependencies:
+    - 'core/drupal.dialog.off_canvas'
diff --git a/core/modules/system/tests/modules/off_canvas_test/off_canvas_test.module b/core/modules/system/tests/modules/off_canvas_test/off_canvas_test.module
new file mode 100644
index 0000000000000000000000000000000000000000..3c3384d8adf8cb9992acc295484980054253c2cb
--- /dev/null
+++ b/core/modules/system/tests/modules/off_canvas_test/off_canvas_test.module
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * @file
+ * Contains hook implementations for testing the off-canvas area.
+ */
+
+/**
+ * Implements hook_page_attachments().
+ */
+function off_canvas_test_page_attachments(array &$attachments) {
+  // This library wraps around the Drupal.offCanvas.resetSize() method and adds
+  // a special data-resize-done attribute to help functional JavaScript tests
+  // use the off-canvas area when it is fully loaded and ready to be interacted
+  // with.
+  // @see \Drupal\Tests\system\Traits\OffCanvasTestTrait::waitForOffCanvasArea()
+  $attachments['#attached']['library'][] = 'off_canvas_test/resize_helper';
+}
diff --git a/core/modules/system/tests/src/Traits/OffCanvasTestTrait.php b/core/modules/system/tests/src/Traits/OffCanvasTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..80e226dee229a90d89fefbd957863c3944ccb919
--- /dev/null
+++ b/core/modules/system/tests/src/Traits/OffCanvasTestTrait.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Drupal\Tests\system\Traits;
+
+/**
+ * Provides helper methods for interacting with the off-canvas area.
+ *
+ * This trait is only useful in functional JavaScript tests which need to use
+ * the off-canvas area. Tests using this trait should also list off_canvas_test
+ * in their $modules property.
+ */
+trait OffCanvasTestTrait {
+
+  /**
+   * Waits for the off-canvas area to appear, resized and visible.
+   */
+  protected function waitForOffCanvasArea(): void {
+    // The data-resize-done attribute is added by the off_canvas_test module's
+    // wrapper around Drupal.offCanvas.resetSize.
+    $this->assertNotEmpty($this->assertSession()->waitForElementVisible('css', '[data-resize-done="true"]'));
+  }
+
+}