Skip to content

Unify page objects between arquillian and test-framework.#49814

Merged
stianst merged 1 commit into
keycloak:mainfrom
lhanusov:49087
Jul 20, 2026
Merged

Unify page objects between arquillian and test-framework.#49814
stianst merged 1 commit into
keycloak:mainfrom
lhanusov:49087

Conversation

@lhanusov

@lhanusov lhanusov commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Closes #49087

@lhanusov
lhanusov requested review from a team as code owners June 9, 2026 07:07
@lhanusov
lhanusov force-pushed the 49087 branch 5 times, most recently from d3f24bd to efedff6 Compare June 10, 2026 12:18
@stianst
stianst requested a review from Copilot June 11, 2026 04:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aims to unify page objects between the legacy Arquillian testsuite and the newer test framework by standardizing page detection/assertions (moving from scattered isCurrent()/title checks toward assertCurrent() based on data-page-id), and updating many tests accordingly.

Changes:

  • Refactors many page objects to expose getExpectedPageId() and rely on a common AbstractPage.assertCurrent() waiting strategy.
  • Updates a large set of Arquillian tests to use *.assertCurrent() instead of boolean isCurrent() assertions (and removes some legacy helpers like WaitUtils.waitUntilPageIsCurrent).
  • Introduces/expands usage of common page objects (e.g., AppPage, VerifyEmailPage) in several test classes.

Reviewed changes

