Test IDs Reference

This page documents the stable data-testid attributes used throughout PassTheNote for reliable automation testing. All components maintain consistent test IDs across releases to ensure your test suites remain stable.

Test ID Schema v1.0411 documented IDs • 11 modules • Stable as of December 2025

Authentication

/auth/*
Test IDElementPurpose
ptn-login-pagedivLogin page container
ptn-login-email-inputinputEmail input field
ptn-login-password-inputinputPassword input field
ptn-login-error-alertdivError alert message
ptn-login-warning-alertdivWarning alert message
ptn-login-forgot-linkaForgot password link
ptn-login-submit-buttonbuttonLogin submit button
ptn-login-signup-linkaLink to signup page
ptn-demo-creds-testerbuttonDemo credential — tester user
ptn-demo-creds-adminbuttonDemo credential — admin user
ptn-demo-creds-lockedbuttonDemo credential — locked user
ptn-demo-creds-glitchbuttonDemo credential — glitch user
ptn-signup-pagedivSignup page container
ptn-signup-name-inputinputFull name input field
ptn-signup-name-errorpName validation error message
ptn-signup-email-inputinputEmail input field
ptn-signup-email-errorpEmail validation error message
ptn-signup-password-inputinputPassword field with strength meter
ptn-signup-password-errorpPassword validation error
ptn-signup-confirm-password-errorpConfirm password validation error
ptn-signup-alertdivAlert container
ptn-signup-submit-buttonbuttonSignup submit button
ptn-signup-attempts-leftpRemaining OTP attempts counter
ptn-signup-otp-lockedpOTP locked message
ptn-signup-verify-buttonbuttonOTP verification button
ptn-signup-resend-buttonbuttonResend OTP button
ptn-signup-back-buttonbuttonBack navigation button
ptn-forgot-pagedivForgot password page container
ptn-forgot-messagedivInstruction message
ptn-forgot-email-inputinputEmail input field
ptn-forgot-email-errorpEmail validation error
ptn-forgot-submit-buttonbuttonSubmit button
ptn-forgot-verify-buttonbuttonOTP verification button
ptn-forgot-resend-buttonbuttonResend OTP button
ptn-forgot-back-buttonbuttonBack navigation button
ptn-reset-pagedivPassword reset page container
ptn-reset-alertdivAlert container
ptn-reset-password-errorpPassword field error
ptn-reset-confirm-password-errorpConfirm password field error
ptn-reset-submit-buttonbuttonReset password submit button

40 test IDs

E-Commerce

/app/products, /app/cart, /app/checkout, /app/orders
Test IDElementPurpose
ptn-product-carddivProduct card container (multiple)
ptn-product-namespanProduct name display
ptn-product-pricespanProduct price display
ptn-product-add-buttonbuttonAdd to cart button
category-card-{id}divCategory card (dynamic)
deal-card-{id}divDeal/promo card (dynamic)
ptn-cart-pagedivCart page container
ptn-cart-empty-continue-shoppingbuttonContinue shopping (empty cart)
ptn-cart-itemdivCart line-item container (multiple)
ptn-cart-item-nameh3Product name in cart
ptn-cart-item-quantityinputQuantity input field
ptn-cart-item-decreasebuttonDecrease quantity button
ptn-cart-item-increasebuttonIncrease quantity button
ptn-cart-item-totalpLine-item total price
ptn-cart-item-removebuttonRemove from cart button
ptn-cart-continue-shoppingbuttonContinue shopping button
ptn-cart-subtotalspanSubtotal amount
ptn-cart-totalspanTotal amount
ptn-cart-checkout-buttonbuttonProceed to checkout button
ptn-orders-pagedivOrders page container
ptn-orders-listdivOrders list container
ptn-order-status-badgedivOrder status badge

22 test IDs

Notes & Knowledge Sharing

/notes, /notes/[id], /notes/create, /notes/my-notes
Test IDElementPurpose
ptn-notes-feeddivMain social notes feed container
ptn-notes-list-viewsectionList view section
ptn-notes-grid-viewsectionGrid view section
ptn-notes-loadingdivLoading indicator
ptn-notes-load-morebuttonLoad more button
ptn-notes-end-messagedivEnd of list message
ptn-notes-result-countpResult count display
ptn-notes-search-inputinputKeyword search field
ptn-notes-sort-selectselectSort dropdown
ptn-notes-filter-paneldivFilter panel container
ptn-notes-type-{type}buttonType filter chip (dynamic)
ptn-notes-clear-typebuttonClear type filter button
ptn-notes-tag-{tag}buttonTag filter chip (dynamic)
ptn-notes-clear-tagsbuttonClear tags filter button
ptn-notes-view-mode-{id}buttonView mode toggle (dynamic)
ptn-notes-feed-toggle-{id}buttonFeed lens toggle (dynamic)
ptn-notes-tab-{id}buttonFeed tab (dynamic)
ptn-note-card-{id}divIndividual note card (dynamic)
ptn-note-card-titleh3Note title
ptn-note-card-previewpNote preview text
ptn-note-card-contentdivNote content display
ptn-note-card-authorspanAuthor name
ptn-note-card-author-avatarimgAuthor avatar image
ptn-note-card-timestampspanCreation timestamp
ptn-note-card-typespanNote type badge
ptn-note-card-tagsdivTags container
ptn-note-card-tag-{tag}divIndividual tag (dynamic)
ptn-note-card-like-buttonbuttonLike / unlike button
ptn-note-card-comment-buttonbuttonOpen comments button
ptn-note-card-commentsdivComments count display
ptn-note-card-share-buttonbuttonShare button
ptn-note-card-sharedivShare action container
ptn-note-card-bookmarkbuttonBookmark button
ptn-note-card-bookmark-buttonbuttonBookmark action button
ptn-note-card-read-morebuttonRead more / expand button
ptn-note-card-view-buttonbuttonView note button
ptn-note-card-editbuttonEdit note button
ptn-note-card-deletebuttonDelete note button
ptn-note-card-menubuttonNote card menu button
ptn-note-card-menu-dropdowndivNote card menu dropdown
ptn-note-card-copy-linkbuttonCopy link option
ptn-notes-composerdivComposer (collapsed)
ptn-notes-composer-expandeddivComposer (expanded)
ptn-notes-composer-titleinputComposer title input
ptn-notes-composer-contenttextareaComposer content textarea
ptn-notes-composer-type-{type}buttonType selector (dynamic)
ptn-notes-composer-tag-{tag}divPre-populated tag (dynamic)
ptn-notes-composer-tag-inputinputCustom tag input
ptn-notes-composer-cancelbuttonCancel composer
ptn-notes-composer-submitbuttonSubmit note
ptn-my-notes-pagedivMy notes page container
ptn-my-notes-create-buttonbuttonCreate new note button
ptn-my-notes-empty-statedivEmpty state card
ptn-my-notes-listdivMy notes list container
ptn-my-note-carddivIndividual note card in my notes
ptn-note-create-pagedivCreate note page container
ptn-note-create-title-inputinputTitle input
ptn-note-create-type-selectselectType selector
ptn-note-create-content-inputtextareaContent textarea
ptn-note-create-tags-inputinputTags input
ptn-note-create-submit-buttonbuttonSubmit new note
ptn-note-detail-pagedivNote detail page container
ptn-note-detail-titleh1Note title
ptn-note-detail-contentdivNote content
ptn-note-detail-edit-buttonbuttonEdit note button
ptn-note-detail-delete-buttonbuttonDelete note button
ptn-note-edit-pagedivEdit note page container
ptn-note-edit-title-inputinputTitle input (edit)
ptn-note-edit-type-selectselectType selector (edit)
ptn-note-edit-content-inputtextareaContent textarea (edit)
ptn-note-edit-tags-inputinputTags input (edit)
ptn-note-edit-submit-buttonbuttonSubmit edited note
ptn-note-comment-inputtextareaComment input field
ptn-note-comment-submit-buttonbuttonSubmit comment button
ptn-note-comments-listdivComments list container
ptn-note-commentdivIndividual comment
ptn-notes-sidebar-leftdivLeft sidebar container
ptn-notes-shortcut-{label}buttonSidebar shortcut (dynamic)
ptn-notes-logout-buttonbuttonLogout button in sidebar
ptn-notes-sidebar-rightdivRight sidebar container
ptn-notes-trending-tag-{tag}divTrending tag item (dynamic)
ptn-notes-follow-suggestion-{name}divFollow suggestion (dynamic)
ptn-notes-practice-prompt-{index}divPractice prompt (dynamic)
ptn-notes-mobile-menu-buttonbuttonMobile menu toggle
ptn-notes-mobile-menu-nav-tabbuttonMobile nav tab
ptn-notes-mobile-menu-discovery-tabbuttonMobile discovery tab

86 test IDs

FakeBank

/fakebank/*
Test IDElementPurpose
ptn-fakebank-login-formformLogin form
ptn-fakebank-username-inputinputUsername input
ptn-fakebank-password-inputinputPassword input
ptn-fakebank-login-errordivLogin error message
ptn-fakebank-login-buttonbuttonLogin submit button
ptn-fakebank-credentials-tabledivDemo credentials table
ptn-fakebank-customer-dashboarddivCustomer dashboard page
ptn-fakebank-logout-buttonbuttonLogout button
ptn-fakebank-account-carddivAccount card component
ptn-fakebank-account-numberpAccount number display
ptn-fakebank-account-balancedivAccount balance display
ptn-fakebank-transfer-pagedivTransfer page container
ptn-fakebank-transfer-formformTransfer form
ptn-fakebank-transfer-from-selectselectSource account selector
ptn-fakebank-transfer-to-selectselectDestination account selector
ptn-fakebank-transfer-amount-inputinputTransfer amount input
ptn-fakebank-transfer-description-inputinputTransfer description input
ptn-fakebank-transfer-submit-buttonbuttonTransfer submit button
ptn-fakebank-transfer-errordivTransfer error message
ptn-fakebank-transfer-successdivTransfer success message
ptn-fakebank-transactions-pagedivTransactions page container
ptn-fakebank-account-selectselectAccount filter selector
ptn-fakebank-transaction-tabledivTransactions table container
ptn-fakebank-no-transactionsdivNo transactions message
ptn-fakebank-transaction-rowtrIndividual transaction row (multiple)
ptn-fakebank-service-requests-pagedivService requests page
ptn-fakebank-new-request-buttonbuttonNew service request button
ptn-fakebank-service-request-formformService request form
ptn-fakebank-service-request-type-selectselectRequest type selector
ptn-fakebank-service-request-description-inputtextareaDescription input
ptn-fakebank-service-request-priority-selectselectPriority selector
ptn-fakebank-service-request-errordivForm error message
ptn-fakebank-service-request-successdivForm success message
ptn-fakebank-service-request-submit-buttonbuttonSubmit request button
ptn-fakebank-service-requests-errordivPage-level error
ptn-fakebank-service-requests-listdivRequests list container
ptn-fakebank-service-request-itemdivIndividual request card (multiple)
ptn-fakebank-bp-dashboarddivBanking Professional dashboard
ptn-fakebank-bp-logout-buttonbuttonBP logout button
ptn-fakebank-bp-errordivBP-level error message
ptn-fakebank-customer-listdivCustomer list container
ptn-fakebank-no-customersdivNo customers message
ptn-fakebank-customer-rowtrIndividual customer row (multiple)
ptn-fakebank-approval-queuedivApproval queue container
ptn-fakebank-no-pending-approvalsdivNo pending approvals message
ptn-fakebank-approval-itemdivApproval item container
ptn-fakebank-approve-buttonbuttonApprove button
ptn-fakebank-reject-buttonbuttonReject button
ptn-fakebank-reject-formdivRejection reason form
ptn-fakebank-reject-reason-inputtextareaRejection reason input
ptn-fakebank-confirm-reject-buttonbuttonConfirm rejection button
ptn-fakebank-bp-service-requestsdivBP service requests list
ptn-fakebank-bp-service-request-itemdivBP request item (multiple)

53 test IDs

FlightLab

/flightlab/*
Test IDElementPurpose
ptn-flightlab-landingdivLanding page container
ptn-flightlab-titleh1FlightLab title
ptn-flightlab-disclaimerdivFlight booking disclaimer
ptn-flightlab-login-carddivLogin card container
ptn-flightlab-login-formformLogin form
ptn-flightlab-login-errordivLogin error alert
ptn-flightlab-username-selectselectUsername selector
ptn-flightlab-password-inputinputPassword input
ptn-flightlab-login-buttonbuttonLogin button
ptn-flightlab-users-carddivDemo users card
ptn-flightlab-user-{username}divUser item (dynamic)
ptn-flightlab-quick-login-{username}buttonQuick login button (dynamic)
ptn-flightlab-back-homebuttonBack to home button
ptn-flightlab-headerheaderFlightLab header
ptn-flightlab-nav-dashboardaNav — dashboard link
ptn-flightlab-nav-searchaNav — search link
ptn-flightlab-nav-bookingsaNav — bookings link
ptn-flightlab-nav-adminaNav — admin link
ptn-flightlab-notifications-iconbuttonNotifications icon button
ptn-flightlab-reset-sandbox-buttonbuttonReset sandbox button
ptn-flightlab-logout-buttonbuttonLogout button
ptn-flightlab-dashboarddivDashboard page
ptn-flightlab-quick-searchdivQuick search widget
ptn-flightlab-quick-bookingsdivQuick bookings widget
ptn-flightlab-quick-notificationsdivQuick notifications widget
ptn-flightlab-quick-admindivQuick admin link
ptn-flightlab-search-pagedivFlight search page
ptn-flightlab-filter-airlineselectAirline filter
ptn-flightlab-filter-stopsselectStops filter
ptn-flightlab-sort-byselectSort by selector
ptn-flightlab-search-resultsdivSearch results container
ptn-flightlab-booking-carddivBooking card in list (multiple)
ptn-flightlab-bookings-listdivBookings list page
ptn-flightlab-bookings-filterselectBookings filter
ptn-flightlab-booking-detaildivBooking detail page
ptn-flightlab-booking-confirm-buttonbuttonConfirm booking button
ptn-flightlab-select-seats-buttonbuttonSelect seats button
ptn-flightlab-booking-cancel-buttonbuttonCancel booking button
ptn-flightlab-seat-selection-pagedivSeat selection page
ptn-flightlab-seat-mapdivSeat map container
ptn-flightlab-seat-{seatNumber}buttonIndividual seat (dynamic)
ptn-flightlab-skip-seatsbuttonSkip seat selection
ptn-flightlab-save-seatsbuttonSave seat selection
ptn-flightlab-passenger-pagedivPassenger details page
ptn-flightlab-passenger-formdivPassenger form container
ptn-flightlab-passenger-{index}-titleselectPassenger title (dynamic)
ptn-flightlab-passenger-{index}-genderselectPassenger gender (dynamic)
ptn-flightlab-passenger-{index}-firstnameinputPassenger first name (dynamic)
ptn-flightlab-passenger-{index}-lastnameinputPassenger last name (dynamic)
ptn-flightlab-passenger-{index}-dobinputPassenger date of birth (dynamic)
ptn-flightlab-passenger-{index}-ffninputFrequent flyer number (dynamic)
ptn-flightlab-passengers-backbuttonBack button
ptn-flightlab-passengers-continuebuttonContinue button
ptn-flightlab-review-pagedivBooking review page
ptn-flightlab-review-backbuttonBack button on review
ptn-flightlab-review-confirmbuttonConfirm booking button
ptn-flightlab-booking-confirmationdivBooking confirmation page
ptn-flightlab-notifications-listdivNotifications list page
ptn-flightlab-notifications-mark-readbuttonMark as read button
ptn-flightlab-admin-pagedivAdmin page
ptn-flightlab-audit-filterselectAudit log filter
ptn-flightlab-audit-log-tabledivAudit log table

62 test IDs

HealthHub

/healthhub/*
Test IDElementPurpose
ptn-healthhub-login-formformLogin form
ptn-healthhub-login-errordivLogin error alert
ptn-healthhub-login-usernameinputUsername input
ptn-healthhub-login-passwordinputPassword input
ptn-healthhub-login-submitbuttonLogin submit button
ptn-healthhub-role-{role}divRole selection card (dynamic)
ptn-healthhub-quick-login-{username}buttonQuick login button (dynamic)
ptn-healthhub-logoutbuttonLogout button
ptn-healthhub-book-appointmentbuttonBook appointment button
ptn-healthhub-booking-dateinputAppointment date input
ptn-healthhub-booking-timeselectAppointment time selector
ptn-healthhub-booking-typeselectAppointment type selector
ptn-healthhub-booking-reasontextareaAppointment reason input
ptn-healthhub-booking-submitbuttonBook appointment submit
ptn-healthhub-appointment-card-{id}divAppointment card (dynamic)
ptn-healthhub-appointment-cancel-{id}buttonCancel appointment (dynamic)
ptn-healthhub-filter-upcomingbuttonUpcoming appointments filter
ptn-healthhub-filter-pastbuttonPast appointments filter
ptn-healthhub-filter-allbuttonAll appointments filter
ptn-healthhub-filter-activebuttonActive prescriptions filter
ptn-healthhub-filter-completedbuttonCompleted lab results filter
ptn-healthhub-filter-processingbuttonProcessing lab results filter
ptn-healthhub-prescription-card-{id}divPrescription card (dynamic)
ptn-healthhub-prescription-refill-{id}buttonRefill prescription (dynamic)
ptn-healthhub-lab-result-card-{id}divLab result card (dynamic)
ptn-healthhub-new-messagebuttonNew message button
ptn-healthhub-message-subjectinputMessage subject input
ptn-healthhub-message-texttextareaMessage text input
ptn-healthhub-message-urgentinputUrgent message checkbox
ptn-healthhub-message-sendbuttonSend message button
ptn-healthhub-thread-{threadId}divMessage thread card (dynamic)
ptn-healthhub-patient-card-{mrn}divPatient card (dynamic)

32 test IDs

API Explorer

/app/api-explorer
Test IDElementPurpose
ptn-api-explorer-pagedivAPI Explorer main page
ptn-api-explorer-send-buttonbuttonSend API request button
ptn-api-explorer-response-statusspanResponse status badge
api-request-builderdivRequest builder container
api-request-methodselectHTTP method selector
api-request-urlinputRequest URL input
api-query-addbuttonAdd query parameter
api-query-toggle-{id}inputQuery parameter toggle (dynamic)
api-query-key-{id}inputQuery parameter key (dynamic)
api-query-value-{id}inputQuery parameter value (dynamic)
api-request-headersdivHeaders section
api-request-bodytextareaRequest body textarea
api-attach-auth-checkboxinputAttach auth token checkbox
api-response-viewersectionResponse viewer container
api-response-emptydivEmpty response message
api-response-clearbuttonClear response button
api-response-tab-{tab}buttonResponse tab (dynamic)
api-response-prettyprePretty-printed JSON response
api-response-rawpreRaw response display
api-response-headersdivResponse headers display
api-endpoint-sidebardivEndpoint sidebar
api-endpoint-searchinputEndpoint search input
api-endpoint-{service}-{endpoint}buttonEndpoint item (dynamic)
api-base-urlspanAPI base URL badge
api-automation-hintsdivAutomation hints card
api-onboarding-calloutdivOnboarding callout card
api-code-samplesdivCode samples container
api-code-tabsdivCode sample tabs
api-code-tab-{id}buttonCode sample tab (dynamic)
api-code-tab-restassuredbuttonRestAssured code tab
api-code-tab-curlbuttoncURL code tab
api-code-copybuttonCopy code button
api-code-copy-btnbuttonCopy button (alternate)
api-code-snippetpreCode snippet display
api-code-contentpreCode content display
api-method-badge-{method}spanHTTP method badge (dynamic)

36 test IDs

Practice Challenges

/practice-challenges/*
Test IDElementPurpose
position-zonedivPixel-perfect position zone
shifting-buttonbuttonPosition-shifting button
color-zonedivColor challenge zone
variable-textdivVariable text element
icon-zonedivIcon challenge zone
variable-iconspanVariable icon element
layout-zonedivLayout challenge zone
variable-carddivVariable card element
complex-zonedivComplex challenge zone
avatarimgAvatar image
complex-titleh3Complex title text
complex-buttonbuttonComplex button
timestamp-zonedivTimestamp challenge zone
dynamic-timestampspanDynamic timestamp
session-iddivSession ID display
last-updateddivLast updated timestamp
antialiasing-zonedivAntialiasing challenge zone
subtle-shadow-boxdivSubtle shadow box
fine-border-boxdivFine border box
gradient-boxdivGradient box
canvas-zonedivCanvas challenge zone
dynamic-canvascanvasDynamic canvas element
email-inputinputMock inbox email input
purpose-selectselectPurpose selector
delay-checkboxinputDelay checkbox
spam-checkboxinputSpam checkbox
send-otp-buttonbuttonSend OTP button
retrieve-otp-buttonbuttonRetrieve OTP button
otp-codedivOTP code display
otp-verify-inputinputOTP verification input
verify-otp-buttonbuttonVerify OTP button
verification-resultdivVerification result message
error-messagedivError message display
retry-counterdivRetry counter (flaky network)
test-no-retrybuttonTest no-retry button
test-with-retrybuttonTest with-retry button
test-custombuttonTest custom button
test-submitbuttonSubmit test button
loading-statedivLoading state indicator
success-resultdivSuccess result display
error-resultdivError result display
circuit-statusdivCircuit breaker status

42 test IDs

Chaos Mode

/app/chaos
Test IDElementPurpose
delayed-buttonbuttonButton with delayed visibility
shadow-hostdivShadow DOM host element
shadow-inputinputInput inside shadow DOM
stale-element-buttonbuttonStale element reference button
visible-submitbuttonVisibility-changing submit button
moving-targetbuttonMoving target button
test-scenario-{id}buttonTest scenario button (dynamic)
chaos-level-{level}buttonChaos level selector (dynamic)

8 test IDs

Admin Dashboard

/admin
Test IDElementPurpose
admin-dashboarddivAdmin dashboard page
dashboard-orders-snapshotdivOrders snapshot widget
order-snapshot-itemdivOrder snapshot item (multiple)
dashboard-notes-snapshotdivNotes snapshot widget
note-snapshot-itemdivNote snapshot item (multiple)
health-refresh-btnbuttonHealth check refresh button
health-statusdivHealth status display
shortcut-login-{userId}buttonQuick login shortcut (dynamic)
shortcut-test-scenariosbuttonTest scenarios shortcut
activity-filter-{type}buttonActivity filter button (dynamic)
activity-filter-searchinputActivity search input
activity-itemdivIndividual activity item (multiple)
activity-load-morebuttonLoad more activities button
quick-action-{id}buttonQuick action button (dynamic)
feature-flag-{id}buttonFeature flag toggle (dynamic)

15 test IDs

Usage Tips

  • Selector Strategy: Use data-testid as your primary selector.
    // Cypress
    cy.get('[data-testid="ptn-login-submit-button"]')
    // Playwright
    page.locator('[data-testid="ptn-login-submit-button"]')
    // Selenium (Java)
    driver.findElement(By.cssSelector("[data-testid='ptn-login-submit-button']"))
  • Stability Promise: Test IDs in this schema remain stable across minor updates. Breaking changes are documented with version bumps.
  • Multiple Instances: Elements like ptn-product-card, ptn-cart-item appear multiple times. Use getAllByTestId() or index-based selection.
  • Dynamic IDs: Entries with {id} are parameterized. The actual value is injected at runtime (e.g. ptn-note-card-abc123). Use partial selectors: [data-testid^="ptn-note-card-"].
  • Chaos Mode Resilience: In Chaos Mode, test IDs remain stable even when other attributes randomize — perfect for practicing resilient selector strategies.
  • Missing IDs? If you find an element without a test ID that should have one, please report it.
  • API Testing: For REST API automation, see the API Documentation and download the Postman Collection.