This is an automated email from the ASF dual-hosted git repository.
bbovenzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new d03aaf822cb Add data-testid to task filter dropdowns for stable E2E
selectors (#64531)
d03aaf822cb is described below
commit d03aaf822cb2240b56ddae9152dcb7d10b4419ed
Author: Yeonguk Choo <[email protected]>
AuthorDate: Wed Apr 1 03:57:20 2026 +0900
Add data-testid to task filter dropdowns for stable E2E selectors (#64531)
---
.../ui/src/pages/Dag/Tasks/TaskFilters/AttrSelectFilterMulti.tsx | 4 +++-
.../src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/TaskFilters.tsx | 3 +++
airflow-core/src/airflow/ui/tests/e2e/pages/DagsPage.ts | 6 +++---
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git
a/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/AttrSelectFilterMulti.tsx
b/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/AttrSelectFilterMulti.tsx
index 29e4e235fd9..08d164cf319 100644
---
a/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/AttrSelectFilterMulti.tsx
+++
b/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/AttrSelectFilterMulti.tsx
@@ -22,6 +22,7 @@ import type { SelectValueChangeDetails } from
"@chakra-ui/react";
import { Select } from "src/components/ui";
type Props = {
+ readonly dataTestId?: string;
readonly displayPrefix: string | undefined;
readonly handleSelect: (values: Array<CollectionItem>) => void;
readonly placeholderText: string;
@@ -30,6 +31,7 @@ type Props = {
};
export const AttrSelectFilterMulti = ({
+ dataTestId,
displayPrefix,
handleSelect,
placeholderText,
@@ -58,7 +60,7 @@ export const AttrSelectFilterMulti = ({
onValueChange={handleValueChange}
value={selectedValues}
>
- <Select.Trigger colorPalette="brand" minW="max-content">
+ <Select.Trigger colorPalette="brand" dataTestId={dataTestId}
minW="max-content">
<Select.ValueText placeholder={placeholderText} width="auto">
{() => displayValue}
</Select.ValueText>
diff --git
a/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/TaskFilters.tsx
b/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/TaskFilters.tsx
index cef9533f7f6..298adea09b0 100644
---
a/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/TaskFilters.tsx
+++
b/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/TaskFilters.tsx
@@ -105,6 +105,7 @@ export const TaskFilters = ({ tasksData }: { readonly
tasksData: TaskCollectionR
</HStack>
<HStack justifyContent="space-between">
<AttrSelectFilterMulti
+ dataTestId="operator-filter"
displayPrefix={undefined}
handleSelect={handleSelectedOperators}
placeholderText={translate("selectOperator")}
@@ -112,6 +113,7 @@ export const TaskFilters = ({ tasksData }: { readonly
tasksData: TaskCollectionR
values={allOperatorNames}
/>
<AttrSelectFilterMulti
+ dataTestId="trigger-rule-filter"
displayPrefix={undefined}
handleSelect={handleSelectedTriggerRules}
placeholderText={translate("selectTriggerRules")}
@@ -119,6 +121,7 @@ export const TaskFilters = ({ tasksData }: { readonly
tasksData: TaskCollectionR
values={allTriggerRules}
/>
<AttrSelectFilterMulti
+ dataTestId="retries-filter"
displayPrefix={translate("retries")}
handleSelect={handleSelectedRetries}
placeholderText={translate("selectRetryValues")}
diff --git a/airflow-core/src/airflow/ui/tests/e2e/pages/DagsPage.ts
b/airflow-core/src/airflow/ui/tests/e2e/pages/DagsPage.ts
index 4b9a5a65d28..2b6b0ef043f 100644
--- a/airflow-core/src/airflow/ui/tests/e2e/pages/DagsPage.ts
+++ b/airflow-core/src/airflow/ui/tests/e2e/pages/DagsPage.ts
@@ -58,9 +58,9 @@ export class DagsPage extends BasePage {
this.stateElement = page.getByTestId("dag-run-state");
this.searchBox = page.getByRole("textbox", { name: /search/i });
this.searchInput = page.getByPlaceholder("Search DAGs");
- this.operatorFilter = page.getByRole("combobox").filter({ hasText:
/operator/i });
- this.triggerRuleFilter = page.getByRole("combobox").filter({ hasText:
/trigger/i });
- this.retriesFilter = page.getByRole("combobox").filter({ hasText: /retr/i
});
+ this.operatorFilter = page.getByTestId("operator-filter");
+ this.triggerRuleFilter = page.getByTestId("trigger-rule-filter");
+ this.retriesFilter = page.getByTestId("retries-filter");
// View toggle buttons
this.cardViewButton = page.getByRole("button", { name: "Show card view" });
this.tableViewButton = page.getByRole("button", { name: "Show table view"
});