public static void PerformLogin(this IWebDriver driver, LabUser user, Prompt prompt, bool withLoginHint = false) { UserInformationFieldIds fields = new UserInformationFieldIds(user); if (!withLoginHint) { Trace.WriteLine("Logging in ... Entering username"); driver.FindElement(By.Id(fields.AADUsernameInputId)).SendKeys(user.Upn); Trace.WriteLine("Logging in ... Clicking <Next> after username"); driver.FindElement(By.Id(fields.AADSignInButtonId)).Click(); } if (user.FederationProvider == FederationProvider.AdfsV2) { Trace.WriteLine("Logging in ... AFDSv2 - Entering the username again, this time in the ADFSv2 form"); driver.FindElement(By.Id(CoreUiTestConstants.AdfsV2WebUsernameInputId)).SendKeys(user.Upn); } Trace.WriteLine("Logging in ... Entering password"); driver.WaitForElementToBeVisibleAndEnabled(By.Id(fields.PasswordInputId)).SendKeys(user.GetOrFetchPassword()); Trace.WriteLine("Logging in ... Clicking next after password"); driver.WaitForElementToBeVisibleAndEnabled(By.Id(fields.PasswordSignInButtonId)).Click(); if (prompt == Prompt.Consent) { Trace.WriteLine("Consenting..."); driver.WaitForElementToBeVisibleAndEnabled(By.Id(fields.AADSignInButtonId)).Click(); } }
private static void HandleConsent(IWebDriver driver, LabUser user, UserInformationFieldIds fields, Prompt prompt) { // For MSA, a special consent screen seems to come up every now and then if (user.Upn.Contains("outlook.com")) { try { Trace.WriteLine("Finding accept prompt"); var acceptBtn = driver.WaitForElementToBeVisibleAndEnabled( ByIds(CoreUiTestConstants.ConsentAcceptId, fields.AADSignInButtonId), waitTime: ShortExplicitTimespan, ignoreFailures: true); acceptBtn?.Click(); } catch { Trace.WriteLine("No accept prompt found accept prompt"); } } if (prompt == Prompt.Consent) { Trace.WriteLine("Consenting..."); driver.WaitForElementToBeVisibleAndEnabled(By.Id(fields.AADSignInButtonId)).Click(); } }
private void RunAutomatedDeviceCodeFlow(DeviceCodeResult deviceCodeResult, LabUser user, bool isAdfs = false) { try { var fields = new UserInformationFieldIds(user); Trace.WriteLine("Browser is open. Navigating to the Device Code url and entering the code"); string codeId = isAdfs ? "userCodeInput" : "code"; string continueId = isAdfs ? "confirmationButton" : "continueBtn"; _seleniumDriver.Navigate().GoToUrl(deviceCodeResult.VerificationUrl); _seleniumDriver // Device Code Flow web ui is undergoing A/B testing and is sometimes different - use 2 IDs .FindElement(SeleniumExtensions.ByIds("otc", codeId)) .SendKeys(deviceCodeResult.UserCode); IWebElement continueBtn = _seleniumDriver.WaitForElementToBeVisibleAndEnabled( SeleniumExtensions.ByIds(fields.AADSignInButtonId, continueId)); continueBtn?.Click(); _seleniumDriver.PerformLogin(user, Prompt.SelectAccount, isAdfs); Trace.WriteLine("Authentication complete"); } catch (Exception ex) { Trace.WriteLine("Browser automation failed " + ex); _seleniumDriver.SaveScreenshot(TestContext); throw; } }
public void PerformB2CSignInFlow(ITestController controller, LabUser user, B2CIdentityProvider b2CIdentityProvider, bool isB2CLoginAuthority) { SetB2CAuthority(controller, true); UserInformationFieldIds userInformationFieldIds = CoreMobileTestHelper.DetermineUserInformationFieldIds(user); controller.Tap(CoreUiTestConstants.AcquirePageID); //Acquire token flow controller.Tap(CoreUiTestConstants.AcquireTokenID); switch (b2CIdentityProvider) { case B2CIdentityProvider.Local: PerformB2CLocalAccountSignInFlow(controller, user, userInformationFieldIds); break; case B2CIdentityProvider.Google: PerformB2CGoogleProviderSignInFlow(controller, user, userInformationFieldIds); break; case B2CIdentityProvider.Facebook: PerformB2CFacebookProviderSignInFlow(controller, user, userInformationFieldIds); break; default: throw new InvalidOperationException("B2CIdentityProvider unknown"); } CoreMobileTestHelper.VerifyResult(controller); }
public static void PerformLogin(this IWebDriver driver, LabUser user, Prompt prompt, bool withLoginHint = false, bool adfsOnly = false) { UserInformationFieldIds fields = new UserInformationFieldIds(user); EnterUsername(driver, user, withLoginHint, adfsOnly, fields); EnterPassword(driver, user, fields); HandleConsent(driver, user, fields, prompt); }
private static void PerformLogin( IWebDriver driver, LabUser user) { UserInformationFieldIds fields = new UserInformationFieldIds(); EnterUsername(driver, user, fields); EnterPassword(driver, user, fields); HandleStaySignedInPrompt(driver); }
public static void PerformLogin(this IWebDriver driver, LabUser user, Prompt prompt, bool withLoginHint = false, bool adfsOnly = false) { UserInformationFieldIds fields = new UserInformationFieldIds(user); if (adfsOnly && !withLoginHint) { Trace.WriteLine("Logging in ... Entering username"); driver.FindElement(By.Id(CoreUiTestConstants.AdfsV4UsernameInputdId)).SendKeys(user.Upn); } else { if (!withLoginHint) { Trace.WriteLine("Logging in ... Entering username"); driver.FindElementById(fields.AADUsernameInputId).SendKeys(user.Upn.Contains("EXT") ? user.HomeUPN : user.Upn); Trace.WriteLine("Logging in ... Clicking <Next> after username"); driver.FindElementById(fields.AADSignInButtonId).Click(); try { driver.FindElementById(fields.AADSignInButtonId).Click(); Trace.WriteLine("Yes, workaround ok"); } catch { Trace.WriteLine("No, workaround failed"); } } if (user.FederationProvider == FederationProvider.AdfsV2 && user.IsFederated) { Trace.WriteLine("Logging in ... AFDSv2 - Entering the username again, this time in the ADFSv2 form"); driver.FindElementById(CoreUiTestConstants.AdfsV2WebUsernameInputId).SendKeys(user.Upn); } } Trace.WriteLine("Logging in ... Entering password"); driver.WaitForElementToBeVisibleAndEnabled(By.Id(fields.GetPasswordInputId())).SendKeys(user.GetOrFetchPassword()); Trace.WriteLine("Logging in ... Clicking next after password"); driver.WaitForElementToBeVisibleAndEnabled(By.Id(fields.GetPasswordSignInButtonId())).Click(); if (user.HomeUPN.Contains("outlook.com")) { Trace.WriteLine("Logging in ... clicking accept prompts for outlook.com MSA user"); driver.WaitForElementToBeVisibleAndEnabled(By.Id(CoreUiTestConstants.ConsentAcceptId)).Click(); } if (prompt == Prompt.Consent) { Trace.WriteLine("Consenting..."); driver.WaitForElementToBeVisibleAndEnabled(By.Id(fields.AADSignInButtonId)).Click(); } }
private static void EnterPassword(IWebDriver driver, LabUser user, UserInformationFieldIds fields) { Trace.WriteLine("Logging in ... Entering password"); string password = user.GetOrFetchPassword(); string passwordField = fields.GetPasswordInputId(); driver.WaitForElementToBeVisibleAndEnabled(By.Id(passwordField)).SendKeys(password); Trace.WriteLine("Logging in ... Clicking next after password"); driver.WaitForElementToBeVisibleAndEnabled(By.Id(fields.GetPasswordSignInButtonId())).Click(); }
private static void EnterUsername( IWebDriver driver, LabUser user, UserInformationFieldIds fields) { // Lab user needs to be a guest in the msidentity-samples-testing tenant Trace.WriteLine(string.Format(CultureInfo.InvariantCulture, "Logging in ... Entering user name: {0}", user.Upn)); driver.FindElement(By.Id(fields.AADUsernameInputId)).SendKeys(user.Upn.Contains("EXT", System.StringComparison.OrdinalIgnoreCase) ? user.HomeUPN : user.Upn); Trace.WriteLine("Logging in ... Clicking <Next> after user name"); driver.FindElement(By.Id(fields.AADSignInButtonId)).Click(); }
public static void PerformLogin(this IWebDriver driver, LabUser user, Prompt prompt, bool withLoginHint = false, bool adfsOnly = false) { UserInformationFieldIds fields = new UserInformationFieldIds(user); EnterUsername(driver, user, withLoginHint, adfsOnly, fields); EnterPassword(driver, user, fields); if (user.Upn.Contains("outlook.com")) { Trace.WriteLine("Logging in ... clicking accept prompts for outlook.com MSA user"); driver.WaitForElementToBeVisibleAndEnabled(By.Id(CoreUiTestConstants.ConsentAcceptId)).Click(); } if (prompt == Prompt.Consent) { Trace.WriteLine("Consenting..."); driver.WaitForElementToBeVisibleAndEnabled(By.Id(fields.AADSignInButtonId)).Click(); } }
private void PerformLogin(LabUser user) { UserInformationFieldIds fields = new UserInformationFieldIds(); fields.DetermineFieldIds(user); IWebDriver driver = _seleniumWrapper.Driver; Trace.WriteLine("Logging in ... Entering username"); driver.FindElement(By.Id(CoreUiTestConstants.WebUPNInputID)).SendKeys(user.Upn); Trace.WriteLine("Logging in ... Clicking next after username"); driver.FindElement(By.Id(fields.SignInButtonId)).Click(); Trace.WriteLine("Logging in ... Entering password"); _seleniumWrapper.WaitForElementToBeVisibleAndEnabled(By.Id(fields.PasswordInputId)).SendKeys(user.Password); Trace.WriteLine("Logging in ... Clicking next after password"); _seleniumWrapper.WaitForElementToBeVisibleAndEnabled(By.Id(fields.SignInButtonId)).Click(); }
public static void PerformDeviceCodeLogin( DeviceCodeResult deviceCodeResult, LabUser user, TestContext testContext, bool isAdfs = false) { using (var seleniumDriver = CreateDefaultWebDriver()) { try { var fields = new UserInformationFieldIds(user); Trace.WriteLine("Browser is open. Navigating to the Device Code url and entering the code"); string codeId = isAdfs ? "userCodeInput" : "code"; string continueId = isAdfs ? "confirmationButton" : "continueBtn"; seleniumDriver.Navigate().GoToUrl(deviceCodeResult.VerificationUrl); seleniumDriver // Device Code Flow web ui is undergoing A/B testing and is sometimes different - use 2 IDs .FindElement(SeleniumExtensions.ByIds("otc", codeId)) .SendKeys(deviceCodeResult.UserCode); IWebElement continueBtn = seleniumDriver.WaitForElementToBeVisibleAndEnabled( SeleniumExtensions.ByIds(fields.AADSignInButtonId, continueId)); continueBtn?.Click(); seleniumDriver.PerformLogin(user, Prompt.SelectAccount, false, isAdfs); Thread.Sleep(1000); // allow the browser to redirect seleniumDriver?.SaveScreenshot(testContext, "device_code_end"); Trace.WriteLine("Authentication complete"); } catch (Exception ex) { Trace.WriteLine("Browser automation failed " + ex); seleniumDriver?.SaveScreenshot(testContext); throw; } } }
private static void EnterUsername(IWebDriver driver, LabUser user, bool withLoginHint, bool adfsOnly, UserInformationFieldIds fields) { if (adfsOnly && !withLoginHint) { Trace.WriteLine("Logging in ... Entering username"); driver.FindElement(By.Id(CoreUiTestConstants.AdfsV4UsernameInputdId)).SendKeys(user.Upn); } else { if (!withLoginHint) { Trace.WriteLine("Logging in ... Entering username"); driver.FindElementById(fields.AADUsernameInputId).SendKeys(user.Upn.Contains("EXT") ? user.HomeUPN : user.Upn); Trace.WriteLine("Logging in ... Clicking <Next> after username"); driver.WaitForElementToBeVisibleAndEnabled(By.Id(fields.AADSignInButtonId)).Click(); try { driver.FindElementById(fields.AADSignInButtonId).Click(); Trace.WriteLine("Yes, workaround ok"); } catch { Trace.WriteLine("No, workaround failed"); } } if (user.FederationProvider == FederationProvider.AdfsV2 && (user.UserType == UserType.Federated)) { Trace.WriteLine("Logging in ... AFDSv2 - Entering the username again, this time in the ADFSv2 form"); driver.FindElementById(CoreUiTestConstants.AdfsV2WebUsernameInputId).SendKeys(user.Upn); } } }
public void PerformB2CGoogleProviderSignInFlow(ITestController controller, LabUser user, UserInformationFieldIds userInformationFieldIds) { controller.Tap(CoreUiTestConstants.GoogleAccountID, XamarinSelector.ByHtmlIdAttribute); controller.EnterText(CoreUiTestConstants.WebUPNB2CGoogleInputID, 20, user.Upn, XamarinSelector.ByHtmlIdAttribute); controller.Tap(CoreUiTestConstants.B2CGoogleNextID, XamarinSelector.ByHtmlIdAttribute); controller.EnterText(userInformationFieldIds.PasswordInputId, LabUserHelper.GetUserPassword(user), XamarinSelector.ByHtmlIdAttribute); controller.Tap(userInformationFieldIds.SignInButtonId, XamarinSelector.ByHtmlIdAttribute); }