Copilot reviewed 157 out of 157 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/webauthn/registration/WebAuthnOtherSettingsTest.java Update WebAuthn page assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/webauthn/registration/UserVerificationRegisterTest.java Replace isCurrent() assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/webauthn/registration/ResidentKeyRegisterTest.java Replace isCurrent() assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/webauthn/registration/PubKeySignRegisterTest.java Replace isCurrent() assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/webauthn/registration/PolicyJsInjectionTest.java Align login page assertion call
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/webauthn/registration/AuthAttachmentRegisterTest.java Remove legacy wait helper usage
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/webauthn/registration/AttestationConveyanceRegisterTest.java Replace isCurrent() checks
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/webauthn/passwordless/PasskeysKcOidcFirstBrokerLoginTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/webauthn/AbstractWebAuthnVirtualTest.java Adjust login page assertion usage
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/TestAppHelper.java Change login helpers to void + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/member/OrganizationMemberTest.java Switch login open flow to oauth.realm/openLoginForm
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/mapper/OrganizationGroupOidcIdpMapperTest.java Switch login open flow to oauth.realm/openLoginForm
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/broker/OrganizationPostBrokerLoginTest.java Switch login open flow to oauth.realm/openLoginForm
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/broker/AbstractBrokerSelfRegistrationTest.java Switch login open flow to oauth.realm/openLoginForm
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/authentication/OrganizationAuthenticationTest.java Switch login open flow + assertion updates
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/admin/OrganizationThemeTest.java Switch login open flow + assertion updates
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/admin/OrganizationInvitationLinkTest.java Replace page isCurrent() checks
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/admin/AbstractOrganizationTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oidc/UserInfoTest.java Add AppPage and assert it on success
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oidc/OIDCAdvancedRequestParamsTest.java Replace isCurrent() assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oidc/flows/AbstractOIDCResponseTypeTest.java Replace isCurrent() assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oidc/AuthenticationMethodReferenceTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oidc/AcrAuthFlowTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/TokenRevocationTest.java Replace conditional isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/TokenIntrospectionTest.java Add AppPage and assert it on success
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/RPInitiatedLogoutTest.java Replace isCurrent() assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OAuthRedirectUriTest.java Replace isCurrent() assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/LogoutTest.java Add AppPage and assert it on success
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/AuthorizationCodeTest.java Replace error page isCurrent() checks
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/ResetOtpTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/MultiFactorAuthenticationTest.java Replace isCurrent() checks in MFA flows
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/LoginTotpTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/LoginTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/LoginHotpTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/LevelOfAssuranceFlowTest.java Remove legacy waits + use assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/CustomFlowTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/BruteForceTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/BrowserFlowTest.java Use AppPage + update flow assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/AltSubflowForCredentialResetTest.java Replace isCurrent() assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/storage/UserStorageFailureTest.java Assert AppPage on successful login
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/storage/BackwardsCompatibilityUserStorageTest.java Adjust for TestAppHelper signature changes
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/UserStorageGracefulDegradationLdapTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPReadOnlyTest.java Replace isCurrent() with assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/kerberos/KerberosStandaloneCrossRealmTrustTest.java Adjust for TestAppHelper signature changes
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/kerberos/KerberosLdapTest.java Adjust for TestAppHelper signature changes
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/kerberos/KerberosLdapCrossRealmTrustTest.java Adjust for TestAppHelper signature changes
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/kerberos/AbstractKerberosSingleRealmTest.java Adjust for TestAppHelper signature changes
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/cluster/AbstractFailoverClusterTest.java Replace isCurrent() assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/client/policies/SecureRedirectUrisEnforcerExecutorTest.java Replace error page isCurrent() check
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/client/policies/ClientPoliciesTest.java Replace error page isCurrent() check
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/client/policies/ClientPoliciesExtendedEventTest.java Replace error page isCurrent() check
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/client/policies/ClientPoliciesExecutorTest.java Update error message assertion + assertCurrent()
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/client/OAuth2_1PublicClientTest.java Replace error page isCurrent() check
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/client/OAuth2_1ConfidentialClientTest.java Replace error page isCurrent() check
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/OAuth2BrokerTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcSamlUsernameTemplateMapperTest.java Replace isCurrent() checks in mapper tests
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcSamlMultipleTabsBrokerTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcSamlIdPInitiatedSsoTest.java Replace isCurrent() checks
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcSamlBrokerTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcSamlBrokerLoginHintWithOptionEnabledTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcSamlBrokerArtifactBindingTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcPostBrokerLoginTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcMultipleTabsBrokerTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginNewAuthTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginDetectExistingUserTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOIDCBrokerWithSignatureTest.java Assert AppPage on success
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerWithConsentTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerUiLocalesWithIdpHintTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerUiLocalesEnabledTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerUiLocalesDisabledTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerTransientSessionsTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerSubMatchIntrospectionTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerStateParameterTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerPromptParameterTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerPromptNoneRedirectTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerPassMaxAgeTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerParameterForwardTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerNoLoginHintTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerLogoutTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerLogoutFrontChannelTest.java Formatting + switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerLoginHintTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerLdapTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerLdapReadOnlyTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerIdpLinkActionTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerIdpHintTest.java Switch login open flow + assertions
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerHiddenIdpHintTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerEventTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcBrokerAcrParameterTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcCustomOidcBrokerTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractUsernameTemplateMapperTest.java Replace isCurrent() checks
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractSamlLoginHintTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractNestedBrokerTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractDefaultIdpTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractBrokerTest.java Switch login open flow
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractBaseBrokerTest.java Switch login open flow + page-id logic
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractAdvancedBrokerTest.java Switch login open flow + assertion updates
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/TermsAndConditionsTest.java Replace isCurrent() checks
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/RequiredActionUpdateEmailTestWithVerificationTest.java Add VerifyEmailPage + assertion updates
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/RequiredActionTotpSetupTest.java Replace isCurrent() checks
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/RequiredActionPriorityTest.java Align login page assertion call
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/RequiredActionMultipleActionsTest.java Replace branchy isCurrent() checks
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/DeleteAccountActionTest.java Replace error page isCurrent() check
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/AppInitiatedActionTotpSetupTest.java Replace isCurrent() + improve assertThrows usage
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/AppInitiatedActionTest.java Replace isCurrent() checks
testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/custom/CustomAuthFlowOTPTest.java Replace isCurrent() checks
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/webauthn/pages/WebAuthnRegisterPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/webauthn/pages/WebAuthnLoginPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/webauthn/pages/WebAuthnErrorPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/WaitUtils.java Remove legacy page wait helper
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/util/UIUtils.java Make back-navigation always refresh
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/x509/X509IdentityConfirmationPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/VerifyProfilePage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/VerifyEmailPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/UpdateAccountInformationPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/TermsAndConditionsPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/SetupRecoveryAuthnCodesPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/SelectOrganizationPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/SelectAuthenticatorPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/ResetOtpPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/RegisterPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/PushTheButtonPage.java Custom assertCurrent() + page-id placeholder
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/ProceedPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/PasswordPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/PageUtils.java Deprecate legacy page title helper
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/OAuthGrantPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/OAuth2DeviceVerificationPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LogoutSessionsPage.java Deprecate legacy abstract page
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LogoutConfirmPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginUsernameOnlyPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginUpdateProfilePage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginUpdateProfileEditUsernameAllowedPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginTotpPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginPasswordUpdatePage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginPasswordResetPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginPage.java Remove legacy realm-specific open/assert logic
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginExpiredPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LoginConfigTotpPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/LanguageComboboxAwarePage.java Deprecate legacy abstract page
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/InstalledAppRedirectPage.java Implement getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/InfoPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/IdpLinkEmailPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/IdpLinkActionPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/IdpConfirmOverrideLinkPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/IdpConfirmLinkPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/ErrorPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/EnterRecoveryAuthnCodePage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/EmailUpdatePage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/DeleteCredentialPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/ConsentPage.java Switch to getExpectedPageId()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/AppPage.java Deprecate + custom assertCurrent()
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/AbstractPage.java Centralize assertCurrent() waiting by data-page-id
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/auth/page/login/UpdateEmailPage.java Switch to getExpectedPageId()

