diff --git a/core/modules/block/lib/Drupal/block/Tests/Views/DisplayBlockTest.php b/core/modules/block/lib/Drupal/block/Tests/Views/DisplayBlockTest.php
index 4a1e64dd10f687234fdb9d4a8ae6120f476f01f5..eda928589dd3bceb354260d7b8ebcae2f8df80ff 100644
--- a/core/modules/block/lib/Drupal/block/Tests/Views/DisplayBlockTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/Views/DisplayBlockTest.php
@@ -10,6 +10,7 @@
 use Drupal\Component\Utility\String;
 use Drupal\views\Tests\ViewTestBase;
 use Drupal\views\Tests\ViewTestData;
+use Drupal\Core\Template\Attribute;
 
 /**
  * Defines a test for block display.
@@ -232,7 +233,7 @@ public function testBlockContextualLinks() {
 
     $id = 'block:block=' . $block->id() . ':|views_ui_edit:view=test_view_block:location=block&name=test_view_block&display_id=block_1';
     // @see \Drupal\contextual\Tests\ContextualDynamicContextTest:assertContextualLinkPlaceHolder()
-    $this->assertRaw('<div data-contextual-id="'. $id . '"></div>', format_string('Contextual link placeholder with id @id exists.', array('@id' => $id)));
+    $this->assertRaw('<div' . new Attribute(array('data-contextual-id' => $id)) . '></div>', format_string('Contextual link placeholder with id @id exists.', array('@id' => $id)));
 
     // Get server-rendered contextual links.
     // @see \Drupal\contextual\Tests\ContextualDynamicContextTest:renderContextualLinks()
diff --git a/core/modules/contextual/contextual.module b/core/modules/contextual/contextual.module
index e405f206f40cf79cd1db2ae50ed578f3cd290d4b..130ba4c71a1bf4259067d1ccebefe6c67df49268 100644
--- a/core/modules/contextual/contextual.module
+++ b/core/modules/contextual/contextual.module
@@ -1,11 +1,13 @@
 <?php
-use Drupal\Component\Utility\Url;
 
 /**
  * @file
  * Adds contextual links to perform actions related to elements on a page.
  */
 
+use Drupal\Component\Utility\Url;
+use Drupal\Core\Template\Attribute;
+
 /**
  * Implements hook_menu().
  */
@@ -229,7 +231,7 @@ function contextual_preprocess(&$variables, $hook, $info) {
  * @see contextual_element_info()
  */
 function contextual_pre_render_placeholder($element) {
-  $element['#markup'] = '<div data-contextual-id="' . $element['#id'] . '"></div>';
+  $element['#markup'] = '<div' . new Attribute(array('data-contextual-id' => $element['#id'])) . '></div>';
   return $element;
 }
 
diff --git a/core/modules/contextual/lib/Drupal/contextual/Tests/ContextualDynamicContextTest.php b/core/modules/contextual/lib/Drupal/contextual/Tests/ContextualDynamicContextTest.php
index 4cbbca39f95081a3388d73eca23bcc4e568cc927..de44610f04aee3fa9c1b2319f16d728c118afa21 100644
--- a/core/modules/contextual/lib/Drupal/contextual/Tests/ContextualDynamicContextTest.php
+++ b/core/modules/contextual/lib/Drupal/contextual/Tests/ContextualDynamicContextTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\contextual\Tests;
 
 use Drupal\simpletest\WebTestBase;
+use Drupal\Core\Template\Attribute;
 
 /**
  * Tests accessible links after inaccessible links on dynamic context.
@@ -120,7 +121,7 @@ function testDifferentPermissions() {
    * @return bool
    */
   protected function assertContextualLinkPlaceHolder($id) {
-    $this->assertRaw('<div data-contextual-id="'. $id . '"></div>', format_string('Contextual link placeholder with id @id exists.', array('@id' => $id)));
+    $this->assertRaw('<div' . new Attribute(array('data-contextual-id' => $id)) . '></div>', format_string('Contextual link placeholder with id @id exists.', array('@id' => $id)));
   }
 
   /**
@@ -132,7 +133,7 @@ protected function assertContextualLinkPlaceHolder($id) {
    * @return bool
    */
   protected function assertNoContextualLinkPlaceHolder($id) {
-    $this->assertNoRaw('<div data-contextual-id="'. $id . '"></div>', format_string('Contextual link placeholder with id @id does not exist.', array('@id' => $id)));
+    $this->assertNoRaw('<div' . new Attribute(array('data-contextual-id' => $id)) . '></div>', format_string('Contextual link placeholder with id @id does not exist.', array('@id' => $id)));
   }
 
   /**
diff --git a/core/modules/views_ui/lib/Drupal/views_ui/Tests/DisplayTest.php b/core/modules/views_ui/lib/Drupal/views_ui/Tests/DisplayTest.php
index 0d8ae6602164899c094356bec5c95d894deea953..b1290c3167ec7ebbc3069939e601cfbd2845a91b 100644
--- a/core/modules/views_ui/lib/Drupal/views_ui/Tests/DisplayTest.php
+++ b/core/modules/views_ui/lib/Drupal/views_ui/Tests/DisplayTest.php
@@ -9,11 +9,12 @@
 
 use Drupal\Component\Utility\String;
 
+use Drupal\views\Views;
+use Drupal\Core\Template\Attribute;
+
 /**
  * Tests the handling of displays in the UI, adding removing etc.
  */
-use Drupal\views\Views;
-
 class DisplayTest extends UITestBase {
 
   /**
@@ -295,7 +296,7 @@ public function testPageContextualLinks() {
     $this->drupalGet('test-display');
     $id = 'views_ui_edit:view=test_display:location=page&name=test_display&display_id=page_1';
     // @see \Drupal\contextual\Tests\ContextualDynamicContextTest:assertContextualLinkPlaceHolder()
-    $this->assertRaw('<div data-contextual-id="'. $id . '"></div>', format_string('Contextual link placeholder with id @id exists.', array('@id' => $id)));
+    $this->assertRaw('<div' . new Attribute(array('data-contextual-id' => $id)) . '></div>', format_string('Contextual link placeholder with id @id exists.', array('@id' => $id)));
 
     // Get server-rendered contextual links.
     // @see \Drupal\contextual\Tests\ContextualDynamicContextTest:renderContextualLinks()