function UiHelperTrait::submitForm

Same name in other branches
  1. 9 core/tests/Drupal/Tests/UiHelperTrait.php \Drupal\Tests\UiHelperTrait::submitForm()
  2. 10 core/tests/Drupal/Tests/UiHelperTrait.php \Drupal\Tests\UiHelperTrait::submitForm()
  3. 11.x core/tests/Drupal/Tests/UiHelperTrait.php \Drupal\Tests\UiHelperTrait::submitForm()

Fills and submits a form.

Parameters

array $edit: Field data in an associative array. Changes the current input fields (where possible) to the values indicated.

A checkbox can be set to TRUE to be checked and should be set to FALSE to be unchecked.

string $submit: Value of the submit button whose click is to be emulated. For example, 'Save'. The processing of the request depends on this value. For example, a form may have one button with the value 'Save' and another button with the value 'Delete', and execute different code depending on which one is clicked.

string $form_html_id: (optional) HTML ID of the form to be submitted. On some pages there are many identical forms, so just using the value of the submit button is not enough. For example: 'trigger-node-presave-assign-form'. Note that this is not the Drupal $form_id, but rather the HTML ID of the form, which is typically the same thing but with hyphens replacing the underscores.

39 calls to UiHelperTrait::submitForm()
BlockExposedFilterAJAXTest::testExposedFilteringAndReset in core/modules/views/tests/src/FunctionalJavascript/BlockExposedFilterAJAXTest.php
Tests if exposed filtering and reset works with a views block and ajax.
BlockUiTest::testBlockPlacementIndicator in core/modules/block/tests/src/Functional/BlockUiTest.php
Tests the block placement indicator.
BookJavascriptTest::testBookOrdering in core/modules/book/tests/src/FunctionalJavascript/BookJavascriptTest.php
Tests re-ordering of books.
BrowserTestBaseTest::testForm in core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php
Tests basic form functionality.
CKEditorAdminTest::testExistingFormat in core/modules/ckeditor/tests/src/Functional/CKEditorAdminTest.php
Tests configuring a text editor for an existing text format.

... See full list

File

core/tests/Drupal/Tests/UiHelperTrait.php, line 67

Class

UiHelperTrait
Provides UI helper methods.

Namespace

Drupal\Tests

Code

protected function submitForm(array $edit, $submit, $form_html_id = NULL) {
    $assert_session = $this->assertSession();
    // Get the form.
    if (isset($form_html_id)) {
        $form = $assert_session->elementExists('xpath', "//form[@id='{$form_html_id}']");
        $submit_button = $assert_session->buttonExists($submit, $form);
        $action = $form->getAttribute('action');
    }
    else {
        $submit_button = $assert_session->buttonExists($submit);
        $form = $assert_session->elementExists('xpath', './ancestor::form', $submit_button);
        $action = $form->getAttribute('action');
    }
    // Edit the form values.
    foreach ($edit as $name => $value) {
        $field = $assert_session->fieldExists($name, $form);
        // Provide support for the values '1' and '0' for checkboxes instead of
        // TRUE and FALSE.
        // @todo Get rid of supporting 1/0 by converting all tests cases using
        // this to boolean values.
        $field_type = $field->getAttribute('type');
        if ($field_type === 'checkbox') {
            $value = (bool) $value;
        }
        $field->setValue($value);
    }
    // Submit form.
    $this->prepareRequest();
    $submit_button->press();
    // Ensure that any changes to variables in the other thread are picked up.
    $this->refreshVariables();
    // Check if there are any meta refresh redirects (like Batch API pages).
    if ($this->checkForMetaRefresh()) {
        // We are finished with all meta refresh redirects, so reset the counter.
        $this->metaRefreshCount = 0;
    }
    // Log only for JavascriptTestBase tests because for Goutte we log with
    // ::getResponseLogHandler.
    if ($this->htmlOutputEnabled && !$this->getSession()
        ->getDriver() instanceof GoutteDriver) {
        $out = $this->getSession()
            ->getPage()
            ->getContent();
        $html_output = 'POST request to: ' . $action . '<hr />Ending URL: ' . $this->getSession()
            ->getCurrentUrl();
        $html_output .= '<hr />' . $out;
        $html_output .= $this->getHtmlOutputHeaders();
        $this->htmlOutput($html_output);
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.