Comment on lines 43 to 51
@Override
public boolean isCurrent() {
return removeDefaultPorts(DroneUtils.getCurrentDriver().getCurrentUrl()).startsWith(OAuthClient.APP_AUTH_ROOT);
public void assertCurrent() {
driver.getTitle().equals(RequestType.AUTH_RESPONSE);
}

@Override
public String getExpectedPageId() {
return null;
}
Comment on lines 36 to 44
@Override
public boolean isCurrent() {
return DroneUtils.getCurrentDriver().getTitle().equals("PushTheButton")
&& !driver.findElements(By.name("submit1")).isEmpty();
public void assertCurrent() {
driver.getTitle().equals("PushTheButton");
}

@Override
public String getExpectedPageId() {
return null;
}
Comment on lines +57 to +64
private void waitForPage(AbstractPage page) {
String expectedPageId = page.getExpectedPageId();
try {
createDefaultWait().ignoring(StaleElementReferenceException.class).until(d -> expectedPageId.equals(getCurrentPageId()));
} catch (TimeoutException e) {
Assertions.fail("Expected page '" + expectedPageId + "' to be loaded, but currently on page '" + getCurrentPageId() + "' after timeout");
}
}
Comment on lines 275 to 280
// Send request with prompt=none
oauth.loginForm().prompt("none").open();

assertFalse(loginPage.isCurrent());
assertTrue(appPage.isCurrent());
loginPage.assertCurrent();
appPage.assertCurrent();

Comment on lines 907 to 910
oauth.loginForm().requestUri(loginRequestUri).open();
Assertions.assertFalse(errorPage.isCurrent());
errorPage.assertCurrent();
loginPage.assertCurrent();

Comment on lines 154 to 158
webAuthnRegisterPage.assertCurrent();
webAuthnRegisterPage.clickRegister();

assertThat(webAuthnErrorPage.isCurrent(), is(false));
webAuthnErrorPage.assertCurrent();
}
Comment on lines 241 to 248
return passwordPage.isCurrent();
appPage.assertCurrent();
return true;
}
Comment on lines 238 to 242
passwordPage.login(getPassword("user-with-one-configured-otp"));

