diff --git a/core/lib/Drupal/Core/Render/Element/RenderElement.php b/core/lib/Drupal/Core/Render/Element/RenderElement.php
index 243a9af767..1663045c7d 100644
--- a/core/lib/Drupal/Core/Render/Element/RenderElement.php
+++ b/core/lib/Drupal/Core/Render/Element/RenderElement.php
@@ -138,7 +138,6 @@ public static function setAttributes(&$element, $class = []) {
     // \Drupal::formBuilder()->doBuildForm().
     if (!empty($element['#required'])) {
       $element['#attributes']['class'][] = 'required';
-      $element['#attributes']['required'] = 'required';
       $element['#attributes']['aria-required'] = 'true';
     }
     if (isset($element['#parents']) && isset($element['#errors']) && !empty($element['#validated'])) {
diff --git a/core/modules/system/src/Tests/Form/FormTest.php b/core/modules/system/src/Tests/Form/FormTest.php
index 4b8d042faa..a61c81850f 100644
--- a/core/modules/system/src/Tests/Form/FormTest.php
+++ b/core/modules/system/src/Tests/Form/FormTest.php
@@ -723,27 +723,4 @@ public function testInputForgery() {
     $this->assertText('An illegal choice has been detected.', 'Input forgery was detected.');
   }
 
-  /**
-   * Tests required attribute.
-   */
-  public function testRequiredAttribute() {
-    $this->drupalGet('form-test/required-attribute');
-    $expected = 'required';
-    // Test to make sure the elements have the proper required attribute.
-    foreach (['textfield', 'password'] as $type) {
-      $element = $this->xpath('//input[@id=:id and @required=:expected]', [
-        ':id' => 'edit-' . $type,
-        ':expected' => $expected,
-      ]);
-      $this->assertTrue(!empty($element), format_string('The @type has the proper required attribute.', ['@type' => $type]));
-    }
-
-    // Test to make sure textarea has the proper required attribute.
-    $element = $this->xpath('//textarea[@id=:id and @required=:expected]', [
-      ':id' => 'edit-textarea',
-      ':expected' => $expected,
-    ]);
-    $this->assertTrue(!empty($element), 'The textarea has the proper required attribute.');
-  }
-
 }
diff --git a/core/modules/system/tests/modules/form_test/form_test.routing.yml b/core/modules/system/tests/modules/form_test/form_test.routing.yml
index 2250a0bb2f..099d093cfc 100644
--- a/core/modules/system/tests/modules/form_test/form_test.routing.yml
+++ b/core/modules/system/tests/modules/form_test/form_test.routing.yml
@@ -393,14 +393,6 @@ form_test.checkboxes_zero:
   requirements:
     _access: 'TRUE'
 
-form_test.required:
-  path: '/form-test/required-attribute'
-  defaults:
-    _form: '\Drupal\form_test\Form\FormTestRequiredAttributeForm'
-    _title: 'Required'
-  requirements:
-    _access: 'TRUE'
-
 form_test.button_class:
   path: '/form-test/button-class'
   defaults:
diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestRequiredAttributeForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestRequiredAttributeForm.php
deleted file mode 100644
index b0aa1b00b7..0000000000
--- a/core/modules/system/tests/modules/form_test/src/Form/FormTestRequiredAttributeForm.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-namespace Drupal\form_test\Form;
-
-use Drupal\Core\Form\FormBase;
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Builds a form to test the required attribute.
- */
-class FormTestRequiredAttributeForm extends FormBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFormId() {
-    return 'form_test_required_attribute';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    foreach (['textfield', 'textarea', 'password'] as $type) {
-      $form[$type] = [
-        '#type' => $type,
-        '#required' => TRUE,
-        '#title' => $type,
-      ];
-    }
-    $form['submit'] = [
-      '#type' => 'submit',
-      '#value' => 'Submit',
-    ];
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-  }
-
-}
