You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by jl...@apache.org on 2025/11/15 18:22:29 UTC
(superset) 18/18: fix(playwright): use exact cell match in Table.getRow() to prevent substring collisions
This is an automated email from the ASF dual-hosted git repository.
jli pushed a commit to branch feat/dataset-playwright-tests
in repository https://gitbox.apache.org/repos/asf/superset.git
commit a6025aba27b8319371d377046c7de60a4d0e78b7
Author: Joe Li <jo...@preset.io>
AuthorDate: Thu Nov 13 22:40:04 2025 -0800
fix(playwright): use exact cell match in Table.getRow() to prevent substring collisions
**Problem**: Duplicate dataset test failing with strict mode violation:
```
Error: locator().filter({ hasText: 'members_channels_2' }) resolved to 2 elements:
1) duplicate_members_channels_2_1763101756082
2) members_channels_2
```
**Root Cause**: The `filter({ hasText: rowText })` uses substring matching,
so searching for 'members_channels_2' matches both the original dataset
AND any duplicates that contain that substring in their name.
**Solution**: Use exact cell match instead of substring text match
Changed `Table.getRow()` from:
```typescript
.filter({ hasText: rowText })
```
To:
```typescript
.filter({ has: this.page.getByRole('cell', { name: rowText, exact: true }) })
```
**Why this works**:
- Matches the cell with EXACT text (not substring)
- Won't match 'duplicate_members_channels_2_XXX' when looking for 'members_channels_2'
- More precise and resilient to leftover test data
- Uses semantic selector (role='cell') + exact match
**Impact**: All tests using `getDatasetRow()` will now use exact matching:
- Navigate test (finds specific dataset in list)
- Delete test (finds correct dataset to delete)
- Duplicate test (distinguishes original from duplicate)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <no...@anthropic.com>
---
superset-frontend/playwright/components/core/Table.ts | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/superset-frontend/playwright/components/core/Table.ts b/superset-frontend/playwright/components/core/Table.ts
index 84dd138b90..854254ae3b 100644
--- a/superset-frontend/playwright/components/core/Table.ts
+++ b/superset-frontend/playwright/components/core/Table.ts
@@ -43,13 +43,16 @@ export class Table {
}
/**
- * Gets a table row by text content
- * @param rowText - Text to find in the row
+ * Gets a table row by exact text match in the first cell (dataset name column).
+ * Uses exact match to avoid substring collisions (e.g., 'members_channels_2' vs 'duplicate_members_channels_2_123').
+ * @param rowText - Exact text to find in the row's first cell
*/
getRow(rowText: string): Locator {
return this.element
.locator(Table.SELECTORS.TABLE_ROW)
- .filter({ hasText: rowText });
+ .filter({
+ has: this.page.getByRole('cell', { name: rowText, exact: true }),
+ });
}
/**