feat(web-test): multi-select rows with modifier + _selected in readTable

Add modifier option ('ctrl'|'shift') to clickElement for Ctrl+click
(add to selection) and Shift+click (select range) in grid rows.
Add _selected: true flag to readTable rows so the model can verify
which rows are currently selected before performing actions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-03-27 15:10:51 +03:00
co-authored by Claude Opus 4.6
parent 506f0b84df
commit 6c01f3a261
4 changed files with 45 additions and 19 deletions
+11 -1
View File
@@ -171,6 +171,7 @@ Special row fields:
- `_kind: 'parent'` — parent row in hierarchy
- `_tree: 'expanded'|'collapsed'` — tree node state
- `_level: N` — nesting depth in tree view
- `_selected: true` — row is selected (highlighted). Use with `clickElement({ modifier: 'ctrl'|'shift' })` to verify multi-selection
- `hierarchical: true` — list has groups (on result object)
- `viewMode: 'tree'` — tree view active (on result object)
@@ -208,7 +209,7 @@ Sections + all open tabs.
### Actions
#### `clickElement(text, { dblclick?, table?, expand? })` → form state
#### `clickElement(text, { dblclick?, table?, expand?, modifier? })` → form state
Click button, hyperlink, tab, navigation panel link, or grid row (fuzzy match).
- `table` — scope button search to a specific grid's command panel (by name from `tables[]`):
@@ -230,6 +231,15 @@ Click button, hyperlink, tab, navigation panel link, or grid row (fuzzy match).
await clickElement('ИСУ ФХД'); // select row
await clickElement('ИСУ ФХД', { expand: true }); // expand/collapse
```
- **Multi-select rows** with `modifier: 'ctrl'` (add to selection) or `modifier: 'shift'` (select range):
```js
await clickElement('Номенклатура 1'); // select first row
await clickElement('Номенклатура 2', { modifier: 'ctrl' }); // add to selection
await clickElement('Номенклатура 5', { modifier: 'shift' }); // select range 2..5
// Verify selection:
const t = await readTable();
t.rows.filter(r => r._selected); // rows with _selected: true
```
#### `fillFields({ name: value })` → `{ filled, form }`
Fill form fields by label (fuzzy match). Auto-detects field type.