diff --git a/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts b/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts
index 7b9027ffdc33f6f5cef1980aac392859a457237d..5fcf9293386a9ad8b80322055dd470149b483a99 100644
--- a/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts
+++ b/alfa-client/apps/admin-e2e/src/components/benutzer/benutzer.e2e.component.ts
@@ -94,10 +94,10 @@ export class BenutzerE2EComponent {
   private readonly userBenutzername: string = 'Benutzername-text-input';
   private readonly userMail: string = 'E-Mail-text-input';
 
-  private readonly adminCheckbox: string = 'Admin-checkbox-editor';
-  private readonly loeschenCheckbox: string = 'Loschen-checkbox-editor';
-  private readonly userCheckbox: string = 'User-checkbox-editor';
-  private readonly postCheckbox: string = 'Poststelle-checkbox-editor';
+  private readonly adminCheckboxLabel: string = 'Admin';
+  private readonly loeschenCheckboxLabel: string = 'Löschen';
+  private readonly userCheckboxLabel: string = 'User';
+  private readonly postCheckboxLabel: string = 'Poststelle';
 
   private readonly organisationsEinheitCheckboxSuffix: string = '-checkbox-editor';
 
@@ -119,20 +119,20 @@ export class BenutzerE2EComponent {
     return cy.getTestElement(this.userMail);
   }
 
-  public getAdminCheckbox(): Cypress.Chainable<Element> {
-    return cy.getTestElement(this.adminCheckbox);
+  public getAdminCheckbox(): BenutzerCheckboxE2EComponent {
+    return new BenutzerCheckboxE2EComponent(this.adminCheckboxLabel);
   }
 
-  public getLoeschenCheckbox(): Cypress.Chainable<Element> {
-    return cy.getTestElement(this.loeschenCheckbox);
+  public getLoeschenCheckbox(): BenutzerCheckboxE2EComponent {
+    return new BenutzerCheckboxE2EComponent(this.loeschenCheckboxLabel);
   }
 
-  public getUserCheckbox(): Cypress.Chainable<Element> {
-    return cy.getTestElement(this.userCheckbox);
+  public getUserCheckbox(): BenutzerCheckboxE2EComponent {
+    return new BenutzerCheckboxE2EComponent(this.userCheckboxLabel);
   }
 
-  public getPostCheckbox(): Cypress.Chainable<Element> {
-    return cy.getTestElement(this.postCheckbox);
+  public getPostCheckbox(): BenutzerCheckboxE2EComponent {
+    return new BenutzerCheckboxE2EComponent(this.postCheckboxLabel);
   }
 
   public getSaveButton(): Cypress.Chainable<Element> {
@@ -147,3 +147,29 @@ export class BenutzerE2EComponent {
     return cy.getTestElement(this.headline);
   }
 }
+
+export class BenutzerCheckboxE2EComponent {
+  private rootPrefix: string;
+  private prefix: string;
+
+  private readonly adminCheckbox: string = '-checkbox-editor';
+  private readonly adminInfoButtonSuffix: string = '-role-info-button';
+  private readonly adminInfoButtonTooltipSuffix: string = '-role-info-button-tooltip';
+
+  constructor(label: string) {
+    this.rootPrefix = convertToDataTestId(label);
+    this.prefix = convertToDataTestId(label.toLocaleLowerCase());
+  }
+
+  public getRoot(): Cypress.Chainable<Element> {
+    return cy.getTestElement(`${this.rootPrefix}${this.adminCheckbox}`);
+  }
+
+  public getInfoButton(): Cypress.Chainable<Element> {
+    return cy.getTestElement(`${this.prefix}${this.adminInfoButtonSuffix}`);
+  }
+
+  public getInfoButtonTooltip(): Cypress.Chainable<Element> {
+    return cy.getTestElement(`${this.prefix}${this.adminInfoButtonTooltipSuffix}`);
+  }
+}
diff --git a/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts
index 6f2aeed20740461f3dc978afdc2b974fec471f00..b45dc8f07dd52c1c89315663866c0cbf4350fc71 100644
--- a/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts
+++ b/alfa-client/apps/admin-e2e/src/e2e/main-tests/benutzer_rollen/benutzer_rollen.cy.ts
@@ -21,15 +21,24 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { E2EBenutzerHelper } from 'apps/admin-e2e/src/helper/benutzer/benutzer.helper';
-import { OrganisationsEinheitE2E } from 'apps/admin-e2e/src/model/organisations-einheit';
 import {
   BenutzerE2EComponent,
   BenutzerListE2EComponent,
   BenutzerListItemE2EComponent,
-} from '../../../components/benutzer/benutzer.e2e.component';
-import { beChecked, beEnabled, contains, exist, notBeChecked, notBeEnabled } from '../../../support/cypress.util';
-import { AlfaRollen, AlfaUsers, loginAsAriane } from '../../../support/user-util';
+} from 'apps/admin-e2e/src/components/benutzer/benutzer.e2e.component';
+import { E2EBenutzerHelper } from 'apps/admin-e2e/src/helper/benutzer/benutzer.helper';
+import { OrganisationsEinheitE2E } from 'apps/admin-e2e/src/model/organisations-einheit';
+import {
+  beChecked,
+  beEnabled,
+  contains,
+  exist,
+  mouseEnter,
+  notBeChecked,
+  notBeEnabled,
+  visible,
+} from 'apps/admin-e2e/src/support/cypress.util';
+import { AlfaRollen, AlfaUsers, loginAsAriane } from 'apps/admin-e2e/src/support/user-util';
 
 describe('Benutzer und Rollen', () => {
   const benutzerPage: BenutzerE2EComponent = new BenutzerE2EComponent();
@@ -84,56 +93,82 @@ describe('Benutzer und Rollen', () => {
     exist(benutzerPage.getBenutzernameInput());
     exist(benutzerPage.getMailInput());
 
-    notBeChecked(benutzerPage.getAdminCheckbox());
-    notBeChecked(benutzerPage.getLoeschenCheckbox());
-    notBeChecked(benutzerPage.getUserCheckbox());
-    notBeChecked(benutzerPage.getPostCheckbox());
+    notBeChecked(benutzerPage.getAdminCheckbox().getRoot());
+    notBeChecked(benutzerPage.getLoeschenCheckbox().getRoot());
+    notBeChecked(benutzerPage.getUserCheckbox().getRoot());
+    notBeChecked(benutzerPage.getPostCheckbox().getRoot());
   });
 
   it('should activate loeschen checkbox and deactivate the other two checkboxes', () => {
-    benutzerPage.getLoeschenCheckbox().click();
-    beChecked(benutzerPage.getLoeschenCheckbox());
-    notBeEnabled(benutzerPage.getUserCheckbox());
-    notBeEnabled(benutzerPage.getPostCheckbox());
-
-    benutzerPage.getLoeschenCheckbox().click();
-    notBeChecked(benutzerPage.getLoeschenCheckbox());
-    beEnabled(benutzerPage.getUserCheckbox());
-    beEnabled(benutzerPage.getPostCheckbox());
+    benutzerPage.getLoeschenCheckbox().getRoot().click();
+    beChecked(benutzerPage.getLoeschenCheckbox().getRoot());
+    notBeEnabled(benutzerPage.getUserCheckbox().getRoot());
+    notBeEnabled(benutzerPage.getPostCheckbox().getRoot());
+
+    benutzerPage.getLoeschenCheckbox().getRoot().click();
+    notBeChecked(benutzerPage.getLoeschenCheckbox().getRoot());
+    beEnabled(benutzerPage.getUserCheckbox().getRoot());
+    beEnabled(benutzerPage.getPostCheckbox().getRoot());
   });
 
   it('should additionally activate and deactivate admin checkbox', () => {
-    benutzerPage.getLoeschenCheckbox().click();
-    benutzerPage.getAdminCheckbox().click();
-    beChecked(benutzerPage.getLoeschenCheckbox());
-    beChecked(benutzerPage.getAdminCheckbox());
+    benutzerPage.getLoeschenCheckbox().getRoot().click();
+    benutzerPage.getAdminCheckbox().getRoot().click();
+    beChecked(benutzerPage.getLoeschenCheckbox().getRoot());
+    beChecked(benutzerPage.getAdminCheckbox().getRoot());
 
-    benutzerPage.getAdminCheckbox().click();
-    notBeChecked(benutzerPage.getAdminCheckbox());
+    benutzerPage.getAdminCheckbox().getRoot().click();
+    notBeChecked(benutzerPage.getAdminCheckbox().getRoot());
   });
 
   it('should activate user checkbox and deactivate the other two checkboxes', () => {
-    benutzerPage.getLoeschenCheckbox().click();
-    benutzerPage.getUserCheckbox().click();
-    beChecked(benutzerPage.getUserCheckbox());
-    notBeEnabled(benutzerPage.getLoeschenCheckbox());
-    notBeEnabled(benutzerPage.getPostCheckbox());
-
-    benutzerPage.getUserCheckbox().click();
-    notBeChecked(benutzerPage.getUserCheckbox());
-    beEnabled(benutzerPage.getLoeschenCheckbox());
-    beEnabled(benutzerPage.getPostCheckbox());
+    benutzerPage.getLoeschenCheckbox().getRoot().click();
+    benutzerPage.getUserCheckbox().getRoot().click();
+    beChecked(benutzerPage.getUserCheckbox().getRoot());
+    notBeEnabled(benutzerPage.getLoeschenCheckbox().getRoot());
+    notBeEnabled(benutzerPage.getPostCheckbox().getRoot());
+
+    benutzerPage.getUserCheckbox().getRoot().click();
+    notBeChecked(benutzerPage.getUserCheckbox().getRoot());
+    beEnabled(benutzerPage.getLoeschenCheckbox().getRoot());
+    beEnabled(benutzerPage.getPostCheckbox().getRoot());
   });
 
   it('should activate post checkbox and deactivate the other two checkboxes', () => {
-    benutzerPage.getPostCheckbox().click();
-    beChecked(benutzerPage.getPostCheckbox());
-    notBeEnabled(benutzerPage.getLoeschenCheckbox());
-    notBeEnabled(benutzerPage.getUserCheckbox());
-
-    benutzerPage.getPostCheckbox().click();
-    notBeChecked(benutzerPage.getPostCheckbox());
-    beEnabled(benutzerPage.getLoeschenCheckbox());
-    beEnabled(benutzerPage.getUserCheckbox());
+    benutzerPage.getPostCheckbox().getRoot().click();
+    beChecked(benutzerPage.getPostCheckbox().getRoot());
+    notBeEnabled(benutzerPage.getLoeschenCheckbox().getRoot());
+    notBeEnabled(benutzerPage.getUserCheckbox().getRoot());
+
+    benutzerPage.getPostCheckbox().getRoot().click();
+    notBeChecked(benutzerPage.getPostCheckbox().getRoot());
+    beEnabled(benutzerPage.getLoeschenCheckbox().getRoot());
+    beEnabled(benutzerPage.getUserCheckbox().getRoot());
+  });
+
+  describe('hint text', () => {
+    it('should be visible on admin role mouse hover', () => {
+      mouseEnter(benutzerPage.getAdminCheckbox().getInfoButton());
+
+      visible(benutzerPage.getAdminCheckbox().getInfoButtonTooltip());
+    });
+
+    it('should be visible on loeschen role mouse hover', () => {
+      mouseEnter(benutzerPage.getLoeschenCheckbox().getInfoButton());
+
+      visible(benutzerPage.getLoeschenCheckbox().getInfoButtonTooltip());
+    });
+
+    it('should be visible on user role mouse hover', () => {
+      mouseEnter(benutzerPage.getUserCheckbox().getInfoButton());
+
+      visible(benutzerPage.getUserCheckbox().getInfoButtonTooltip());
+    });
+
+    it('should be visible on poststellt role mouse hover', () => {
+      mouseEnter(benutzerPage.getPostCheckbox().getInfoButton());
+
+      visible(benutzerPage.getPostCheckbox().getInfoButtonTooltip());
+    });
   });
 });
diff --git a/alfa-client/apps/admin-e2e/src/helper/benutzer/benutzer.executor.ts b/alfa-client/apps/admin-e2e/src/helper/benutzer/benutzer.executor.ts
index 9c8898bc0fcddef20b538919cc20bde8bc6e1993..938ddad2366dd0cf1ec9fff884c291e8f4836b79 100644
--- a/alfa-client/apps/admin-e2e/src/helper/benutzer/benutzer.executor.ts
+++ b/alfa-client/apps/admin-e2e/src/helper/benutzer/benutzer.executor.ts
@@ -15,16 +15,16 @@ export class E2EBenutzerExecutor {
     this.benutzerPage.getMailInput().type(user.email);
 
     if (user.isAdmin) {
-      this.benutzerPage.getAdminCheckbox().click();
+      this.benutzerPage.getAdminCheckbox().getRoot().click();
     }
     if (user.isUser) {
-      this.benutzerPage.getUserCheckbox().click();
+      this.benutzerPage.getUserCheckbox().getRoot().click();
     }
     if (user.isLoeschen) {
-      this.benutzerPage.getLoeschenCheckbox().click();
+      this.benutzerPage.getLoeschenCheckbox().getRoot().click();
     }
     if (user.isPoststelle) {
-      this.benutzerPage.getPostCheckbox().click();
+      this.benutzerPage.getPostCheckbox().getRoot().click();
     }
 
     this.modifyOrganisationsEinheiten(user.organisationseinheiten);
diff --git a/alfa-client/apps/admin-e2e/src/support/cypress.util.ts b/alfa-client/apps/admin-e2e/src/support/cypress.util.ts
index 637963609081aa8cddbd24bbf5f56369b80cf0ef..d18cc34fbfe2cedb9d21aae60b730283b96e9392 100644
--- a/alfa-client/apps/admin-e2e/src/support/cypress.util.ts
+++ b/alfa-client/apps/admin-e2e/src/support/cypress.util.ts
@@ -60,10 +60,6 @@ export function mouseEnter(element: Cypress.Chainable<Element>): void {
   element.trigger('mouseenter');
 }
 
-export function mouseOver(element: Cypress.Chainable<Element>): void {
-  element.trigger('mouseover');
-}
-
 export function contains(element: Cypress.Chainable<Element>, containing: string): void {
   element.should('exist').contains(containing);
 }
diff --git a/alfa-client/apps/admin-e2e/src/support/tech-util.ts b/alfa-client/apps/admin-e2e/src/support/tech-util.ts
index a1bbcb74ae2b53c9fc3fc05bbcab81896c4e183e..6e6c57d156a011e83fe53bee52ad26a56a384ad2 100644
--- a/alfa-client/apps/admin-e2e/src/support/tech-util.ts
+++ b/alfa-client/apps/admin-e2e/src/support/tech-util.ts
@@ -10,6 +10,6 @@ export function replaceAllWhitespaces(value: string, replaceWith: string): strin
   return value.replace(/ /g, replaceWith);
 }
 
-export function simpleTransliteration(value: string) {
+export function simpleTransliteration(value: string): string {
   return value.normalize('NFKD').replace(/[^-A-Za-z0-9_]/g, '');
 }
diff --git a/alfa-client/libs/admin/user/src/lib/user-form/user-form-roles/user-form-roles.component.html b/alfa-client/libs/admin/user/src/lib/user-form/user-form-roles/user-form-roles.component.html
index 10b190c0ac68f5387b66c02fe39a4c3929040501..b604db41588c7f1fbd381c194a8fb98a69aad0c3 100644
--- a/alfa-client/libs/admin/user/src/lib/user-form/user-form-roles/user-form-roles.component.html
+++ b/alfa-client/libs/admin/user/src/lib/user-form/user-form-roles/user-form-roles.component.html
@@ -6,6 +6,7 @@
       <div class="flex items-center gap-2">
         <ods-checkbox-editor [formControlName]="UserFormService.ADMIN" label="Admin" inputId="admin" />
         <button
+          data-test-id="admin-role-info-button"
           tooltip="Diese Rolle kann Funktionen der OZG-Cloud konfigurieren, z.B. Benutzer anlegen, Organisationseinheiten hinzufügen und Rollen zuweisen."
         >
           <ods-info-icon />
@@ -17,6 +18,7 @@
       <div class="flex items-center gap-2">
         <ods-checkbox-editor [formControlName]="UserFormService.LOESCHEN" label="Löschen" inputId="delete" />
         <button
+          data-test-id="loschen-role-info-button"
           tooltip='Diese Rolle hat dieselben Rechte wie die Rolle "User". Zusätzlich kann "Löschen" Löschanträge aus Alfa bestätigen. '
         >
           <ods-info-icon />
@@ -25,6 +27,7 @@
       <div class="flex items-center gap-2">
         <ods-checkbox-editor [formControlName]="UserFormService.USER" label="User" inputId="user" />
         <button
+          data-test-id="user-role-info-button"
           tooltip="Diese Rolle kann alle Vorgänge sehen und bearbeiten, wenn diese seiner Organisationseinheit zugewiesen sind."
         >
           <ods-info-icon />
@@ -32,7 +35,7 @@
       </div>
       <div class="flex items-center gap-2">
         <ods-checkbox-editor [formControlName]="UserFormService.POSTSTELLE" label="Poststelle" inputId="post_office" />
-        <button tooltip="Diese Rolle kann alle neu eingegangenen Vorgänge sehen.">
+        <button data-test-id="poststelle-role-info-button" tooltip="Diese Rolle kann alle neu eingegangenen Vorgänge sehen.">
           <ods-info-icon />
         </button>
       </div>
diff --git a/alfa-client/libs/test-utils/src/lib/mocking.ts b/alfa-client/libs/test-utils/src/lib/mocking.ts
index 0fb616db60420994880e9acfddec1d0d37e10486..13ea6f602d26172b07d0a82f1c48136adbc9d28d 100644
--- a/alfa-client/libs/test-utils/src/lib/mocking.ts
+++ b/alfa-client/libs/test-utils/src/lib/mocking.ts
@@ -53,3 +53,7 @@ export function mockGetValue(object: any, name: string, returnValue: any): void
     get: jest.fn(() => returnValue),
   });
 }
+
+export function assignValue<T>(object: any, attributeName: string, toAssignValue: any): T {
+  return Object.assign(object, { [attributeName]: toAssignValue });
+}