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" 
});

Reply via email to