

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
123456# Behat Steps - Claude Memory78## Available steps910### Index of Generic steps1112| Class | Description |13| --- | --- |14| [CookieTrait](mdc:#cookietrait) | Verify and inspect browser cookies. |15| [DateTrait](mdc:#datetrait) | Convert relative date expressions into timestamps or formatted dates. |16| [ElementTrait](mdc:#elementtrait) | Interact with HTML elements using CSS selectors and DOM attributes. |17| [FileDownloadTrait](mdc:#filedownloadtrait) | Test file download functionality with content verification. |18| [KeyboardTrait](mdc:#keyboardtrait) | Simulate keyboard interactions in Drupal browser testing. |19| [LinkTrait](mdc:#linktrait) | Verify link elements with attribute and content assertions. |20| [PathTrait](mdc:#pathtrait) | Navigate and verify paths with URL validation. |21| [ResponseTrait](mdc:#responsetrait) | Verify HTTP responses with status code and header checks. |22| [WaitTrait](mdc:#waittrait) | Wait for a period of time or for AJAX to finish. |2324### Index of Drupal steps2526| Class | Description |27| --- | --- |28| [Drupal\BigPipeTrait](mdc:#drupalbigpipetrait) | Bypass Drupal BigPipe when rendering pages. |29| [Drupal\BlockTrait](mdc:#drupalblocktrait) | Manage Drupal blocks. |30| [Drupal\ContentBlockTrait](mdc:#drupalcontentblocktrait) | Manage Drupal content blocks. |31| [Drupal\ContentTrait](mdc:#drupalcontenttrait) | Manage Drupal content with workflow and moderation support. |32| [Drupal\DraggableviewsTrait](mdc:#drupaldraggableviewstrait) | Order items in the Drupal Draggable Views. |33| [Drupal\EckTrait](mdc:#drupalecktrait) | Manage Drupal ECK entities with custom type and bundle creation. |34| [Drupal\EmailTrait](mdc:#drupalemailtrait) | Test Drupal email functionality with content verification. |35| [Drupal\FieldTrait](mdc:#drupalfieldtrait) | Manipulate Drupal form fields and verify widget functionality. |36| [Drupal\FileTrait](mdc:#drupalfiletrait) | Manage Drupal file entities with upload and storage operations. |37| [Drupal\MediaTrait](mdc:#drupalmediatrait) | Manage Drupal media entities with type-specific field handling. |38| [Drupal\MenuTrait](mdc:#drupalmenutrait) | Manage Drupal menu systems and menu link rendering. |39| [Drupal\MetatagTrait](mdc:#drupalmetatagtrait) | Assert `<meta>` tags in page markup. |40| [Drupal\OverrideTrait](mdc:#drupaloverridetrait) | Override Drupal Extension behaviors. |41| [Drupal\ParagraphsTrait](mdc:#drupalparagraphstrait) | Manage Drupal paragraphs entities with structured field data. |42| [Drupal\SearchApiTrait](mdc:#drupalsearchapitrait) | Assert Drupal Search API with index and query operations. |43| [Drupal\TaxonomyTrait](mdc:#drupaltaxonomytrait) | Manage Drupal taxonomy terms with vocabulary organization. |44| [Drupal\TestmodeTrait](mdc:#drupaltestmodetrait) | Configure Drupal Testmode module for controlled testing scenarios. |45| [Drupal\UserTrait](mdc:#drupalusertrait) | Manage Drupal users with role and permission assignments. |46| [Drupal\WatchdogTrait](mdc:#drupalwatchdogtrait) | Assert Drupal does not trigger PHP errors during scenarios using Watchdog. |474849---5051## CookieTrait5253[Source](mdc:src/CookieTrait.php), [Example](mdc:tests/behat/features/cookie.feature)5455> Verify and inspect browser cookies.56> - Assert cookie existence and values with exact or partial matching.57> - Support both WebDriver and BrowserKit drivers for test compatibility.585960<details>61 <summary><code>@Then a cookie with the name :name should exist</code></summary>6263<br/>64Assert that a cookie exists65<br/><br/>6667```gherkin68Then a cookie with the name "session_id" should exist6970```7172</details>7374<details>75 <summary><code>@Then a cookie with the name :name and the value :value should exist</code></summary>7677<br/>78Assert that a cookie exists with a specific value79<br/><br/>8081```gherkin82Then a cookie with the name "language" and the value "en" should exist8384```8586</details>8788<details>89 <summary><code>@Then a cookie with the name :name and a value containing :partial_value should exist</code></summary>9091<br/>92Assert that a cookie exists with a value containing a partial value93<br/><br/>9495```gherkin96Then a cookie with the name "preferences" and a value containing "darkmode" should exist9798```99100</details>101102<details>103 <summary><code>@Then a cookie with a name containing :partial_name should exist</code></summary>104105<br/>106Assert that a cookie with a partial name exists107<br/><br/>108109```gherkin110Then a cookie with a name containing "session" should exist111112```113114</details>115116<details>117 <summary><code>@Then a cookie with a name containing :partial_name and the value :value should exist</code></summary>118119<br/>120Assert that a cookie with a partial name and value exists121<br/><br/>122123```gherkin124Then a cookie with a name containing "user" and the value "admin" should exist125126```127128</details>129130<details>131 <summary><code>@Then a cookie with a name containing :partial_name and a value containing :partial_value should exist</code></summary>132133<br/>134Assert that a cookie with a partial name and partial value exists135<br/><br/>136137```gherkin138Then a cookie with a name containing "user" and a value containing "admin" should exist139140```141142</details>143144<details>145 <summary><code>@Then a cookie with the name :name should not exist</code></summary>146147<br/>148Assert that a cookie does not exist149<br/><br/>150151```gherkin152Then a cookie with name "old_session" should not exist153154```155156</details>157158<details>159 <summary><code>@Then a cookie with the name :name and the value :value should not exist</code></summary>160161<br/>162Assert that a cookie with a specific value does not exist163<br/><br/>164165```gherkin166Then a cookie with the name "language" and the value "fr" should not exist167168```169170</details>171172<details>173 <summary><code>@Then a cookie with the name :name and a value containing :partial_value should not exist</code></summary>174175<br/>176Assert that a cookie with a value containing a partial value does not exist177<br/><br/>178179```gherkin180Then a cookie with the name "preferences" and a value containing "lightmode" should not exist181182```183184</details>185186<details>187 <summary><code>@Then a cookie with a name containing :partial_name should not exist</code></summary>188189<br/>190Assert that a cookie with a partial name does not exist191<br/><br/>192193```gherkin194Then a cookie with a name containing "old" should not exist195196```197198</details>199200<details>201 <summary><code>@Then a cookie with a name containing :partial_name and the value :value should not exist</code></summary>202203<br/>204Assert that a cookie with a partial name and value does not exist205<br/><br/>206207```gherkin208Then a cookie with a name containing "user" and the value "guest" should not exist209210```211212</details>213214<details>215 <summary><code>@Then a cookie with a name containing :partial_name and a value containing :partial_value should not exist</code></summary>216217<br/>218Assert that a cookie with a partial name and partial value does not exist219<br/><br/>220221```gherkin222Then a cookie with a name containing "user" and a value containing "guest" should not exist223224```225226</details>227228## DateTrait229230[Source](mdc:src/DateTrait.php), [Example](mdc:tests/behat/features/date.feature)231232> Convert relative date expressions into timestamps or formatted dates.233> <br/><br/>234> Supports values and tables.235> <br/><br/>236> Possible formats:237> - `[relative:OFFSET]`238> - `[relative:OFFSET#FORMAT]`239>240> with:241> - `OFFSET`: any format that can be parsed by `strtotime()`.242> - `FORMAT`: `date()` format for additional processing.243>244> Examples:245> - `[relative:-1 day]` converted to `1893456000`246> - `[relative:-1 day#Y-m-d]` converted to `2017-11-5`247248249## ElementTrait250251[Source](mdc:src/ElementTrait.php), [Example](mdc:tests/behat/features/element.feature)252253> Interact with HTML elements using CSS selectors and DOM attributes.254> - Assert element visibility, attribute values, and viewport positioning.255> - Execute JavaScript-based interactions with element state verification.256> - Handle confirmation dialogs and scrolling operations.257258259<details>260 <summary><code>@Given I accept all confirmation dialogs</code></summary>261262<br/>263Accept confirmation dialogs appearing on the page264<br/><br/>265266```gherkin267Given I accept all confirmation dialogs268269```270271</details>272273<details>274 <summary><code>@Given I do not accept any confirmation dialogs</code></summary>275276<br/>277Do not accept confirmation dialogs appearing on the page278<br/><br/>279280```gherkin281Given I do not accept any confirmation dialogs282283```284285</details>286287<details>288 <summary><code>@When I click on the element :selector</code></summary>289290<br/>291Click on the element defined by the selector292<br/><br/>293294```gherkin295When I click on the element ".button"296297```298299</details>300301<details>302 <summary><code>@When I trigger the JS event :event on the element :selector</code></summary>303304<br/>305When I trigger the JS event :event on the element :selector306<br/><br/>307308```gherkin309When I trigger the JS event "click" on the element "#submit-button"310311```312313</details>314315<details>316 <summary><code>@When I scroll to the element :selector</code></summary>317318<br/>319Scroll to an element with ID320<br/><br/>321322```gherkin323When I scroll to the element "#footer"324325```326327</details>328329<details>330 <summary><code>@Then the element :selector with the attribute :attribute and the value :value should exist</code></summary>331332<br/>333Assert an element with selector and attribute with a value exists334<br/><br/>335336```gherkin337Then the element "#main-content" with the attribute "class" and the value "content-wrapper" should exist338339```340341</details>342343<details>344 <summary><code>@Then the element :selector with the attribute :attribute and the value containing :value should exist</code></summary>345346<br/>347Assert an element with selector and attribute containing a value exists348<br/><br/>349350```gherkin351Then the element "#main-content" with the attribute "class" and the value containing "content" should exist352353```354355</details>356357<details>358 <summary><code>@Then the element :selector with the attribute :attribute and the value :value should not exist</code></summary>359360<br/>361Assert an element with selector and attribute with a value exists362<br/><br/>363364```gherkin365Then the element "#main-content" with the attribute "class" and the value "hidden" should not exist366367```368369</details>370371<details>372 <summary><code>@Then the element :selector with the attribute :attribute and the value containing :value should not exist</code></summary>373374<br/>375Assert an element with selector and attribute containing a value does not exist376<br/><br/>377378```gherkin379Then the element "#main-content" with the attribute "class" and the value containing "hidden" should not exist380381```382383</details>384385<details>386 <summary><code>@Then the element :selector should be at the top of the viewport</code></summary>387388<br/>389Assert the element :selector should be at the top of the viewport390<br/><br/>391392```gherkin393Then the element "#header" should be at the top of the viewport394395```396397</details>398399<details>400 <summary><code>@Then the element :selector should be displayed</code></summary>401402<br/>403Assert that element with specified CSS is visible on page404<br/><br/>405406```gherkin407Then the element ".alert-success" should be displayed408409```410411</details>412413<details>414 <summary><code>@Then the element :selector should not be displayed</code></summary>415416<br/>417Assert that element with specified CSS is not visible on page418<br/><br/>419420```gherkin421Then the element ".error-message" should not be displayed422423```424425</details>426427<details>428 <summary><code>@Then the element :selector should be displayed within a viewport</code></summary>429430<br/>431Assert that element with specified CSS is displayed within a viewport432<br/><br/>433434```gherkin435Then the element ".hero-banner" should be displayed within a viewport436437```438439</details>440441<details>442 <summary><code>@Then the element :selector should be displayed within a viewport with a top offset of :number pixels</code></summary>443444<br/>445Assert that element with specified CSS is displayed within a viewport with a top offset446<br/><br/>447448```gherkin449Then the element ".sticky-header" should be displayed within a viewport with a top offset of 50 pixels450451```452453</details>454455<details>456 <summary><code>@Then the element :selector should not be displayed within a viewport with a top offset of :number pixels</code></summary>457458<br/>459Assert that element with specified CSS is not displayed within a viewport with a top offset460<br/><br/>461462```gherkin463Then the element ".below-fold-content" should not be displayed within a viewport with a top offset of 0 pixels464465```466467</details>468469<details>470 <summary><code>@Then the element :selector should not be displayed within a viewport</code></summary>471472<br/>473Assert that element with specified CSS is visually hidden on page474<br/><br/>475476```gherkin477Then the element ".visually-hidden" should not be displayed within a viewport478479```480481</details>482483## FileDownloadTrait484485[Source](mdc:src/FileDownloadTrait.php), [Example](mdc:tests/behat/features/file_download.feature)486487> Test file download functionality with content verification.488> - Download files through links and URLs with session cookie handling.489> - Verify file names, content, and extracted archives.490> - Set up download directories and handle file cleanup.491>492> Skip processing with tags: `@behat-steps-skip:fileDownloadBeforeScenario` or493> `@behat-steps-skip:fileDownloadAfterScenario`494> <br/><br/>495> Special tags:496> - `@download` - enable download handling497498499<details>500 <summary><code>@When I download the file from the URL :url</code></summary>501502<br/>503Download a file from the specified URL504<br/><br/>505506```gherkin507When I download the file from the URL "/sites/default/files/document.pdf"508When I download the file from the URL "https://example.com/files/report.xlsx"509510```511512</details>513514<details>515 <summary><code>@When I download the file from the link :link</code></summary>516517<br/>518Download the file from the specified HTML link519<br/><br/>520521```gherkin522When I download the file from the link "Download PDF"523When I download the file from the link "Get Report"524525```526527</details>528529<details>530 <summary><code>@Then the downloaded file should contain:</code></summary>531532<br/>533Assert the contents of the download file534<br/><br/>535536```gherkin537Then the downloaded file should contain:538"""539Financial Report 2023540"""541542```543544</details>545546<details>547 <summary><code>@Then the downloaded file name should be :name</code></summary>548549<br/>550Assert the file name of the downloaded file551<br/><br/>552553```gherkin554Then the downloaded file name should be "report.pdf"555556```557558</details>559560<details>561 <summary><code>@Then the downloaded file name should contain :name</code></summary>562563<br/>564Assert the downloaded file name contains a specific string565<br/><br/>566567```gherkin568Then the downloaded file name should contain "report"569570```571572</details>573574<details>575 <summary><code>@Then the downloaded file should be a zip archive containing the files named:</code></summary>576577<br/>578Assert the downloaded file should be a zip archive containing specific files579<br/><br/>580581```gherkin582Then the downloaded file should be a zip archive containing the files named:583| document.pdf |584| image.jpg |585| data.csv |586587```588589</details>590591<details>592 <summary><code>@Then the downloaded file should be a zip archive containing the files partially named:</code></summary>593594<br/>595Assert the downloaded file should be a zip archive containing files with partial names596<br/><br/>597598```gherkin599Then the downloaded file should be a zip archive containing the files partially named:600| report |601| data |602| image |603604```605606</details>607608<details>609 <summary><code>@Then the downloaded file should be a zip archive not containing the files partially named:</code></summary>610611<br/>612Assert the downloaded file is a zip archive not containing files with partial names613<br/><br/>614615```gherkin616Then the downloaded file should be a zip archive not containing the files partially named:617| confidential |618| private |619| draft |620621```622623</details>624625## KeyboardTrait626627[Source](mdc:src/KeyboardTrait.php), [Example](mdc:tests/behat/features/keyboard.feature)628629> Simulate keyboard interactions in Drupal browser testing.630> - Trigger key press events including special keys and key combinations.631> - Assert keyboard navigation and shortcut functionality.632> - Support for targeted key presses on specific page elements.633634635<details>636 <summary><code>@When I press the key :key</code></summary>637638<br/>639Press a single keyboard key640<br/><br/>641642```gherkin643When I press the key "a"644When I press the key "tab"645646```647648</details>649650<details>651 <summary><code>@When I press the key :key on the element :selector</code></summary>652653<br/>654Press a single keyboard key on the element655<br/><br/>656657```gherkin658When I press the key "a" on the element "#edit-title"659When I press the key "tab" on the element "#edit-title"660661```662663</details>664665<details>666 <summary><code>@When I press the keys :keys</code></summary>667668<br/>669Press multiple keyboard keys670<br/><br/>671672```gherkin673When I press the keys "abc"674675```676677</details>678679<details>680 <summary><code>@When I press the keys :keys on the element :selector</code></summary>681682<br/>683Press multiple keyboard keys on the element684<br/><br/>685686```gherkin687When I press the keys "abc" on the element "#edit-title"688689```690691</details>692693## LinkTrait694695[Source](mdc:src/LinkTrait.php), [Example](mdc:tests/behat/features/link.feature)696697> Verify link elements with attribute and content assertions.698> - Find links by title, URL, text content, and class attributes.699> - Test link existence, visibility, and destination accuracy.700> - Assert absolute and relative link paths.701702703<details>704 <summary><code>@When I click on the link with the title :title</code></summary>705706<br/>707Click on the link with a title708<br/><br/>709710```gherkin711When I click on the link with the title "Return to site content"712713```714715</details>716717<details>718 <summary><code>@Then the link :link with the href :href should exist</code></summary>719720<br/>721Assert a link with a href exists722<br/><br/>723724```gherkin725Then the link "About us" with the href "/about-us" should exist726Then the link "About us" with the href "/about*" should exist727728```729730</details>731732<details>733 <summary><code>@Then the link :link with the href :href within the element :selector should exist</code></summary>734735<br/>736Assert link with a href exists within an element737<br/><br/>738739```gherkin740Then the link "About us" with the href "/about-us" within the element ".main-nav" should exist741Then the link "About us" with the href "/about*" within the element ".main-nav" should exist742743```744745</details>746747<details>748 <summary><code>@Then the link :link with the href :href should not exist</code></summary>749750<br/>751Assert link with a href does not exist752<br/><br/>753754```gherkin755Then the link "About us" with the href "/about-us" should not exist756Then the link "About us" with the href "/about*" should not exist757758```759760</details>761762<details>763 <summary><code>@Then the link :link with the href :href within the element :selector should not exist</code></summary>764765<br/>766Assert link with a href does not exist within an element767<br/><br/>768769```gherkin770Then the link "About us" with the href "/about-us" within the element ".main-nav" should not exist771Then the link "About us" with the href "/about*" within the element ".main-nav" should not exist772773```774775</details>776777<details>778 <summary><code>@Then the link with the title :title should exist</code></summary>779780<br/>781Assert that a link with a title exists782<br/><br/>783784```gherkin785Then the link with the title "Return to site content" should exist786787```788789</details>790791<details>792 <summary><code>@Then the link with the title :title should not exist</code></summary>793794<br/>795Assert that a link with a title does not exist796<br/><br/>797798```gherkin799Then the link with the title "Some non-existing title" should not exist800801```802803</details>804805<details>806 <summary><code>@Then the link :link should be an absolute link</code></summary>807808<br/>809Assert that the link with a text is absolute810<br/><br/>811812```gherkin813Then the link "my-link-title" should be an absolute link814815```816817</details>818819<details>820 <summary><code>@Then the link :link should not be an absolute link</code></summary>821822<br/>823Assert that the link is not an absolute824<br/><br/>825826```gherkin827Then the link "Return to site content" should not be an absolute link828829```830831</details>832833## PathTrait834835[Source](mdc:src/PathTrait.php), [Example](mdc:tests/behat/features/path.feature)836837> Navigate and verify paths with URL validation.838> - Assert current page location with front page special handling.839> - Configure basic authentication for protected path access.840841842<details>843 <summary><code>@Given the basic authentication with the username :username and the password :password</code></summary>844845<br/>846Set basic authentication for the current session847<br/><br/>848849```gherkin850Given the basic authentication with the username "myusername" and the password "mypassword"851852```853854</details>855856<details>857 <summary><code>@Then the path should be :path</code></summary>858859<br/>860Assert that the current page is a specified path861<br/><br/>862863```gherkin864Then the path should be "/about-us"865Then the path should be "<front>"866867```868869</details>870871<details>872 <summary><code>@Then the path should not be :path</code></summary>873874<br/>875Assert that the current page is not a specified path876<br/><br/>877878```gherkin879Then the path should not be "/about-us"880Then the path should not be "<front>"881882```883884</details>885886## ResponseTrait887888[Source](mdc:src/ResponseTrait.php), [Example](mdc:tests/behat/features/response.feature)889890> Verify HTTP responses with status code and header checks.891> - Assert HTTP header presence and values.892893894<details>895 <summary><code>@Then the response should contain the header :header_name</code></summary>896897<br/>898Assert that a response contains a header with specified name899<br/><br/>900901```gherkin902Then the response should contain the header "Connection"903904```905906</details>907908<details>909 <summary><code>@Then the response should not contain the header :header_name</code></summary>910911<br/>912Assert that a response does not contain a header with a specified name913<br/><br/>914915```gherkin916Then the response should not contain the header "Connection"917918```919920</details>921922<details>923 <summary><code>@Then the response header :header_name should contain the value :header_value</code></summary>924925<br/>926Assert that a response contains a header with a specified name and value927<br/><br/>928929```gherkin930Then the response header "Connection" should contain the value "Keep-Alive"931932```933934</details>935936<details>937 <summary><code>@Then the response header :header_name should not contain the value :header_value</code></summary>938939<br/>940Assert a response does not contain a header with a specified name and value941<br/><br/>942943```gherkin944Then the response header "Connection" should not contain the value "Keep-Alive"945946```947948</details>949950## WaitTrait951952[Source](mdc:src/WaitTrait.php), [Example](mdc:tests/behat/features/wait.feature)953954> Wait for a period of time or for AJAX to finish.955956957<details>958 <summary><code>@When I wait for :seconds second(s)</code></summary>959960<br/>961Wait for a specified number of seconds962<br/><br/>963964```gherkin965When I wait for 5 seconds966When I wait for 1 second967968```969970</details>971972<details>973 <summary><code>@When I wait for :seconds second(s) for AJAX to finish</code></summary>974975<br/>976Wait for the AJAX calls to finish977<br/><br/>978979```gherkin980When I wait for 5 seconds for AJAX to finish981When I wait for 1 second for AJAX to finish982983```984985</details>986987988989## Drupal\BigPipeTrait990991[Source](mdc:src/Drupal/BigPipeTrait.php), [Example](mdc:tests/behat/features/drupal_big_pipe.feature)992993> Bypass Drupal BigPipe when rendering pages.994> <br/><br/>995> Activated by adding `@big_pipe` tag to the scenario.996> <br/><br/>997> Skip processing with tags: `@behat-steps-skip:bigPipeBeforeScenario` or998> `@behat-steps-skip:bigPipeBeforeStep`.99910001001## Drupal\BlockTrait10021003[Source](mdc:src/Drupal/BlockTrait.php), [Example](mdc:tests/behat/features/drupal_block.feature)10041005> Manage Drupal blocks.1006> - Create and configure blocks with custom visibility conditions.1007> - Place blocks in regions and verify their rendering in the page.1008> - Automatically clean up created blocks after scenario completion.1009>1010> Skip processing with tag: `@behat-steps-skip:blockAfterScenario`101110121013<details>1014 <summary><code>@Given the instance of :admin_label block exists with the following configuration:</code></summary>10151016<br/>1017Create a block instance1018<br/><br/>10191020```gherkin1021Given the instance of "My block" block exists with the following configuration:1022 | label | My block |1023 | label_display | 1 |1024 | region | content |1025 | status | 1 |10261027```10281029</details>10301031<details>1032 <summary><code>@Given the block :label has the following configuration:</code></summary>10331034<br/>1035Configure an existing block identified by label1036<br/><br/>10371038```gherkin1039Given the block "My block" has the following configuration:1040| label_display | 1 |1041| region | content |1042| status | 1 |10431044```10451046</details>10471048<details>1049 <summary><code>@Given the block :label does not exist</code></summary>10501051<br/>1052Remove a block specified by label1053<br/><br/>10541055```gherkin1056Given the block "My block" does not exist10571058```10591060</details>10611062<details>1063 <summary><code>@Given the block :label is enabled</code></summary>10641065<br/>1066Enable a block specified by label1067<br/><br/>10681069```gherkin1070Given the block "My block" is enabled10711072```10731074</details>10751076<details>1077 <summary><code>@Given the block :label is disabled</code></summary>10781079<br/>1080Disable a block specified by label1081<br/><br/>10821083```gherkin1084Given the block "My block" is disabled10851086```10871088</details>10891090<details>1091 <summary><code>@Given the block :label has the following :condition condition configuration:</code></summary>10921093<br/>1094Set a visibility condition for a block1095<br/><br/>10961097```gherkin1098Given the block "My block" has the following "request_path" condition configuration:1099| pages | /node/1\r\n/about |1100| negate | 0 |11011102```11031104</details>11051106<details>1107 <summary><code>@Given the block :label has the :condition condition removed</code></summary>11081109<br/>1110Remove a visibility condition from the specified block1111<br/><br/>11121113```gherkin1114Given the block "My block" has the "request_path" condition removed11151116```11171118</details>11191120<details>1121 <summary><code>@Then the block :label should exist</code></summary>11221123<br/>1124Assert that a block with the specified label exists1125<br/><br/>11261127```gherkin1128Then the block "My block" should exist11291130```11311132</details>11331134<details>1135 <summary><code>@Then the block :label should not exist</code></summary>11361137<br/>1138Assert that a block with the specified label does not exist1139<br/><br/>11401141```gherkin1142Then the block "My block" should not exist11431144```11451146</details>11471148<details>1149 <summary><code>@Then the block :label should exist in the :region region</code></summary>11501151<br/>1152Assert that a block with the specified label exists in a region1153<br/><br/>11541155```gherkin1156Then the block "My block" should exist in the "content" region11571158```11591160</details>11611162<details>1163 <summary><code>@Then the block :label should not exist in the :region region</code></summary>11641165<br/>1166Assert that a block with the specified label does not exist in a region1167<br/><br/>11681169```gherkin1170Then the block "My block" should not exist in the "content" region11711172```11731174</details>11751176## Drupal\ContentBlockTrait11771178[Source](mdc:src/Drupal/ContentBlockTrait.php), [Example](mdc:tests/behat/features/drupal_content_block.feature)11791180> Manage Drupal content blocks.1181> - Define reusable custom block content with structured field data.1182> - Create, edit, and verify block_content entities by type and description.1183> - Automatically clean up created entities after scenario completion.1184>1185> Skip processing with tag: `@behat-steps-skip:contentBlockAfterScenario`118611871188<details>1189 <summary><code>@Given the following :type content blocks do not exist:</code></summary>11901191<br/>1192Remove content blocks of a specified type with the given descriptions1193<br/><br/>11941195```gherkin1196Given the following "basic" content blocks do not exist:1197| [TEST] Footer Block |1198| [TEST] Contact Form |11991200```12011202</details>12031204<details>1205 <summary><code>@Given the following :type content blocks exist:</code></summary>12061207<br/>1208Create content blocks of the specified type with the given field values1209<br/><br/>12101211```gherkin1212Given the following "basic" content blocks exist:1213| info | status | body | created |1214| [TEST] Footer Contact | 1 | Call us at 555-1234 | 2023-01-17 8:00am |1215| [TEST] Copyright | 1 | © 2023 Example Company | 2023-01-18 9:00am |12161217```12181219</details>12201221<details>1222 <summary><code>@When I edit the :type content block with the description :description</code></summary>12231224<br/>1225Navigate to the edit page for a specified content block1226<br/><br/>12271228```gherkin1229When I edit the "basic" content block with the description "[TEST] Footer Block"12301231```12321233</details>12341235<details>1236 <summary><code>@Then the content block type :type should exist</code></summary>12371238<br/>1239Assert that a content block type exists1240<br/><br/>12411242```gherkin1243Then the content block type "Search" should exist12441245```12461247</details>12481249## Drupal\ContentTrait12501251[Source](mdc:src/Drupal/ContentTrait.php), [Example](mdc:tests/behat/features/drupal_content.feature)12521253> Manage Drupal content with workflow and moderation support.1254> - Create, find, and manipulate nodes with structured field data.1255> - Navigate to node pages by title and manage editorial workflows.1256> - Support content moderation transitions and scheduled publishing.125712581259<details>1260 <summary><code>@Given the content type :content_type does not exist</code></summary>12611262<br/>1263Delete content type1264<br/><br/>12651266```gherkin1267Given the content type "article" does not exist12681269```12701271</details>12721273<details>1274 <summary><code>@Given the following :content_type content does not exist:</code></summary>12751276<br/>1277Remove content defined by provided properties1278<br/><br/>12791280```gherkin1281Given the following "article" content does not exist:1282 | title |1283 | Test article |1284 | Another test article |12851286```12871288</details>12891290<details>1291 <summary><code>@When I visit the :content_type content page with the title :title</code></summary>12921293<br/>1294Visit a page of a type with a specified title1295<br/><br/>12961297```gherkin1298When I visit the "article" content page with the title "Test article"12991300```13011302</details>13031304<details>1305 <summary><code>@When I visit the :content_type content edit page with the title :title</code></summary>13061307<br/>1308Visit an edit page of a type with a specified title1309<br/><br/>13101311```gherkin1312When I visit the "article" content edit page with the title "Test article"13131314```13151316</details>13171318<details>1319 <summary><code>@When I visit the :content_type content delete page with the title :title</code></summary>13201321<br/>1322Visit a delete page of a type with a specified title1323<br/><br/>13241325```gherkin1326When I visit the "article" content delete page with the title "Test article"13271328```13291330</details>13311332<details>1333 <summary><code>@When I visit the :content_type content scheduled transitions page with the title :title</code></summary>13341335<br/>1336Visit a scheduled transitions page of a type with a specified title1337<br/><br/>13381339```gherkin1340When I visit the "article" content scheduled transitions page with the title "Test article"13411342```13431344</details>13451346<details>1347 <summary><code>@When I change the moderation state of the :content_type content with the title :title to the :new_state state</code></summary>13481349<br/>1350Change moderation state of a content with the specified title1351<br/><br/>13521353```gherkin1354When I change the moderation state of the "article" content with the title "Test article" to the "published" state13551356```13571358</details>13591360## Drupal\DraggableviewsTrait13611362[Source](mdc:src/Drupal/DraggableviewsTrait.php), [Example](mdc:tests/behat/features/drupal_draggableviews.feature)13631364> Order items in the Drupal Draggable Views.136513661367<details>1368 <summary><code>@When I save the draggable views items of the view :view_id and the display :views_display_id for the :bundle content in the following order:</code></summary>13691370<br/>1371Save order of the Draggable Order items1372<br/><br/>13731374```gherkin1375When I save the draggable views items of the view "draggableviews_demo" and the display "page_1" for the "article" content in the following order:1376 | First Article |1377 | Second Article |1378 | Third Article |13791380```13811382</details>13831384## Drupal\EckTrait13851386[Source](mdc:src/Drupal/EckTrait.php), [Example](mdc:tests/behat/features/drupal_eck.feature)13871388> Manage Drupal ECK entities with custom type and bundle creation.1389> - Create structured ECK entities with defined field values.1390> - Assert entity type registration and visit entity pages.1391> - Automatically clean up created entities after scenario completion.1392>1393> Skip processing with tag: `@behat-steps-skip:eckAfterScenario`139413951396<details>1397 <summary><code>@Given the following eck :bundle :entity_type entities exist:</code></summary>13981399<br/>1400Create eck entities1401<br/><br/>14021403```gherkin1404Given the following eck "contact" "contact_type" entities exist:1405| title | field_marine_animal | field_fish_type | ... |1406| Snook | Fish | Marine fish | 10 |1407| ... | ... | ... | ... |14081409```14101411</details>14121413<details>1414 <summary><code>@Given the following eck :bundle :entity_type entities do not exist:</code></summary>14151416<br/>1417Remove custom entities by field1418<br/><br/>14191420```gherkin1421Given the following eck "contact" "contact_type" entities do not exist:1422| field | value |1423| field_a | Entity label |14241425```14261427</details>14281429<details>1430 <summary><code>@When I visit eck :bundle :entity_type entity with the title :title</code></summary>14311432<br/>1433Navigate to view entity page with specified type and title1434<br/><br/>14351436```gherkin1437When I visit eck "contact" "contact_type" entity with the title "Test contact"14381439```14401441</details>14421443<details>1444 <summary><code>@When I edit eck :bundle :entity_type entity with the title :title</code></summary>14451446<br/>1447Navigate to edit eck entity page with specified type and title1448<br/><br/>14491450```gherkin1451When I edit eck "contact" "contact_type" entity with the title "Test contact"14521453```14541455</details>14561457## Drupal\EmailTrait14581459[Source](mdc:src/Drupal/EmailTrait.php), [Example](mdc:tests/behat/features/drupal_email.feature)14601461> Test Drupal email functionality with content verification.1462> - Capture and examine outgoing emails with header and body validation.1463> - Follow links and test attachments within email content.1464> - Configure mail handler systems for proper test isolation.1465>1466> Skip processing with tags: `@behat-steps-skip:emailBeforeScenario` or1467> `@behat-steps-skip:emailAfterScenario`1468> <br/><br/>1469> Special tags:1470> - `@email` - enable email tracking using a default handler1471> - `@email:{type}` - enable email tracking using a `{type}` handler1472> - `@debug` (enable detailed logs)147314741475<details>1476 <summary><code>@When I clear the test email system queue</code></summary>14771478<br/>1479Clear test email system queue1480<br/><br/>14811482```gherkin1483When I clear the test email system queue14841485```14861487</details>14881489<details>1490 <summary><code>@When I follow link number :link_number in the email with the subject :subject</code></summary>14911492<br/>1493Follow a specific link number in an email with the given subject1494<br/><br/>14951496```gherkin1497When I follow link number "1" in the email with the subject "Account Verification"14981499```15001501</details>15021503<details>1504 <summary><code>@When I follow link number :link_number in the email with the subject containing :subject</code></summary>15051506<br/>1507Follow a specific link number in an email whose subject contains the given substring1508<br/><br/>15091510```gherkin1511When I follow link number "1" in the email with the subject containing "Verification"15121513```15141515</details>15161517<details>1518 <summary><code>@When I enable the test email system</code></summary>15191520<br/>1521Enable the test email system1522<br/><br/>15231524```gherkin1525When I enable the test email system15261527```15281529</details>15301531<details>1532 <summary><code>@When I disable the test email system</code></summary>15331534<br/>1535Disable test email system1536<br/><br/>15371538```gherkin1539When I disable the test email system15401541```15421543</details>15441545<details>1546 <summary><code>@Then an email should be sent to the :address</code></summary>15471548<br/>1549Assert that an email should be sent to an address1550<br/><br/>15511552```gherkin1553Then an email should be sent to the "user@example.com"15541555```15561557</details>15581559<details>1560 <summary><code>@Then no emails should have been sent</code></summary>15611562<br/>1563Assert that no email messages should be sent1564<br/><br/>15651566```gherkin1567Then no emails should have been sent15681569```15701571</details>15721573<details>1574 <summary><code>@Then no emails should have been sent to the :address</code></summary>15751576<br/>1577Assert that no email messages should be sent to a specified address1578<br/><br/>15791580```gherkin1581Then no emails should have been sent to the "user@example.com"15821583```15841585</details>15861587<details>1588 <summary><code>@Then the email header :header should contain:</code></summary>15891590<br/>1591Assert that the email message header should contain specified content1592<br/><br/>15931594```gherkin1595Then the email header "Subject" should contain:1596"""1597Account details1598"""15991600```16011602</details>16031604<details>1605 <summary><code>@Then the email header :header should exactly be:</code></summary>16061607<br/>1608Assert that the email message header should be the exact specified content1609<br/><br/>16101611```gherkin1612Then the email header "Subject" should exactly be:1613"""1614Your Account Details1615"""16161617```16181619</details>16201621<details>1622 <summary><code>@Then an email should be sent to the address :address with the content:</code></summary>16231624<br/>1625Assert that an email should be sent to an address with the exact content in the body1626<br/><br/>16271628```gherkin1629Then an email should be sent to the address "user@example.com" with the content:1630"""1631Welcome to our site!1632Click the link below to verify your account.1633"""16341635```16361637</details>16381639<details>1640 <summary><code>@Then an email should be sent to the address :address with the content containing:</code></summary>16411642<br/>1643Assert that an email should be sent to an address with the body containing specific content1644<br/><br/>16451646```gherkin1647Then an email should be sent to the address "user@example.com" with the content containing:1648"""1649verification link1650"""16511652```16531654</details>16551656<details>1657 <summary><code>@Then an email should be sent to the address :address with the content not containing:</code></summary>16581659<br/>1660Assert that an email should be sent to an address with the body not containing specific content1661<br/><br/>16621663```gherkin1664Then an email should be sent to the address "user@example.com" with the content not containing:1665"""1666password1667"""16681669```16701671</details>16721673<details>1674 <summary><code>@Then an email should not be sent to the address :address with the content:</code></summary>16751676<br/>1677Assert that an email should not be sent to an address with the exact content in the body1678<br/><br/>16791680```gherkin1681Then an email should not be sent to the address "wrong@example.com" with the content:1682"""1683Welcome to our site!1684"""16851686```16871688</details>16891690<details>1691 <summary><code>@Then an email should not be sent to the address :address with the content containing:</code></summary>16921693<br/>1694Assert that an email should not be sent to an address with the body containing specific content1695<br/><br/>16961697```gherkin1698Then an email should not be sent to the address "wrong@example.com" with the content containing:1699"""1700verification link1701"""17021703```17041705</details>17061707<details>1708 <summary><code>@Then the email field :field should contain:</code></summary>17091710<br/>1711Assert that the email field should contain a value1712<br/><br/>17131714```gherkin1715Then the email field "body" should contain:1716"""1717Please verify your account1718"""17191720```17211722</details>17231724<details>1725 <summary><code>@Then the email field :field should be:</code></summary>17261727<br/>1728Assert that the email field should exactly match a value1729<br/><br/>17301731```gherkin1732Then the email field "subject" should be:1733"""1734Account Verification1735"""17361737```17381739</details>17401741<details>1742 <summary><code>@Then the email field :field should not contain:</code></summary>17431744<br/>1745Assert that the email field should not contain a value1746<br/><br/>17471748```gherkin1749Then the email field "body" should not contain:1750"""1751password1752"""17531754```17551756</details>17571758<details>1759 <summary><code>@Then the email field :field should not be:</code></summary>17601761<br/>1762Assert that the email field should not exactly match a value1763<br/><br/>17641765```gherkin1766Then the email field "subject" should not be:1767"""1768Password Reset1769"""17701771```17721773</details>17741775<details>1776 <summary><code>@Then the file :file_name should be attached to the email with the subject :subject</code></summary>17771778<br/>1779Assert that a file is attached to an email message with specified subject1780<br/><br/>17811782```gherkin1783Then the file "document.pdf" should be attached to the email with the subject "Your document"17841785```17861787</details>17881789<details>1790 <summary><code>@Then the file :file_name should be attached to the email with the subject containing :subject</code></summary>17911792<br/>1793Assert that a file is attached to an email message with a subject containing the specified substring1794<br/><br/>17951796```gherkin1797Then the file "report.xlsx" should be attached to the email with the subject containing "Monthly Report"17981799```18001801</details>18021803## Drupal\FieldTrait18041805[Source](mdc:src/Drupal/FieldTrait.php), [Example](mdc:tests/behat/features/drupal_field.feature)18061807> Manipulate Drupal form fields and verify widget functionality.1808> - Set field values for various input types including selects and WYSIWYG.1809> - Assert field existence, state, and selected options.1810> - Support for specialized widgets like color pickers and rich text editors.181118121813<details>1814 <summary><code>@When I fill in the color field :field with the value :value</code></summary>18151816<br/>1817Fill value for color field1818<br/><br/>18191820```gherkin1821When I fill in the color field "#edit-text-color" with the value "#3366FF"18221823```18241825</details>18261827<details>1828 <summary><code>@When I fill in the WYSIWYG field :field with the :value</code></summary>18291830<br/>1831Set value for WYSIWYG field1832<br/><br/>18331834```gherkin1835When I fill in the WYSIWYG field "edit-body-0-value" with the "<p>This is a <strong>formatted</strong> paragraph.</p>"18361837```18381839</details>18401841<details>1842 <summary><code>@Then the field :name should exist</code></summary>18431844<br/>1845Assert that field exists on the page using id,name,label or value1846<br/><br/>18471848```gherkin1849Then the field "Body" should exist1850Then the field "field_body" should exist18511852```18531854</details>18551856<details>1857 <summary><code>@Then the field :name should not exist</code></summary>18581859<br/>1860Assert that field does not exist on the page using id,name,label or value1861<br/><br/>18621863```gherkin1864Then the field "Body" should not exist1865Then the field "field_body" should not exist18661867```18681869</details>18701871<details>1872 <summary><code>@Then the field :name should be :enabled_or_disabled</code></summary>18731874<br/>1875Assert whether the field has a state1876<br/><br/>18771878```gherkin1879Then the field "Body" should be "disabled"1880Then the field "field_body" should be "disabled"1881Then the field "Tags" should be "enabled"1882Then the field "field_tags" should be "not enabled"18831884```18851886</details>18871888<details>1889 <summary><code>@Then the color field :field should have the value :value</code></summary>18901891<br/>1892Assert that a color field has a value1893<br/><br/>18941895```gherkin1896Then the color field "#edit-background-color" should have the value "#FF5733"18971898```18991900</details>19011902<details>1903 <summary><code>@Then the option :option should exist within the select element :selector</code></summary>19041905<br/>1906Assert that a select has an option1907<br/><br/>19081909```gherkin1910Then the option "Administrator" should exist within the select element "edit-roles"19111912```19131914</details>19151916<details>1917 <summary><code>@Then the option :option should not exist within the select element :selector</code></summary>19181919<br/>1920Assert that a select does not have an option1921<br/><br/>19221923```gherkin1924Then the option "Guest" should not exist within the select element "edit-roles"19251926```19271928</details>19291930<details>1931 <summary><code>@Then the option :option should be selected within the select element :selector</code></summary>19321933<br/>1934Assert that a select option is selected1935<br/><br/>19361937```gherkin1938Then the option "Administrator" should be selected within the select element "edit-roles"19391940```19411942</details>19431944<details>1945 <summary><code>@Then the option :option should not be selected within the select element :selector</code></summary>19461947<br/>1948Assert that a select option is not selected1949<br/><br/>19501951```gherkin1952Then the option "Editor" should not be selected within the select element "edit-roles"19531954```19551956</details>19571958## Drupal\FileTrait19591960[Source](mdc:src/Drupal/FileTrait.php), [Example](mdc:tests/behat/features/drupal_file.feature)19611962> Manage Drupal file entities with upload and storage operations.1963> - Create managed and unmanaged files with specific URIs and content.1964> - Verify file existence, content, and proper storage locations.1965> - Set up file system directories and clean up created files.1966>1967> Skip processing with tags: `@behat-steps-skip:fileBeforeScenario` or1968> `@behat-steps-skip:fileAfterScenario`196919701971<details>1972 <summary><code>@Given the following managed files:</code></summary>19731974<br/>1975Create managed files with properties provided in the table1976<br/><br/>19771978```gherkin1979Given the following managed files:1980| path | uri | status |1981| document.pdf | public://document.pdf | 1 |1982| image.jpg | public://images/pic.jpg| 1 |19831984```19851986</details>19871988<details>1989 <summary><code>@Given the following managed files do not exist:</code></summary>19901991<br/>1992Delete managed files defined by provided properties/fields1993<br/><br/>19941995```gherkin1996Given no managed files:1997| filename |1998| myfile.jpg |1999| otherfile.jpg |2000 Given no managed files:2001 | uri |2002 | public://myfile.jpg |2003 | public://otherfile.jpg |20042005```20062007</details>20082009<details>2010 <summary><code>@Given the unmanaged file at the URI :uri exists</code></summary>20112012<br/>2013Create an unmanaged file2014<br/><br/>20152016```gherkin2017Given the unmanaged file at the URI "public://sample.txt" exists20182019```20202021</details>20222023<details>2024 <summary><code>@Given the unmanaged file at the URI :uri exists with :content</code></summary>20252026<br/>2027Create an unmanaged file with specified content2028<br/><br/>20292030```gherkin2031Given the unmanaged file at the URI "public://data.txt" exists with "Sample content"20322033```20342035</details>20362037<details>2038 <summary><code>@Then an unmanaged file at the URI :uri should exist</code></summary>20392040<br/>2041Assert that an unmanaged file with specified URI exists2042<br/><br/>20432044```gherkin2045Then an unmanaged file at the URI "public://sample.txt" should exist20462047```20482049</details>20502051<details>2052 <summary><code>@Then an unmanaged file at the URI :uri should not exist</code></summary>20532054<br/>2055Assert that an unmanaged file with specified URI does not exist2056<br/><br/>20572058```gherkin2059Then an unmanaged file at the URI "public://temp.txt" should not exist20602061```20622063</details>20642065<details>2066 <summary><code>@Then an unmanaged file at the URI :uri should contain :content</code></summary>20672068<br/>2069Assert that an unmanaged file exists and has specified content2070<br/><br/>20712072```gherkin2073Then an unmanaged file at the URI "public://config.txt" should contain "debug=true"20742075```20762077</details>20782079<details>2080 <summary><code>@Then an unmanaged file at the URI :uri should not contain :content</code></summary>20812082<br/>2083Assert that an unmanaged file exists and does not have specified content2084<br/><br/>20852086```gherkin2087Then an unmanaged file at the URI "public://config.txt" should not contain "debug=false"20882089```20902091</details>20922093## Drupal\MediaTrait20942095[Source](mdc:src/Drupal/MediaTrait.php), [Example](mdc:tests/behat/features/drupal_media.feature)20962097> Manage Drupal media entities with type-specific field handling.2098> - Create structured media items with proper file reference handling.2099> - Assert media browser functionality and edit media entity fields.2100> - Support for multiple media types with field value expansion handling.2101> - Automatically clean up created entities after scenario completion.2102>2103> Skip processing with tag: `@behat-steps-skip:mediaAfterScenario`210421052106<details>2107 <summary><code>@Given :media_type media type does not exist</code></summary>21082109<br/>2110Remove media type2111<br/><br/>21122113```gherkin2114Given "video" media type does not exist21152116```21172118</details>21192120<details>2121 <summary><code>@Given the following media :media_type exist:</code></summary>21222123<br/>2124Create media of a given type2125<br/><br/>21262127```gherkin2128Given "video" media:2129| name | field1 | field2 | field3 |2130| My media | file.jpg | value | value |2131| ... | ... | ... | ... |21322133```21342135</details>21362137<details>2138 <summary><code>@Given the following media :media_type do not exist:</code></summary>21392140<br/>2141Remove media defined by provided properties2142<br/><br/>21432144```gherkin2145Given the following media "image" do not exist:2146| name |2147| Media item |2148| Another media item |21492150```21512152</details>21532154<details>2155 <summary><code>@When I edit the media :media_type with the name :name</code></summary>21562157<br/>2158Navigate to edit media with specified type and name2159<br/><br/>21602161```gherkin2162When I edit "document" media "Test document"21632164```21652166</details>21672168## Drupal\MenuTrait21692170[Source](mdc:src/Drupal/MenuTrait.php), [Example](mdc:tests/behat/features/drupal_menu.feature)21712172> Manage Drupal menu systems and menu link rendering.2173> - Assert menu items by label, path, and containment hierarchy.2174> - Assert menu link visibility and active states in different regions.2175> - Create and manage menu hierarchies with parent-child relationships.2176> - Automatically clean up created menu links after scenario completion.2177>2178> Skip processing with tag: `@behat-steps-skip:menuAfterScenario`217921802181<details>2182 <summary><code>@Given the menu :menu_name does not exist</code></summary>21832184<br/>2185Remove a single menu by its label if it exists2186<br/><br/>21872188```gherkin2189Given the menu "Test Menu" does not exist21902191```21922193</details>21942195<details>2196 <summary><code>@Given the following menus:</code></summary>21972198<br/>2199Create a menu if one does not exist2200<br/><br/>22012202```gherkin2203Given the following menus:2204| label | description |2205| Footer Menu | Links displayed in the footer |2206| Secondary Menu | Secondary navigation menu |22072208```22092210</details>22112212<details>2213 <summary><code>@Given the following menu links do not exist in the menu :menu_name:</code></summary>22142215<br/>2216Remove menu links by title2217<br/><br/>22182219```gherkin2220Given the following menu links do not exist in the menu "Main navigation":2221| About Us |2222| Contact |22232224```22252226</details>22272228<details>2229 <summary><code>@Given the following menu links exist in the menu :menu_name :</code></summary>22302231<br/>2232Create menu links2233<br/><br/>22342235```gherkin2236Given the following menu links exist in the menu "Main navigation":2237| title | enabled | uri | parent |2238| Products | 1 | /products | |2239| Latest Products | 1 | /products/latest | Products |22402241```22422243</details>22442245## Drupal\MetatagTrait22462247[Source](mdc:src/Drupal/MetatagTrait.php), [Example](mdc:tests/behat/features/drupal_metatag.feature)22482249> Assert `<meta>` tags in page markup.2250> - Assert presence and content of meta tags with proper attribute handling.225122522253## Drupal\OverrideTrait22542255[Source](mdc:src/Drupal/OverrideTrait.php), [Example](mdc:tests/behat/features/drupal_override.feature)22562257> Override Drupal Extension behaviors.2258> - Automated entity deletion before creation to avoid duplicates.2259> - Improved user authentication handling for anonymous users.2260>2261> Use with caution: depending on your version of Drupal Extension, PHP and2262> Composer, the step definition string (/^Given etc.../) may need to be defined2263> for these overrides. If you encounter errors about missing or duplicated2264> step definitions, do not include this trait and rather copy the contents of2265> this file into your feature context file and copy the step definition strings2266> from the Drupal Extension.226722682269## Drupal\ParagraphsTrait22702271[Source](mdc:src/Drupal/ParagraphsTrait.php), [Example](mdc:tests/behat/features/drupal_paragraphs.feature)22722273> Manage Drupal paragraphs entities with structured field data.2274> - Create paragraph items with type-specific field values.2275> - Test nested paragraph structures and reference field handling.2276> - Attach paragraphs to various entity types with parent-child relationships.2277> - Automatically clean up created paragraph items after scenario completion.2278>2279> Skip processing with tag: `@behat-steps-skip:paragraphsAfterScenario`228022812282<details>2283 <summary><code>@Given the following fields for the paragraph :paragraph_type exist in the field :parent_field within the :parent_bundle :parent_entity_type identified by the field :parent_lookup_field and the value :parent_lookup_value:</code></summary>22842285<br/>2286Create a paragraph of the given type with fields within an existing entity2287<br/><br/>22882289```gherkin2290Given the following fields for the paragraph "text" exist in the field "field_component" within the "landing_page" "node" identified by the field "title" and the value "My landing page":2291| field_paragraph_title | My paragraph title |2292| field_paragraph_longtext:value | My paragraph message |2293| field_paragraph_longtext:format | full_html |2294| ... | ... |22952296```22972298</details>22992300## Drupal\SearchApiTrait23012302[Source](mdc:src/Drupal/SearchApiTrait.php), [Example](mdc:tests/behat/features/drupal_search_api.feature)23032304> Assert Drupal Search API with index and query operations.2305> - Add content to an index2306> - Run indexing for a specific number of items.230723082309<details>2310 <summary><code>@When I add the :content_type content with the title :title to the search index</code></summary>23112312<br/>2313Index a node of a specific content type with a specific title2314<br/><br/>23152316```gherkin2317When I add the "article" content with the title "Test Article" to the search index23182319```23202321</details>23222323<details>2324 <summary><code>@When I run search indexing for :count item(s)</code></summary>23252326<br/>2327Run indexing for a specific number of items2328<br/><br/>23292330```gherkin2331When I run search indexing for 5 items2332When I run search indexing for 1 item23332334```23352336</details>23372338## Drupal\TaxonomyTrait23392340[Source](mdc:src/Drupal/TaxonomyTrait.php), [Example](mdc:tests/behat/features/drupal_taxonomy.feature)23412342> Manage Drupal taxonomy terms with vocabulary organization.2343> - Create term vocabulary structures using field values.2344> - Navigate to term pages2345> - Verify vocabulary configurations.234623472348<details>2349 <summary><code>@Given the following :vocabulary_machine_name vocabulary terms do not exist:</code></summary>23502351<br/>2352Remove terms from a specified vocabulary2353<br/><br/>23542355```gherkin2356Given the following "fruits" vocabulary terms do not exist:2357 | Apple |2358 | Pear |23592360```23612362</details>23632364<details>2365 <summary><code>@When I visit the :vocabulary_machine_name vocabulary :term_name term page</code></summary>23662367<br/>2368Visit specified vocabulary term page2369<br/><br/>23702371```gherkin2372When I visit the "fruits" vocabulary "Apple" term page23732374```23752376</details>23772378<details>2379 <summary><code>@When I edit the :vocabulary_machine_name vocabulary :term_name term page</code></summary>23802381<br/>2382Edit specified vocabulary term page2383<br/><br/>23842385```gherkin2386When I edit the "fruits" vocabulary "Apple" term page23872388```23892390</details>23912392<details>2393 <summary><code>@Then the vocabulary :machine_name with the name :name should exist</code></summary>23942395<br/>2396Assert that a vocabulary with a specific name exists2397<br/><br/>23982399```gherkin2400Then the vocabulary "topics" with the name "Topics" should exist24012402```24032404</details>24052406<details>2407 <summary><code>@Then the vocabulary :machine_name should not exist</code></summary>24082409<br/>2410Assert that a vocabulary with a specific name does not exist2411<br/><br/>24122413```gherkin2414Then the vocabulary "topics" should not exist24152416```24172418</details>24192420<details>2421 <summary><code>@Then the taxonomy term :term_name from the vocabulary :vocabulary_machine_name should exist</code></summary>24222423<br/>2424Assert that a taxonomy term exist by name2425<br/><br/>24262427```gherkin2428Then the taxonomy term "Apple" from the vocabulary "Fruits" should exist24292430```24312432</details>24332434<details>2435 <summary><code>@Then the taxonomy term :term_name from the vocabulary :vocabulary_machine_name should not exist</code></summary>24362437<br/>2438Assert that a taxonomy term does not exist by name2439<br/><br/>24402441```gherkin2442Then the taxonomy term "Apple" from the vocabulary "Fruits" should not exist24432444```24452446</details>24472448## Drupal\TestmodeTrait24492450[Source](mdc:src/Drupal/TestmodeTrait.php), [Example](mdc:tests/behat/features/drupal_testmode.feature)24512452> Configure Drupal Testmode module for controlled testing scenarios.2453> <br/><br/>2454> Skip processing with tags: `@behat-steps-skip:testmodeBeforeScenario` and2455> `@behat-steps-skip:testmodeAfterScenario`.2456> <br/><br/>2457> Special tags:2458> - `@testmode` - enable for scenario245924602461## Drupal\UserTrait24622463[Source](mdc:src/Drupal/UserTrait.php), [Example](mdc:tests/behat/features/drupal_user.feature)24642465> Manage Drupal users with role and permission assignments.2466> - Create user accounts2467> - Create user roles2468> - Visit user profile pages for editing and deletion.2469> - Assert user roles and permissions.2470> - Assert user account status (active/inactive).247124722473<details>2474 <summary><code>@Given the following users do not exist:</code></summary>24752476<br/>2477Remove users specified in a table2478<br/><br/>24792480```gherkin2481Given the following users do not exist:2482 | name |2483 | John |2484 | Jane |2485 Given the following users do not exist:2486 | mail |2487 | john@example.com |2488 | jane@example.com |24892490```24912492</details>24932494<details>2495 <summary><code>@Given the password for the user :name is :password</code></summary>24962497<br/>2498Set a password for a user2499<br/><br/>25002501```gherkin2502Given the password for the user "John" is "password"25032504```25052506</details>25072508<details>2509 <summary><code>@Given the last access time for the user :name is :datetime</code></summary>25102511<br/>2512Set last access time for a user2513<br/><br/>25142515```gherkin2516Given the last access time for the user "John" is "Friday, 22 November 2024 13:46:14"2517Given the last access time for the user "John" is "1732319174"25182519```25202521</details>25222523<details>2524 <summary><code>@Given the last login time for the user :name is :datetime</code></summary>25252526<br/>2527Set last login time for a user2528<br/><br/>25292530```gherkin2531Given the last login time for the user "John" is "Friday, 22 November 2024 13:46:14"2532Given the last login time for the user "John" is "1732319174"25332534```25352536</details>25372538<details>2539 <summary><code>@Given the role :role_name with the permissions :permissions</code></summary>25402541<br/>2542Create a single role with specified permissions2543<br/><br/>25442545```gherkin2546Given the role "Content Manager" with the permissions "access content, create article content, edit any article content"25472548```25492550</details>25512552<details>2553 <summary><code>@Given the following roles:</code></summary>25542555<br/>2556Create multiple roles from the specified table2557<br/><br/>25582559```gherkin2560Given the following roles:2561| name | permissions |2562| Content Editor | access content, create article content |2563| Content Approver | access content, edit any article content |25642565```25662567</details>25682569<details>2570 <summary><code>@When I visit :name user profile page</code></summary>25712572<br/>2573Visit the profile page of the specified user2574<br/><br/>25752576```gherkin2577When I visit "John" user profile page25782579```25802581</details>25822583<details>2584 <summary><code>@When I visit my own user profile page</code></summary>25852586<br/>2587Visit the profile page of the current user2588<br/><br/>25892590```gherkin2591When I visit my own user profile page25922593```25942595</details>25962597<details>2598 <summary><code>@When I visit :name user profile edit page</code></summary>25992600<br/>2601Visit the profile edit page of the specified user2602<br/><br/>26032604```gherkin2605When I visit "John" user profile edit page26062607```26082609</details>26102611<details>2612 <summary><code>@When I visit my own user profile edit page</code></summary>26132614<br/>2615Visit the profile edit page of the current user2616<br/><br/>26172618```gherkin2619When I visit my own user profile edit page26202621```26222623</details>26242625<details>2626 <summary><code>@When I visit :name user profile delete page</code></summary>26272628<br/>2629Visit the profile delete page of the specified user2630<br/><br/>26312632```gherkin2633When I visit "John" user profile delete page26342635```26362637</details>26382639<details>2640 <summary><code>@When I visit my own user profile delete page</code></summary>26412642<br/>2643Visit the profile delete page of the current user2644<br/><br/>26452646```gherkin2647When I visit my own user profile delete page26482649```26502651</details>26522653<details>2654 <summary><code>@Then the user :name should have the role(s) :roles assigned</code></summary>26552656<br/>2657Assert that a user has roles assigned2658<br/><br/>26592660```gherkin2661Then the user "John" should have the roles "administrator, editor" assigned26622663```26642665</details>26662667<details>2668 <summary><code>@Then the user :name should not have the role(s) :roles assigned</code></summary>26692670<br/>2671Assert that a user does not have roles assigned2672<br/><br/>26732674```gherkin2675Then the user "John" should not have the roles "administrator, editor" assigned26762677```26782679</details>26802681<details>2682 <summary><code>@Then the user :name should be blocked</code></summary>26832684<br/>2685Assert that a user is blocked2686<br/><br/>26872688```gherkin2689Then the user "John" should be blocked26902691```26922693</details>26942695<details>2696 <summary><code>@Then the user :name should not be blocked</code></summary>26972698<br/>2699Assert that a user is not blocked2700<br/><br/>27012702```gherkin2703Then the user "John" should not be blocked27042705```27062707</details>27082709## Drupal\WatchdogTrait27102711[Source](mdc:src/Drupal/WatchdogTrait.php), [Example](mdc:tests/behat/features/drupal_watchdog.feature)27122713> Assert Drupal does not trigger PHP errors during scenarios using Watchdog.2714> - Check for Watchdog messages after scenario completion.2715> - Optionally check only for specific message types.2716> - Optionally skip error checking for specific scenarios.2717>2718> Skip processing with tags: `@behat-steps-skip:watchdogSetScenario` or2719> `@behat-steps-skip:watchdogAfterScenario`2720> <br/><br/>2721> Special tags:2722> - `@watchdog:{type}` - limit watchdog messages to specific types.2723> - `@error` - add to scenarios that are expected to trigger an error.27242725## Steps Format Guidelines2726- **General Guidelines**:2727 - Use tuple format instead of regular expressions2728 - Use descriptive placeholder names2729 - Use `the following` for tabled content2730 - Use `with` for properties: `Then the link with the title :title should exist`2731 - Avoid optional words like `(the|a)`2732 - Omit unnecessary suffixes like `on the page`2733 - Method names should begin with the trait name: `userAssertHasRoles()`27342735- **Given Steps**:2736 - Define test prerequisites2737 - Use words like `exists` or `have`2738 - Avoid using `should` or `should not`2739 - Avoid using `Given I`27402741- **When Steps**:2742 - Describe an action with an action verb2743 - Use the format `When I <verb>`27442745- **Then Steps**:2746 - Specify assertions and expectations2747 - Use `should` and `should not` for assertions2748 - Start with the entity being asserted2749 - Avoid using `Then I`2750 - Methods should include the `Assert` prefix27512752## Common Behat Step Patterns2753- Block assertions:2754 - `I should see the block with label "..."`2755 - `I should see the block with label "..." in the region "..."`27562757- Content block operations:2758 - `the content block type "..." should exist`2759 - `the following "..." content blocks exist:`2760 - `I edit the "..." content block with the description "..."`27612762- Email testing:2763 - `I enable the test email system`2764 - `I clear the test email system queue`2765 - `an email should be sent to the "..."`27662767## Skipping Before Scenario Hooks2768Some traits provide `beforeScenario` hook implementations that can be disabled by adding `behat-steps-skip:METHOD_NAME` tag to your test.27692770Example: To skip `beforeScenario` hook from `ElementTrait`, add `@behat-steps-skip:ElementTrait` tag to the feature.27712772## Code Style Conventions2773- Code is written using Drupal coding standards2774- Local variables and method arguments: `snake_case`2775- Method names and class properties: `camelCase`2776
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| ivangrynenko/cursorrules.cursor/rules/confluence-editing-standards.mdc · 87 | Cursor rules | stylearchsecuritydeployment | 60/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/cursor-rules.mdc · 87 | Cursor rules | teststylearchgit+2 | 77/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/debugging-standards.mdc · 87 | Cursor rules | no sections | 30/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-authentication-failures.mdc · 87 | Cursor rules | security | 48/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-broken-access-control.mdc · 87 | Cursor rules | stylesecurity | 52/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-cryptographic-failures.mdc · 87 | Cursor rules | security | 48/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-database-standards.mdc · 87 | Cursor rules | database | 30/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-file-permissions.mdc · 87 | Cursor rules | stylearchsecurity | 62/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-injection.mdc · 87 | Cursor rules | securitydo-not | 55/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-insecure-design.mdc · 87 | Cursor rules | security | 48/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-integrity-failures.mdc · 87 | Cursor rules | style | 60/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-logging-failures.mdc · 87 | Cursor rules | security | 48/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-security-misconfiguration.mdc · 87 | Cursor rules | security | 48/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-ssrf.mdc · 87 | Cursor rules | style | 52/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/drupal-vulnerable-components.mdc · 87 | Cursor rules | stylesecurity | 67/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/git-commit-standards.mdc · 87 | Cursor rules | git | 44/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/github-actions-standards.mdc · 87 | Cursor rules | no sections | 44/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/improve-cursorrules-efficiency.mdc · 87 | Cursor rules | no sections | 34/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/javascript-broken-access-control.mdc · 87 | Cursor rules | securitydo-not | 39/100 | 14 days ago | |
| ivangrynenko/cursorrules.cursor/rules/javascript-cryptographic-failures.mdc · 87 | Cursor rules | security | 40/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 46 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 14 days ago | |
| hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126 | Cursor rules | setupbuildtestlint-format+6 | 100/100 | 14 days ago | |
| bybren-llc/safe-agentic-workflow.cursor/rules/10-backend-python.mdc · 399 | Cursor rules | testlint-formatstylegit+4 | 97/100 | today | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/20-hermes-api-tests.mdc · 46 | Cursor rules | teststyletesting-strategysecurity+3 | 97/100 | 14 days ago | |
| skillrecordings/egghead-next.cursor/rules/project-update-user-rules.mdc · 1.4k | Cursor rules | buildtestlint-formatstyle+7 | 96/100 | 14 days ago | |
| skillrecordings/egghead-next.cursor/rules/project-update-rules.mdc · 1.4k | Cursor rules | buildtestlint-formatstyle+7 | 96/100 | 14 days ago | |
| skillrecordings/egghead-next.cursor/rules/gh-task-plan.mdc · 1.4k | Cursor rules | teststylearchtypes+2 | 96/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/ivangrynenko-cursorrules-cursor-rules-behat-steps)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.