Action reference
The Action Library groups the most commonly authored steps. The exact input controls shown on the canvas depend on the selected action.
Red action cards and labels indicate a known implementation issue or an execution-mode limitation. Each warning identifies Browser or Background and distinguishes unsupported from known issue. Hover over the library card for details, or read the full warning on an authored or recorded step. Actions remain selectable; warnings do not change how a test executes. An unmarked action has no currently listed issue, but is not a guarantee that it works with every Dynamics control or configuration.
Start
| Action | Purpose |
|---|---|
| Open environment | Open the active environment URL. Worker-based runners apply the saved session; Browser uses the session in the current browser profile. |
Navigation
| Action | Purpose |
|---|---|
| Open app | Open a model-driven app by selecting its metadata GUID or matching its visible app label. |
| Open area | Select an area from the app's area switcher. |
| Open table | Open a Dataverse table directly using its metadata logical name, or enable Use visible navigation label to click its sitemap label. |
| Change view | Select a named saved view from the current table's view selector. |
| Open record | Open an existing record by matching visible text. |
The older Navigate to grid view action remains executable in saved tests but is hidden from the Action Library because metadata-based Open table already performs the same direct list navigation. Navigate to new form is also retained only for saved-test compatibility; use Open table followed by Click New in new tests so the real user path is exercised.
Form and fields
| Action | Purpose |
|---|---|
| Wait for form ready | Wait until the D365 form shell finishes loading. |
| Click tab | Open a form tab such as Summary, Details, or Related. |
| Set field value | Set one or more form fields. |
| Clear field value | Clear a field on the current form. |
| Read field value | Read a field value and record it in the report. |
Records and grids
| Action | Purpose |
|---|---|
| Wait for grid load | Wait until the model-driven grid finishes loading. |
| Filter grid keyword | Search using the current grid's search box and wait for a grid refresh. Never uses an unrelated global search box. |
| Filter grid column | Apply a plain-text filter to an exact visible column using its inline filter or filter menu's current/default operator. No fallback to keyword search. |
| Read grid cell | Report a loaded cell using a zero-based data-row index and exact column name. A blank cell is valid; missing rows or columns fail. This reads a value, not an equality assertion. |
| Read grid record count | Report the grid's exact total, excluding header rows. Requires a valid ARIA count, exact scoped total counter, or explicit empty state. Unknown or capped totals fail. |
| Verify grid empty | Assert zero records using a reliable reported count or explicit empty state. A missing grid never passes. |
| Select record row | Select a visible grid or subgrid row. |
| Select grid rows | Ensure the requested loaded rows are selected by zero-based data-row index. Already-selected rows remain selected; other selections are not cleared. |
| Click subgrid command | Run an exact command within an exactly named subgrid or its own overflow menu. A missing subgrid never triggers the form-wide command. |
These grid actions support Background and Browser execution. Browser grid support requires Testgrity Recorder 0.4.3 or later and reloading existing Dynamics tabs. Keyword searches and inline column filters use native Enter, so Browser execution needs the extension's debugger permission.
Use a page with one visible grid, or focus a control inside the intended grid when several are visible. Row indexes exclude headers and follow the grid's exposed indexes; a row that has not been loaded by a virtualized grid cannot be read or selected. Filter/sort deterministically before using indexes. Counts are the current grid's reported totals, not an independent Dataverse database count. Approximate totals such as 5,000+ are deliberately rejected.
Column filtering supports plain text/search inputs and a single-value filter menu with an Apply command. It does not invent a choice, lookup, date, or multi-condition filter when those controls are present. Unsupported layouts fail with an explanation. A successful filter step confirms a submitted operation and observable grid refresh; add a separate verification of the expected result. Read actions only put values in the report and do not compare them with expected values.
Timeline
| Action | Purpose |
|---|---|
| Create Timeline Activity | Open the Timeline create menu, select the exact Activity type, and wait for its draft form. Fill and save it in subsequent steps. |
| Create Timeline Note | Open a Note editor, enter the supplied Note text, submit it, and verify that the new note appears in the Timeline. |
| Create Timeline Post | Open a Post editor, enter the supplied Post text, submit it, and verify that the new post appears in the Timeline. |
All three actions support Browser and Background execution. For Create Timeline Activity, enter the label shown in the Timeline menu, for example Appointment, Email, Phone Call, Task, or a configured custom activity. Available options depend on the app and user permissions, as described in Microsoft's Timeline guide.
The actions only operate inside the Timeline and its associated or newly opened menu. They do not fall back to a form-wide New button or a similarly named item elsewhere. Multiple visible Timelines require focusing the intended one first. Missing, disabled or ambiguous controls, an unavailable type, or an editor that does not open causes an explicit failure. Browser execution does not automatically retry after opening starts, avoiding duplicate drafts or entries if navigation interrupts the response.
For Create Timeline Activity, success means a new matching editable activity form opened in the run tab—not that the activity was saved or an email was sent. Follow it with field-entry and the appropriate Save command. The dedicated Note and Post actions are complete operations: they only pass after submission produces a new or updated Timeline entry containing the supplied text. Custom layouts, separate-window editors, and full-document navigation still need live-environment validation.
Commands and keys
| Action | Purpose |
|---|---|
| Click New | Select the current page's New command. |
| Click Save | Use Save Only or Save and Close. |
| Click Delete | Click the exact Delete command and choose Confirm or Cancel in its confirmation dialog. Existing saved steps without a selection default to Confirm. |
| Assign Owner | Open the Assign dialog and set the record owner to Me, an exact User, or an exact Team. Ambiguous owner matches fail instead of selecting the first result. |
| Click button | Click a visible button by its exact accessible name. Prefer a dedicated action when one exists; duplicate matches fail as ambiguous. |
| Press key | Choose from documented model-driven app shortcuts. Each option explains where it applies; behaviour depends on the focused control. Function keys are limited to F2 and F4, with Ctrl + F6 and Ctrl + Shift + F6 for page-region navigation. Existing saved combinations are retained, but unrecognised combinations fail explicitly in Browser mode. Browser execution requires Testgrity Recorder 0.4.2 or later with its debugger permission. Add a verification step to check the intended effect. |
Business Process Flow
| Action | Purpose |
|---|---|
| Click BPF stage | Click an exact stage inside the Business Process Flow without advancing it. |
| Move BPF stage | Select Back, Next, or Finish and verify the stage transition or completed state. |
| Set BPF field | Set an exact editable field only in the Business Process Flow and verify the accepted value. |
Validation and assertions
| Action | Purpose |
|---|---|
| Verify message/text | Check that matching text is rendered and visible. Hidden text does not pass. |
| Verify record exists | Check an exact record name in a form title or grid result. Ordinary page text does not count. This confirms presence, not which test created the record. |
| Verify field value | Read an exact form field and compare its value exactly. |
| Verify field state | Check an exact field for visible, hidden, enabled, or disabled state. Missing fields fail, including hidden assertions. |
| Verify field required level | Check explicit field markers for none, recommended, or required. |
| Verify view columns | Check exact visible headers in one unambiguous loaded grid. |
| Verify section visibility | Check an exact form section for shown or hidden state. A missing section fails. |
| Verify tab visibility | Check an exact form tab for shown or hidden state. A missing tab fails. |
| Verify form type | Check explicit form markup for a normal or Quick Create form. A non-form page fails. |
| Verify active BPF stage | Check an exact stage using explicit active-state markers rather than broad text matching. |
| Verify BPF field value | Compare an exact Business Process Flow field with an expected value. |
| Verify BPF field required | Check explicit required-state markers on an exact Business Process Flow field. |
Dataverse data and cleanup
| Action | Purpose |
|---|---|
| Create Dataverse record | Create a record from metadata-selected field rows and save its returned GUID under a case-scoped reference. |
| Read Dataverse record | Retrieve explicitly selected columns with $select and record their raw and formatted values in the result. |
| Update Dataverse record | Update metadata-selected fields on a named reference, the current record, or a GUID. |
| Verify Dataverse record | Poll selected persisted values for up to 30 seconds and compare them with typed expectations. |
| Delete Dataverse record | Delete a named reference, the current record, or a GUID for deliberate cleanup. |
These actions run in both Background and Browser modes. In Browser mode, the Web API request runs inside the authenticated Dynamics tab without opening a form, and a non-blocking status popup identifies it as a Dataverse background process. Create requires a unique reference such as testAccount; later steps can use that reference, Current, or a GUID. References are isolated to the current test case. Fields use the same row editor as Set fields rather than raw JSON, and Create or Update hides attributes that Dataverse metadata marks as non-writable for that operation. The first version supports text, numbers, currency, dates, two options, and identifiers. Choices and lookups are excluded until option-value and relationship-target metadata can produce correct Web API payloads. Date-and-time values entered without an offset are treated as UTC.
Older current-record Dataverse actions remain compatible with saved tests but no longer appear in the Action Library.
Legacy Xrm actions
The deprecated global Xrm.Page API is not used. Old Read, Set, and Verify Xrm attribute steps remain compatible by operating on the corresponding form field through the user interface. Use Read field value, Set field value, and Verify field value for new tests.
Set Xrm submit mode, Set field visibility, Set field disabled, and Set field required level are retired and no longer appear in the Action Library. Microsoft only provides the supported formContext inside a Dynamics event execution context. Configure those behaviours in the app or its business rules, then assert the visible result in Testgrity.
Some recorded or existing cases may also contain supported actions that are not currently displayed in the Action Library, such as lookup selection, field-disabled verification, or legacy Xrm compatibility actions.