diff --git a/java/src/org/openqa/selenium/federatedcredentialmanagement/FederatedCredentialManagementDialog.java b/java/src/org/openqa/selenium/federatedcredentialmanagement/FederatedCredentialManagementDialog.java index 45478d1f618f3..0e915b02aef44 100644 --- a/java/src/org/openqa/selenium/federatedcredentialmanagement/FederatedCredentialManagementDialog.java +++ b/java/src/org/openqa/selenium/federatedcredentialmanagement/FederatedCredentialManagementDialog.java @@ -29,6 +29,11 @@ public interface FederatedCredentialManagementDialog { String DIALOG_TYPE_ACCOUNT_LIST = "AccountChooser"; String DIALOG_TYPE_AUTO_REAUTH = "AutoReauthn"; + String BUTTON_CONFIRM_IDP_LOGIN_CONTINUE = "ConfirmIdpLoginContinue"; + // The following buttons need an account index. + String BUTTON_TERMS_OF_SERVICE = "TermsOfService"; + String BUTTON_PRIVACY_POLICY = "PrivacyPolicy"; + /** Closes the dialog as if the user had clicked X. */ void cancelDialog(); @@ -60,4 +65,19 @@ public interface FederatedCredentialManagementDialog { *

If this is an auto reauth dialog, returns the single account that is being signed in. */ List getAccounts(); + + /** + * Clicks a button on the dialog. + * + * @param button The button to click. + */ + void clickButton(String button); + + /** + * Clicks a button on the dialog that requires an account index. + * + * @param button The button to click. + * @param index The account index, if needed by the specified button. + */ + void clickButton(String button, int index); } diff --git a/java/src/org/openqa/selenium/remote/FedCmDialogImpl.java b/java/src/org/openqa/selenium/remote/FedCmDialogImpl.java index 59e832f84e367..9f218f99fbd82 100644 --- a/java/src/org/openqa/selenium/remote/FedCmDialogImpl.java +++ b/java/src/org/openqa/selenium/remote/FedCmDialogImpl.java @@ -76,4 +76,15 @@ public List getAccounts() { } return accounts; } + + @Override + public void clickButton(String button) { + executeMethod.execute(DriverCommand.CLICK_DIALOG, Map.of("dialogButton", button)); + } + + @Override + public void clickButton(String button, int index) { + executeMethod.execute( + DriverCommand.CLICK_DIALOG, Map.of("dialogButton", button, "index", index)); + } } diff --git a/java/test/org/openqa/selenium/federatedcredentialmanagement/FederatedCredentialManagementTest.java b/java/test/org/openqa/selenium/federatedcredentialmanagement/FederatedCredentialManagementTest.java index ee9a6658cd338..070206c3c7f35 100644 --- a/java/test/org/openqa/selenium/federatedcredentialmanagement/FederatedCredentialManagementTest.java +++ b/java/test/org/openqa/selenium/federatedcredentialmanagement/FederatedCredentialManagementTest.java @@ -176,4 +176,33 @@ void testGetAccounts() { .isEqualTo("https://rp.example/terms_of_service.html"); assertThat(account2.getPrivacyPolicyUrl()).isEqualTo("https://rp.example/privacy_policy.html"); } + + @Test + @NotYetImplemented( + value = CHROME, + reason = "https://github.com/SeleniumHQ/selenium/pull/12096#issuecomment-2017760822") + void testClickDialogButton() { + fedcmDriver.setDelayEnabled(false); + assertNull(fedcmDriver.getFederatedCredentialManagementDialog()); + + Object response = triggerFedCm(); + + waitForDialog(); + + FederatedCredentialManagementDialog dialog = + fedcmDriver.getFederatedCredentialManagementDialog(); + + assertEquals("Sign in to localhost with localhost", dialog.getTitle()); + assertEquals("AccountChooser", dialog.getDialogType()); + + int windowCount = localDriver.getWindowHandles().size(); + dialog.clickButton(dialog.BUTTON_PRIVACY_POLICY, 1); + WebDriverWait wait = new WebDriverWait(localDriver, Duration.ofSeconds(5)); + wait.until(driver -> driver.getWindowHandles().size() > windowCount); + + dialog.selectAccount(0); + + response = jsAwareDriver.executeScript("return await promise"); + assertThat(response).asInstanceOf(MAP).containsEntry("token", "a token"); + } }