# Cypress Documentation
# Source: https://raw.githubusercontent.com/cypress-io/cypress-documentation/main/docs/api/commands/submit.mdx
# Path: docs/api/commands/submit.mdx

---
title: 'submit | Cypress Documentation'
description: Submit a form in Cypress.
sidebar_label: submit
---

<ProductHeading product="app" />

# submit

Submit a form.

It is [unsafe](/app/core-concepts/retry-ability#Only-queries-are-retried) to
chain further commands that rely on the subject after `.submit()`.

:::caution

The [subject](/app/core-concepts/introduction-to-cypress#Subject-Management)
must be a `<form>`.

:::

## Syntax

```javascript
.submit()
.submit(options)
```

### Usage

<Icon name="check-circle" color="green" /> **Correct Usage**

```javascript
cy.get('form').submit() // Submit a form
```

<Icon name="exclamation-triangle" color="red" /> **Incorrect Usage**

```javascript
cy.submit() // Errors, cannot be chained off 'cy'
cy.get('input').submit() // Errors, 'input' does not yield a form
```

### Arguments

<Icon name="angle-right" /> **options _(Object)_**

Pass in an options object to change the default behavior of `.submit()`.

| Option    | Default                                                           | Description                                                                         |
| --------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| `log`     | `true`                                                            | Displays the command in the [Command log](/app/core-concepts/open-mode#Command-Log) |
| `timeout` | [`defaultCommandTimeout`](/app/references/configuration#Timeouts) | Time to wait for `.submit()` to resolve before [timing out](#Timeouts)              |

<HeaderYields />

- `.submit()` yields the same subject it was given.
- It is [unsafe](/app/core-concepts/retry-ability#Only-queries-are-retried)
  to chain further commands that rely on the subject after `.submit()`.

## Example

### No Args

#### Submit can only be called on a single form

```html
<form id="contact">
  <input type="text" name="message" />
  <button type="submit">Send</button>
</form>
```

```javascript
cy.get('#contact').submit()
```

## Notes

### Submit is not an action command

`.submit()` is not implemented like other action commands, and does not follow
the same rules of
[waiting for actionability](/app/core-concepts/interacting-with-elements).

`.submit()` is a helpful command used as a shortcut. Normally a user has to
perform a different "action" to submit a form. It could be clicking a submit
`<button>`, or pressing `enter` on a keyboard.

Oftentimes using `.submit()` directly is more concise and conveys what you're
trying to test.

If you want the other guarantees of waiting for an element to become actionable,
you should use a different command like [`.click()`](/api/commands/click) or
[`.type()`](/api/commands/type).

### Submit will fail if there are form validation errors

If the form being submitted includes inputs with
[client-side validation](https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation)
and that validation fails, `.submit()` will fail and list the validation
failures.

## Rules

<HeaderRequirements />

- `.submit()` requires being chained off a command that yields DOM element(s).
- `.submit()` requires the element to be a `form`.

<HeaderAssertions />

- `.submit()` will automatically wait for assertions you have chained to pass.

<HeaderTimeouts />

- `.submit()` can time out waiting for assertions you've added to pass.

## Command Log

**_Submit a form_**

```javascript
cy.intercept('POST', '/users', { fixture: 'user' }).as('userSuccess')
cy.get('form').submit()
```

The commands above will display in the Command Log as:

<DocsImage
  src="/img/api/submit/form-submit-shows-in-command-log-of-cypress.png"
  alt="Command Log submit"
/>

When clicking on `submit` within the command log, the console outputs the
following:

<DocsImage
  src="/img/api/submit/console-shows-what-form-was-submitted.png"
  alt="Console Log submit"
/>

## History

| Version                                    | Changes                   |
| ------------------------------------------ | ------------------------- |
| [< 0.3.3](/app/references/changelog#0-3-3) | `.submit()` command added |

## See also

- [`.click()`](/api/commands/click)
- [`.type()`](/api/commands/type)