LOGIN — standard password
Plain
input[type="password"].LOGIN — new-password
Same selector match with signup attributes.
LOGIN — type="text"
Doesn't match the LOGIN selector.
LOGIN — display:none on the input
Field exists in the DOM but is not rendered.
LOGIN — visibility:hidden on the input
Caught by
visibilityProperty:true.LOGIN — opacity:0 on the input
Caught by
checkOpacity:true.LOGIN — disabled
Filtered by the explicit
!el.disabled guard.LOGIN — hidden attribute
UA stylesheet sets
display:none.LOGIN — ancestor has display:none
Wrapper, not the input, is hidden.
MFA — autocomplete="one-time-code"
MFA — split-digit (type=text, inputmode=numeric, maxlength=1)
MFA — split-digit (type=tel, inputmode=numeric)
MFA — split-digit (type=number)
MFA — maxlength=6 numeric (no keyword)
Doesn't match split-digit (maxlength != 1) and has no MFA keyword.
MFA — id contains "OTP" (case-insensitive)
MFA — name="mfaCode"
MFA — placeholder contains "2fa"
MFA — aria-label contains "verification"
MFA — display:none
MFA — visibility:hidden
MFA — opacity:0
MFA — disabled
MFA — hidden attribute
MFA — ancestor has display:none
Off-viewport — field is below the fold
A spacer pushes the field below the viewport. The detector doesn't filter
by viewport position, only by CSS visibility.
Scrollable container — field inside overflow:auto
Field lives in a scrollable inner container. Scroll inside the box to
reveal it.