Assertions.assertFalse(passwordPage.isCurrent());
Assertions.assertFalse(loginPage.isCurrent());
passwordPage.assertCurrent();
loginPage.assertCurrent();
EventAssertion.expectLoginSuccess(events.poll()).userId(managedRealm.admin().users().search("user-with-one-configured-otp").get(0).getId())
Comment on lines 285 to 288
// Successfully login with OTP
loginTotpPage.login(new TimeBasedOTP().generateTOTP("DJmQfC73VGFhw7D4QJ8A"));
Assertions.assertFalse(loginTotpPage.isCurrent());
loginTotpPage.assertCurrent();
EventAssertion.expectLoginSuccess(events.poll()).userId(managedRealm.admin().users().search("user-with-one-configured-otp").get(0).getId())
Comment on lines 123 to 126
// now provide a username and verify the user is created
updateAccountInformationPage.updateAccountInformation("valid-username", "user@example.com", "John", "Doe");
Assertions.assertFalse(updateAccountInformationPage.isCurrent(), "Should not be on update profile page");
updateAccountInformationPage.assertCurrent();

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 237 out of 238 changed files in this pull request and generated 8 comments.

Comment on lines +112 to +113
registerDefaultUser(shouldSuccess);

displayErrorMessageIfPresent();

assertThat(webAuthnErrorPage.isCurrent(), is(!shouldSuccess));
webAuthnErrorPage.assertCurrent();
Comment on lines 91 to 95
registerDefaultUser(shouldSuccess);

displayErrorMessageIfPresent();

webAuthnErrorPage.assertCurrent();
if (!shouldSuccess) {
assertThat(webAuthnErrorPage.isCurrent(), is(true));
return;
} else {
assertThat(webAuthnErrorPage.isCurrent(), is(false));
}
Comment on lines 100 to 103
registerDefaultUser(shouldSuccess);

assertThat(webAuthnErrorPage.isCurrent(), is(!shouldSuccess));
webAuthnErrorPage.assertCurrent();
if (!shouldSuccess) {
Comment on lines 105 to 107
registerDefaultUser(shouldSuccess);

displayErrorMessageIfPresent();

assertThat(webAuthnErrorPage.isCurrent(), is(!shouldSuccess));
webAuthnErrorPage.assertCurrent();
} catch (IOException e) {
Comment on lines 57 to 59
registerDefaultUser();
displayErrorMessageIfPresent();
webAuthnErrorPage.assertCurrent();

Comment on lines 146 to 148
registerDefaultUser(shouldSuccess);
displayErrorMessageIfPresent();

final boolean isErrorCurrent = webAuthnErrorPage.isCurrent();
assertThat(isErrorCurrent, is(!shouldSuccess));
webAuthnErrorPage.assertCurrent();

Comment on lines 151 to 155
webAuthnRegisterPage.assertCurrent();
webAuthnRegisterPage.clickRegister();

assertThat(webAuthnErrorPage.isCurrent(), is(false));
Assertions.assertTrue(oauth.parseLoginResponse().isSuccess());
}
Comment on lines 108 to 113
logInWithIdp(bc.getIDPAlias(), username, BrokerTestConstants.USER_PASSWORD);

loginPage.assertCurrent(bc.consumerRealmName());
errorPage.assertCurrent();

assertEquals("User " + username + " authenticated with identity provider " + bc.getIDPAlias() + " does not exist. Please contact your administrator.", loginPage.getInstruction());
}

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 237 out of 238 changed files in this pull request and generated 10 comments.

