diff --git a/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts
index 7966bd73c0f92a7660a3e8ce3e01677d0a3aef00..5e001becb9fc1a2faed1e290fc1437c735c4a7a3 100644
--- a/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts
+++ b/alfa-client/apps/alfa-e2e/src/components/attachment/attachment.e2e.component.ts
@@ -24,15 +24,17 @@
 import { convertToDataTestId } from '../../support/tech.util';
 
 export class AttachmentContainerE2EComponent {
-  private readonly locatorFileUploadInput: string = '-file-upload-input';
+  private readonly multiUploadInput: string = 'multi-file-upload-button';
+  //
   private readonly attachmentList: AttachmentListE2EComponent = new AttachmentListE2EComponent();
 
   public getList(): AttachmentListE2EComponent {
     return this.attachmentList;
   }
 
+  //TODO Rename getMultiUploadButton
   public getUploadInput(): Cypress.Chainable<HTMLElement> {
-    return cy.getTestElementContaining(this.locatorFileUploadInput);
+    return cy.getTestElement(this.multiUploadInput);
   }
 }
 
diff --git a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts
index 057b39b29c7de8819c69e745af44cda24e300859..4b1e36d8940baf9c31b74c0db1496400ff3f3a16 100644
--- a/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts
+++ b/alfa-client/apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component.ts
@@ -49,7 +49,6 @@ export class VorgangBescheidWizardE2EComponent {
   private readonly uploadBescheidFileButton: string = '-single-file-upload-button';
   private readonly uploadAttachmentButton: string = 'Anhang_hochladen-file-upload-button';
   private readonly uploadAutomaticBescheid: string = 'create-bescheid-document-button';
-  private readonly mailTextArea: string = 'Text-textarea-editor';
   private readonly saveBescheid: string = 'save-button';
   private readonly sendBescheid: string = 'send-button';
   private readonly confirmAndSaveButton: string = 'confirm-and-save-button';
@@ -63,10 +62,6 @@ export class VorgangBescheidWizardE2EComponent {
 
   private readonly bescheidDocument: string = 'bescheid-document';
   private readonly attachmentDocument: string = 'bescheid-attachments';
-  private readonly bescheidUploadSpinner: string = '[data-test-id="bescheid-document"] ods-spinner-icon';
-  private readonly attachmentUploadSpinner: string = '[data-test-id="bescheid-attachments"] ods-spinner-icon';
-  private readonly bescheidSaveSpinner: string = '[data-test-id="confirm-and-save-button"] ods-spinner-icon';
-  private readonly sendenSpinner: string = '[data-test-id="send-button"] ods-spinner-icon';
   private readonly missingBescheidDocumentMessage: string = 'missing-bescheid-document-error-message';
 
   private locatorRoot: string = 'bescheid-wizard';
@@ -142,35 +137,35 @@ export class VorgangBescheidWizardE2EComponent {
     return cy.getTestElement(this.closeDialog);
   }
 
-  public getCloseVerwerfenButton(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getCloseVerwerfenButton(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.bescheidVerwerfenButton);
   }
 
-  public getCloseSpeichernButton(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getCloseSpeichernButton(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.bescheidSpeichernButton);
   }
 
-  public getUploadBescheidButton(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getUploadBescheidButton(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.uploadBescheidFileButton);
   }
 
-  public getUploadAttachmentButton(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getUploadAttachmentButton(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.uploadAttachmentButton);
   }
 
-  public getFileBescheidValidInWizard(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getFileBescheidValidInWizard(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileBescheidValid}]`);
   }
 
-  public getFileAnhangValidInWizard(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getFileAnhangValidInWizard(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileAnhangValid}]`);
   }
 
-  public getAutomaticBescheidFileInWizard() {
+  public getAutomaticBescheidFileInWizard(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.locatorRoot).find(`[data-test-id=${this.fileAutomaticBescheid}]`);
   }
 
