diff --git a/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php b/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php
new file mode 100644
index 0000000000..627ec0ffe2
--- /dev/null
+++ b/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Drupal\Tests\contextual\FunctionalJavascript;
+
+use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
+
+/**
+ * Tests the UI for correct contextual links.
+ *
+ * @group contextual
+ */
+class ContextualLinksTest extends JavascriptTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['block', 'contextual'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->placeBlock('system_branding_block', ['id' => 'branding']);
+    $this->drupalLogin($this->drupalCreateUser([
+      'access contextual links'
+    ]));
+  }
+
+  /**
+   * Tests the visibility of contextual links.
+   */
+  public function testContextualLinksVisibility() {
+    $this->drupalGet('user');
+    $this->assertSession()->elementNotExists('css', '.contextual button');
+
+    // Ensure visibility remains correct after cached paged load.
+    $this->drupalGet('user');
+    $this->assertSession()->elementNotExists('css', '.contextual button');
+  }
+}