Comment on lines +58 to +60
String expectedPageId = page.getExpectedPageId();
try {
createDefaultWait().ignoring(StaleElementReferenceException.class).until(d -> expectedPageId.equals(getCurrentPageId()));
Comment on lines +112 to +113
registerDefaultUser(shouldSuccess);

displayErrorMessageIfPresent();

assertThat(webAuthnErrorPage.isCurrent(), is(!shouldSuccess));
webAuthnErrorPage.assertCurrent();
Comment on lines 91 to 95
registerDefaultUser(shouldSuccess);

displayErrorMessageIfPresent();

webAuthnErrorPage.assertCurrent();
if (!shouldSuccess) {
assertThat(webAuthnErrorPage.isCurrent(), is(true));
return;
} else {
assertThat(webAuthnErrorPage.isCurrent(), is(false));
}
Comment on lines 100 to 103
registerDefaultUser(shouldSuccess);

assertThat(webAuthnErrorPage.isCurrent(), is(!shouldSuccess));
webAuthnErrorPage.assertCurrent();
if (!shouldSuccess) {
Comment on lines +105 to +106
registerDefaultUser(shouldSuccess);

displayErrorMessageIfPresent();

assertThat(webAuthnErrorPage.isCurrent(), is(!shouldSuccess));
webAuthnErrorPage.assertCurrent();
Comment on lines 57 to 59
registerDefaultUser();
displayErrorMessageIfPresent();
webAuthnErrorPage.assertCurrent();

Comment on lines 146 to 148
registerDefaultUser(shouldSuccess);
displayErrorMessageIfPresent();

final boolean isErrorCurrent = webAuthnErrorPage.isCurrent();
assertThat(isErrorCurrent, is(!shouldSuccess));
webAuthnErrorPage.assertCurrent();


assertFalse(loginPage.isCurrent());
assertTrue(appPage.isCurrent());
Assertions.assertTrue(oauth.parseLoginResponse().isSuccess());

protected void assertRedirectedToClientWithError(String expectedError, String expectedErrorDescription) {
appPage.assertCurrent();
Assertions.assertTrue(oauth.parseLoginResponse().isSuccess());
logInWithIdp(bc.getIDPAlias(), username, BrokerTestConstants.USER_PASSWORD);

loginPage.assertCurrent(bc.consumerRealmName());
errorPage.assertCurrent();

@keycloak-github-bot keycloak-github-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unreported flaky test detected, please review

@keycloak-github-bot keycloak-github-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unreported flaky test detected, please review

@keycloak-github-bot

Copy link
Copy Markdown

Unreported flaky test detected

If the flaky tests below are affected by the changes, please review and update the changes accordingly. Otherwise, a maintainer should report the flaky tests prior to merging the PR.

org.keycloak.testsuite.forms.MultipleTabsLoginTest#multipleTabsParallelLoginTestWithAuthSessionExpiredAndRefreshInTab1

Keycloak CI - Forms IT (chrome)

org.opentest4j.AssertionFailedError: expected: <true> but was: <false>
	at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
	at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
	at org.junit.jupiter.api.AssertTrue.failNotTrue(AssertTrue.java:63)
	at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:36)
...

Report flaky test

Copilot AI review requested due to automatic review settings July 17, 2026 11:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 251 out of 252 changed files in this pull request and generated 10 comments.

Comment on lines 42 to 43
startLogin(username, password);

if (loginPage.isCurrent()) {
return false;
}

completeLogin();
Comment on lines 112 to +115
registerDefaultUser(shouldSuccess);

displayErrorMessageIfPresent();

assertThat(webAuthnErrorPage.isCurrent(), is(!shouldSuccess));
if (!oauth.parseLoginResponse().isSuccess()) {
webAuthnErrorPage.assertCurrent();
}
Comment on lines 91 to 95
registerDefaultUser(shouldSuccess);

displayErrorMessageIfPresent();

if (!shouldSuccess) {
assertThat(webAuthnErrorPage.isCurrent(), is(true));
if (!oauth.parseLoginResponse().isSuccess()) {
webAuthnErrorPage.assertCurrent();
return;
} else {
assertThat(webAuthnErrorPage.isCurrent(), is(false));
}
webAuthnRegisterPage.clickRegister();

assertThat(webAuthnErrorPage.isCurrent(), is(false));
webAuthnErrorPage.assertCurrent();
Comment on lines +145 to 146
oauth.openLoginForm();
loginPage.login("test-user@localhost", "password");
Comment on lines +160 to 161
oauth.openLoginForm();
loginPage.login("test-user@localhost", "password");
Comment on lines +184 to 185
oauth.openLoginForm();
loginPage.login("test-user@localhost", "password");
if (!expectedPage.isCurrent() && BrowserDriverUtil.isDriverChrome(driver)) {
driver.navigate().refresh();
}
driver.navigate().refresh();
Comment on lines +33 to 34

private PasswordErrors inputErrors;
Comment on lines +35 to 36

private AccountErrors inputErrors;
@keycloak-github-bot

Copy link
Copy Markdown

Unreported flaky test detected

If the flaky tests below are affected by the changes, please review and update the changes accordingly. Otherwise, a maintainer should report the flaky tests prior to merging the PR.

org.keycloak.testsuite.forms.MultipleTabsLoginTest#multipleTabsParallelLoginTest

Keycloak CI - Forms IT (firefox)

org.opentest4j.AssertionFailedError: expected: <true> but was: <false>
	at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
	at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
	at org.junit.jupiter.api.AssertTrue.failNotTrue(AssertTrue.java:63)
	at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:36)
...

Report flaky test

@keycloak-github-bot keycloak-github-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unreported flaky test detected, please review

Signed-off-by: Lukas Hanusovsky <lhanusov@redhat.com>
Copilot AI review requested due to automatic review settings July 17, 2026 15:49

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 251 out of 252 changed files in this pull request and generated 7 comments.

return false;
}

completeLogin();
return false;
}