-  public getDeleteButtonOfElement(element: string): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getDeleteButtonOfElement(element: string): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(element).find('[title="Anhang löschen"]');
   }
 
@@ -178,30 +173,14 @@ export class VorgangBescheidWizardE2EComponent {
     return filename.replace(/\./g, '') + '-file-item';
   }
 
-  public getBescheidDocument(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getBescheidDocument(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.bescheidDocument);
   }
 
-  public getAttachmentDocument(): Cypress.Chainable<JQuery<HTMLElement>> {
+  public getAttachmentDocument(): Cypress.Chainable<HTMLElement> {
     return cy.getTestElement(this.attachmentDocument);
   }
 
-  public getBescheidUploadSpinner(): Cypress.Chainable<JQuery<HTMLElement>> {
-    return cy.get(this.bescheidUploadSpinner);
-  }
-
-  public getAttachmentUploadSpinner(): Cypress.Chainable<JQuery<HTMLElement>> {
-    return cy.get(this.attachmentUploadSpinner);
-  }
-
-  public getBescheidSaveSpinner(): Cypress.Chainable<JQuery<HTMLElement>> {
-    return cy.get(this.bescheidSaveSpinner);
-  }
-
-  public getSendenSpinner(): Cypress.Chainable<JQuery<HTMLElement>> {
-    return cy.get(this.sendenSpinner);
-  }
-
   public getMailText(): Cypress.Chainable<JQuery<HTMLElement>> {
     return cy.getTestElement(this.nachrichtText);
   }
@@ -274,14 +253,6 @@ export class VorgangBescheidWizardE2EComponent {
     uploadFile(this.getUploadAttachmentButton(), fileName);
   }
 
-  public bescheidUploadSpinnerIsClosed(): void {
-    this.getBescheidUploadSpinner().should('not.exist');
-  }
-
-  public attachmentSpinnerIsClosed(): void {
-    this.getAttachmentUploadSpinner().should('not.exist');
-  }
-
   public enterDate(difference: number): void {
     this.getDateInput().should('exist');
     enterWith(this.getDateInput(), getAdjustedDateGerman(difference));
diff --git a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts
index 2f0235885f20f005854b6a72df819534cbd15c6c..71531d122d7f3fdc14570feb7d498dd7f449b467 100644
--- a/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts
+++ b/alfa-client/apps/alfa-e2e/src/e2e/main-tests/vorgang-bescheid/vorgang-bescheid-dokumente-hochladen.cy.ts
@@ -26,15 +26,25 @@ import localeDe from '@angular/common/locales/de';
 import localeDeExtra from '@angular/common/locales/extra/de';
 import { VorgangBescheidWizardE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-bescheid-wizard.e2e.component';
 import { VorgangFormularButtonsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-formular-buttons.e2e.components';
+import { E2EAttachmentHelper } from 'apps/alfa-e2e/src/helper/attachment/attachment.helper';
+import { E2EAttachmentVerifier } from 'apps/alfa-e2e/src/helper/attachment/attachment.verifier';
 import { VorgangE2E, VorgangStatusE2E } from 'apps/alfa-e2e/src/model/vorgang';
 import { uploadFile } from 'apps/alfa-e2e/src/support/file-upload';
 import 'cypress-real-events/support';
 import { VorgangListE2EComponent } from '../../../components/vorgang/vorgang-list.e2e.component';
 import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po';
 import { VorgangPage } from '../../../page-objects/vorgang.po';
-import { dropCollections, getTestElement } from '../../../support/cypress-helper';
+import { dropCollections } from '../../../support/cypress-helper';
 import { contains, exist, haveText, haveValue, notContains, notExist } from '../../../support/cypress.util';
-import { TEST_FILE_BESCHEID_ANHANG_BIG, TEST_FILE_BESCHEID_ANHANG_VALID, TEST_FILE_BESCHEID_VALID, TEST_FILE_JPEG, TEST_FILE_JPG, TEST_FILE_PNG, TEST_FILE_WITH_CONTENT, } from '../../../support/data.util';
+import {
+  TEST_FILE_BESCHEID_ANHANG_BIG,
+  TEST_FILE_BESCHEID_ANHANG_VALID,
+  TEST_FILE_BESCHEID_VALID,
+  TEST_FILE_JPEG,
+  TEST_FILE_JPG,
+  TEST_FILE_PNG,
+  TEST_FILE_WITH_CONTENT,
+} from '../../../support/data.util';
 import { initUsermanagerUsers, loginAsSabine } from '../../../support/user-util';
 import { buildVorgang, initVorgaenge, objectIds } from '../../../support/vorgang-util';
 
@@ -54,6 +64,9 @@ describe('Bescheid Dokumente hochladen', () => {
 
   const vorgangFormularButtons: VorgangFormularButtonsE2EComponent = vorgangPage.getFormularButtons();
 
+  const attachmentHelper: E2EAttachmentHelper = new E2EAttachmentHelper();
+  const attachmentVerifier: E2EAttachmentVerifier = new E2EAttachmentVerifier();
+
   const documentError: string = 'Erlaubte Dateiendungen';
   const sizeError: string = 'Anhänge größer';
   const missingBescheidError: string = 'Bitte fügen Sie ein Bescheiddokument hinzu.';
@@ -90,13 +103,15 @@ describe('Bescheid Dokumente hochladen', () => {
 
     it('should upload manual Bescheid file', () => {
       uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-      notExist(bescheidWizard.getBescheidUploadSpinner());
+      waitForSpinnerToDisappear();
+
       exist(bescheidWizard.getFileBescheidValidInWizard());
     });
 
     it('should upload attachment file', () => {
-      uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_VALID);
-      exist(bescheidWizard.getFileAnhangValidInWizard());
+      attachmentHelper.uploadAttachment(TEST_FILE_BESCHEID_ANHANG_VALID);
+
+      attachmentVerifier.verifyAttachmentInList(TEST_FILE_BESCHEID_ANHANG_VALID);
     });
 
     it('should still show files after clicking Weiter and step 2', () => {
@@ -127,15 +142,9 @@ describe('Bescheid Dokumente hochladen', () => {
     });
 
     it('should be able to attach all valid types of files', () => {
-      uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_JPG);
-      notExist(bescheidWizard.getAttachmentUploadSpinner());
-      uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_JPEG);
-      notExist(bescheidWizard.getAttachmentUploadSpinner());
-      uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_PNG);
-      notExist(bescheidWizard.getAttachmentUploadSpinner());
-      exist(getTestElement(bescheidWizard.getElementFromFileName(TEST_FILE_JPG)));
-      exist(getTestElement(bescheidWizard.getElementFromFileName(TEST_FILE_JPEG)));
-      exist(getTestElement(bescheidWizard.getElementFromFileName(TEST_FILE_PNG)));
+      attachmentHelper.uploadAttachments([TEST_FILE_JPG, TEST_FILE_JPEG, TEST_FILE_PNG]);
+
+      attachmentVerifier.verifyAttachmentsInList([TEST_FILE_JPG, TEST_FILE_JPEG, TEST_FILE_PNG]);
     });
   });
 
@@ -145,8 +154,9 @@ describe('Bescheid Dokumente hochladen', () => {
       contains(bescheidWizard.getBescheidDocument(), documentError);
     });
 
-    it('should show error if file is too big', () => {
+    it('should show error if file is too big', { defaultCommandTimeout: 90000 }, () => {
       uploadFile(bescheidWizard.getUploadAttachmentButton(), TEST_FILE_BESCHEID_ANHANG_BIG);
+
       contains(bescheidWizard.getAttachmentDocument(), sizeError);
     });
   });
@@ -162,7 +172,7 @@ describe('Bescheid Dokumente hochladen', () => {
   describe('check contents of step 3', () => {
     it('should show Max Testermann as Antragsteller, the default message text', () => {
       uploadFile(bescheidWizard.getUploadBescheidButton(), TEST_FILE_BESCHEID_VALID);
-      notExist(bescheidWizard.getBescheidUploadSpinner());
+      waitForSpinnerToDisappear();
 
       bescheidWizard.getWeiterButton().click();
 
diff --git a/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts b/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts
index 74c7bdf3d509660a3ab7e2084b8f968346331e8b..dd9743081a8eae3596b692daf53ff5b2479ce74b 100644
--- a/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts
+++ b/alfa-client/apps/alfa-e2e/src/helper/attachment/attachment.helper.ts
@@ -16,8 +16,8 @@ export class E2EAttachmentHelper {
     this.uploadAttachments([fileName]);
   }
 
-  public uploadAttachments(fileName: string[]): void {
-    this.executor.uploadAttachment(fileName);
+  public uploadAttachments(fileNames: string[]): void {
+    this.executor.uploadAttachment(fileNames);
   }
 
   public uploadEmptyAttachment(fileName: string = TEST_FILE_WITHOUT_CONTENT): void {
diff --git a/alfa-client/apps/alfa-e2e/src/support/data.util.ts b/alfa-client/apps/alfa-e2e/src/support/data.util.ts
index 47f84cd7927ba964684b1de514a846d866d188af..46c335ab573be9cd33c24970ebd37cce56f1da15 100644
--- a/alfa-client/apps/alfa-e2e/src/support/data.util.ts
+++ b/alfa-client/apps/alfa-e2e/src/support/data.util.ts
@@ -36,10 +36,13 @@ export const ORGANISATIONSEINHEITEN_ID_FOR_ADELHEIT = '10363455';
 export const ORGANISATIONSEINHEITEN_ID_FOR_SABINE = '9030229';
 export const ORGANISATIONSEINHEITEN_ID_FOR_BEATE = '12345678';
 
+//TODO Rename = nicht fachlich bezogen bspw. TEST_FILE_WITH_CONTENT_5_MB anstelle von "invalid" oder "big"
 export const TEST_FILE_BESCHEID_VALID: string = 'Bescheid_valid.pdf';
 export const TEST_FILE_BESCHEID_BIG: string = 'Bescheid_5mb.pdf';
 export const TEST_FILE_BESCHEID_ANHANG_VALID: string = 'Anhang_valid.pdf';
 export const TEST_FILE_BESCHEID_ANHANG_BIG: string = 'Anhang_5mb.pdf';
+//
+
 export const TEST_FILE_JPG: string = 'small_jpg.jpg';
 export const TEST_FILE_JPEG: string = 'small_jpeg.jpeg';
 export const TEST_FILE_PNG: string = 'small_png.png';
diff --git a/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html b/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html
index 4024dc2de95e58d010447f113834a2b1b0387252..538932cf346eea42688fc28259a330b1d18fb552 100644
--- a/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html
+++ b/alfa-client/libs/binary-file/src/lib/multi-file-upload-editor/multi-file-upload-editor.component.html
@@ -6,6 +6,7 @@
   [isLoading]="isUploadInProgress$ | async"
   [variant]="uploadButtonVariant"
   data-test-id="binary-file-upload"
+  dataTestId="multi-file-upload-button"
 >
   <ods-spinner-icon spinner size="medium" />
   <ods-attachment-icon icon size="medium" />
diff --git a/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html b/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html
index ff08ce18e4ad8cc6037b84833bd941f375a6da0f..e3807c40af21c86b0026c201ed9cb12525aa263b 100644
--- a/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html
+++ b/alfa-client/libs/design-component/src/lib/form/file-upload-editor/file-upload-editor.component.html
@@ -35,6 +35,7 @@
   [attr.data-test-id]="(label | convertForDataTest) + '-file-upload-button'"
   [isLoading]="uploadInProgress.loading"
   class="relative w-full max-w-72"
+  dataTestId="file-upload-editor"
 >
   <ods-spinner-icon spinner size="medium" />
   <ods-attachment-icon icon size="medium" />
diff --git a/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html b/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html
index 837b069ad149e2e7e2eb08305e54e8ab74df16f5..409101e9b6320310d915e0364f8da49bf82a7fda 100644
--- a/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html
+++ b/alfa-client/libs/design-component/src/lib/form/single-file-upload-editor/single-file-upload-editor.component.html
@@ -29,6 +29,7 @@
   [isLoading]="uploadInProgress"
   [accept]="accept"
   [attr.data-test-id]="(label | convertForDataTest) + '-single-file-upload-button'"
+  dataTestId="single-file-upload-button"
 >
   <ng-content icon select="[icon]"></ng-content>
   <ng-content text select="[text]"></ng-content>
diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html
index b65b88d5b02c74982b872549c6d87aeccdf1644b..2e4573ac9c648f820f392f51dc8e96c237f74fb5 100644
--- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html
+++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.html
@@ -32,7 +32,7 @@
   (click)="resetInput()"
   [disabled]="isLoading"
   [multiple]="multi"
-  [attr.data-test-id]="(id | convertForDataTest) + '-file-upload-input'"
+  [attr.data-test-id]="dataTestId"
 />
 <label [for]="id" [ngClass]="uploadButtonVariants({ variant })" role="button">
   @if (isLoading) {
diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts
index 54b7d3b7dde522ce018e0efae8b4210f6e2e2cff..bc63bfe1e214deec130fcd1f487045d14a68ad79 100644
--- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts
+++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.spec.ts
@@ -21,7 +21,6 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { ConvertForDataTestPipe } from '@alfa-client/tech-shared';
 import { getElementFromFixture } from '@alfa-client/test-utils';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { faker } from '@faker-js/faker';
@@ -34,16 +33,18 @@ describe('FileUploadButtonComponent', () => {
   let fixture: ComponentFixture<FileUploadButtonComponent>;
 
   const labelText: string = faker.word.noun();
-  const inputTestClass: string = getDataTestIdOf(labelText + '-file-upload-input');
+  const dataTestId: string = 'dummyDataTestId';
+  const input: string = getDataTestIdOf(dataTestId);
 
   beforeEach(async () => {
     await TestBed.configureTestingModule({
-      imports: [FileUploadButtonComponent, ConvertForDataTestPipe],
+      imports: [FileUploadButtonComponent],
     }).compileComponents();
 
     fixture = TestBed.createComponent(FileUploadButtonComponent);
     component = fixture.componentInstance;
     component.id = labelText;
+    component.dataTestId = dataTestId;
     fixture.detectChanges();
   });
 
@@ -54,7 +55,7 @@ describe('FileUploadButtonComponent', () => {
   describe('click at file input', () => {
     it('should call resetInput()', () => {
       component.resetInput = jest.fn();
-      const fileInput = getElementFromFixture(fixture, inputTestClass);
+      const fileInput = getElementFromFixture(fixture, input);
 
       fileInput.click();
       fixture.detectChanges();
@@ -68,7 +69,7 @@ describe('FileUploadButtonComponent', () => {
       component.multi = true;
       fixture.detectChanges();
 
-      const inputElement: HTMLInputElement = getElementFromFixture(fixture, inputTestClass);
+      const inputElement: HTMLInputElement = getElementFromFixture(fixture, input);
 
       expect(inputElement.multiple).toEqual(component.multi);
     });
diff --git a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts
index b5048be11b1b7e67eaf8c077e3d4cd0caab66388..9f06d3864e0c7767b368509d49449e68d18ac0a0 100644
--- a/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts
+++ b/alfa-client/libs/design-system/src/lib/form/file-upload-button/file-upload-button.component.ts
@@ -59,6 +59,7 @@ export class FileUploadButtonComponent {
   @Input() accept: string = '*/*';
   @Input() multi: boolean = false;
   @Input() variant: UploadButtonVariants['variant'];
+  @Input({ required: true }) dataTestId: string;
 
   @ViewChild('inputElement') inputElement: ElementRef = new ElementRef({});