# `Gherkin.Step`
[🔗](https://github.com/huddlz-hq/cucumber/blob/main/lib/gherkin.ex#L174)

Represents a Gherkin step (Given/When/Then/And/But/*).

A Step is a single action or assertion in a scenario. It consists of:
- keyword: The step type (Given, When, Then, And, But, or *)
- text: The step text that matches step definitions
- docstring: Optional multi-line text block (delimited by `"""` or triple backticks)
- docstring_media_type: Optional media type annotation on the opening
  docstring delimiter (e.g. `json` in `"""json`)
- datatable: Optional table data (pipe-delimited)
- line: Line number in the source file

`docstring_line`, `docstring_delimiter`, and `datatable_lines` record the
source line of the docstring's opening delimiter, the delimiter style used
(`"""` or triple backticks), and each datatable row's line (parallel to
`datatable`) for Cucumber Messages; the published `docstring` and
`datatable` shapes are unchanged.

# `t`

```elixir
@type t() :: %Gherkin.Step{
  datatable: [[String.t()]] | nil,
  datatable_lines: [non_neg_integer()] | nil,
  docstring: String.t() | nil,
  docstring_delimiter: String.t() | nil,
  docstring_line: non_neg_integer() | nil,
  docstring_media_type: String.t() | nil,
  keyword: String.t(),
  line: non_neg_integer() | nil,
  text: String.t()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