completeLogin();
Comment on lines +113 to +115
if (!oauth.parseLoginResponse().isSuccess()) {
webAuthnErrorPage.assertCurrent();
}
Comment on lines +92 to 95
if (!oauth.parseLoginResponse().isSuccess()) {
webAuthnErrorPage.assertCurrent();
return;
} else {
assertThat(webAuthnErrorPage.isCurrent(), is(false));
}
Comment on lines +145 to 146
oauth.openLoginForm();
loginPage.login("test-user@localhost", "password");
Comment on lines +160 to 161
oauth.openLoginForm();
loginPage.login("test-user@localhost", "password");
Comment on lines +184 to 185
oauth.openLoginForm();
loginPage.login("test-user@localhost", "password");
@keycloak-github-bot

Copy link
Copy Markdown

Unreported flaky test detected

If the flaky tests below are affected by the changes, please review and update the changes accordingly. Otherwise, a maintainer should report the flaky tests prior to merging the PR.

org.keycloak.testsuite.forms.BrowserFlowTest#testUserWithOneAdditionalFactorOtpSuccess

Keycloak CI - Base IT (5)

org.opentest4j.AssertionFailedError: expected: <true> but was: <false>
	at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
	at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
	at org.junit.jupiter.api.AssertTrue.failNotTrue(AssertTrue.java:63)
	at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:36)
...

Report flaky test

org.keycloak.testsuite.forms.MultipleTabsLoginTest#testEmptyBaseUrl

Keycloak CI - Forms IT (firefox)

org.opentest4j.AssertionFailedError: expected: <true> but was: <false>
	at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
	at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
	at org.junit.jupiter.api.AssertTrue.failNotTrue(AssertTrue.java:63)
	at org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:36)
...

Report flaky test

@keycloak-github-bot keycloak-github-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unreported flaky test detected, please review

@stianst
stianst merged commit 1aec8bf into keycloak:main Jul 20, 2026
89 of 91 checks passed
This was referenced Jul 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Review and unify page objects between old and new test frameworks

4 participants