[Timeout(2 * 60 * 1000)] // 2 min timeout public async Task DeviceCodeFlowAdfsTestAsync() { UserQuery query = new UserQuery { FederationProvider = FederationProvider.ADFSv2019, IsMamUser = false, IsMfaUser = false, IsFederatedUser = true }; LabResponse labResponse = await LabUserHelper.GetLabUserDataAsync(query).ConfigureAwait(false); Trace.WriteLine("Calling AcquireTokenWithDeviceCodeAsync"); PublicClientApplication pca = PublicClientApplicationBuilder.Create(Adfs2019LabConstants.PublicClientId) .WithRedirectUri(Adfs2019LabConstants.ClientRedirectUri) .WithAdfsAuthority(Adfs2019LabConstants.Authority) .BuildConcrete(); var result = await pca.AcquireTokenWithDeviceCode(s_scopes, deviceCodeResult => { SeleniumExtensions.PerformDeviceCodeLogin(deviceCodeResult, labResponse.User, TestContext, true); return(Task.FromResult(0)); }).ExecuteAsync().ConfigureAwait(false); Trace.WriteLine("Running asserts"); Assert.IsNotNull(result); Assert.IsTrue(!string.IsNullOrEmpty(result.AccessToken)); }
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; } }
/// <summary> /// Login to Application /// </summary> /// <param name="searchContent">Parameter of type Syste.String for searchContent</param> /// <param name="moduleName">Module Name to login</param> /// <returns>Parameter of type System.Boolean for True or False</returns> public void LogoutApplication() { try { DashboardPage dashboardPage = new DashboardPage(_driver); // Expand Left menu if (dashboardPage.IsMenuControlCollapsed()) { dashboardPage.ExpandMenu(); } // Expand User Caret to click Logout SeleniumExtensions.ClickOnElement(_driver, LogoutPageElements.UserCaret); // Click Logout button _driver.WaitForElementVisible(LogoutPageElements.logout); _driver.ClickOnElement(LogoutPageElements.logout); //Clear browser cookies _driver.Manage().Cookies.DeleteAllCookies(); } catch (Exception e) { CommonMethods.ThrowExceptionAndBreakTC("Unable to expand left menu in Dashboard \n" + e.GetType().FullName + "\n" + e.Message + "\n" + e.StackTrace); } }
[Ignore] // Failing sporadically https://identitydivision.visualstudio.com/Engineering/_workitems/edit/1045664 public async Task SilentAuth_MsaUser_ForceRefresh_Async() { var labResponse = await LabUserHelper.GetMsaUserAsync().ConfigureAwait(false); pca = PublicClientApplicationBuilder .Create(LabApiConstants.MSAOutlookAccountClientID) .WithTestLogging() .WithAuthority(AadAuthorityAudience.PersonalMicrosoftAccount) .Build(); Trace.WriteLine("Part 1 - Acquire a token with device code with msa user"); AuthenticationResult authResult = await pca.AcquireTokenWithDeviceCode(s_scopes, deviceCodeResult => { SeleniumExtensions.PerformDeviceCodeLogin( deviceCodeResult, labResponse.User, TestContext, false); return(Task.FromResult(0)); }).ExecuteAsync() .ConfigureAwait(false); await ValidateAuthResultAsync(authResult, labResponse).ConfigureAwait(false); }
private async Task AcquireTokenWithDeviceCodeFlowAsync(LabResponse labResponse, string userType) { Trace.WriteLine($"Calling AcquireTokenWithDeviceCodeAsync with {0}", userType); var builder = PublicClientApplicationBuilder.Create(labResponse.App.AppId).WithTestLogging(); switch (labResponse.User.AzureEnvironment) { case AzureEnvironment.azureusgovernment: builder.WithAuthority(labResponse.Lab.Authority + labResponse.Lab.TenantId); break; default: break; } var pca = builder.Build(); var userCacheAccess = pca.UserTokenCache.RecordAccess(); var result = await pca.AcquireTokenWithDeviceCode(s_scopes, deviceCodeResult => { SeleniumExtensions.PerformDeviceCodeLogin(deviceCodeResult, labResponse.User, TestContext, false); return(Task.FromResult(0)); }).ExecuteAsync(CancellationToken.None).ConfigureAwait(false); Trace.WriteLine("Running asserts"); userCacheAccess.AssertAccessCounts(0, 1); Assert.IsFalse(userCacheAccess.LastNotificationArgs.IsApplicationCache); Assert.IsNotNull(result); Assert.IsTrue(!string.IsNullOrEmpty(result.AccessToken)); }
/// <summary> /// Verify Registry Title In Saksmapper is matching with the actual title /// </summary> /// <param name="caseId"></param> /// <param name="screenedFullCaseTitle"></param> public void VerifyRegistryTitleInSaksmapper(string caseId, string screenedFullCaseTitle) { CommonMethods.PlayWait(5000); var registryTitleGUI = _driver.FindElement(RegistryEntryLocators.RegistryEntryTitleNormalMode); SeleniumExtensions.DrawHighlight(registryTitleGUI); Assert.IsTrue(registryTitleGUI.Text == screenedFullCaseTitle, "Screened registry title in JournalPost is mismatching : " + screenedFullCaseTitle); }
/// <summary> /// Get the remark title /// </summary> /// <returns></returns> public string GetDocumentTitle() { CommonMethods.PlayWait(3000); SeleniumExtensions.DrawHighlight(_driver.FindElement(DocumentPageLocators.DocumentTitleRestricted)); var element = _driver.FindElement(DocumentPageLocators.DocumentTitleRestricted).Text; return(element); }
public void TestSignInWithInvalidUsername() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver, Guid.NewGuid().ToString(), WaitType.None); driver.WaitUntilElementIsVisible(By.Id(SiteConstants.LoginErrorDivId), "Could not locate login error notification"); }); }
/// <summary> /// Get the remark title /// </summary> /// <returns></returns> public string GetRemarkTitle() { CommonMethods.PlayWait(3000); SeleniumExtensions.DrawHighlight(_driver.FindElement(CaseLocators.RemakTitleNormalMode)); var element = _driver.FindElement(CaseLocators.RemakTitleNormalMode).Text; return(element); }
public void TestMobileTableEntries() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver); AssertHltbsUserTable(TableHelper.ParseGameTable(driver), true); }, Browsers.Nexus7Chrome); }
public void TestSurvival() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { Console.WriteLine("Asserting the survival of a 20 year old female who plays 100 hours a week in Main style..."); AssertSurvival(driver, Gender.Female, DateTime.Now.Year - 20, 100, PlayStyle.Main, true); }); }
public void TestSignInWithNoGames() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver, UserConstants.SampleNoGamesUserId, WaitType.None); driver.WaitUntilElementIsVisible(By.Id(SiteConstants.EmptyLibraryDivId), "Could not locate empty library notification"); }); }
public void TestNonSurvival() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { Console.WriteLine("Asserting the non-survival of a 70 year old make who plays 1 hour a week in Completionist style..."); AssertSurvival(driver, Gender.Male, DateTime.Now.Year - 70, 1, PlayStyle.Completionist, false); }); }
public void TestNoShareLinksOnMissingGamesPage() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.GoToMissingGamesPage(driver); AssertNoShareLinks(driver); }); }
public void TestTableEntries() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver); AssertHltbsUserTable(TableHelper.ParseGameTable(driver), false); }); }
public void TestPageLinks() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver); AssertPageLinks(driver); }); }
public void TestMissingGamesLinks() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.GoToMissingGamesPage(driver); Assert.IsTrue(driver.FindElement(By.Id(SiteConstants.CachedGamesPanelId)).Displayed, "Expected cached games pane to be visible in missing games page"); Assert.IsFalse(driver.FindElement(By.Id(SiteConstants.MissingGamesLinkId)).Displayed, "Expected missing games link to be hidden in missing games page"); }); }
/// <summary> /// Verify Case Title In Saksmapper is matching with the actual title /// </summary> /// <param name="caseId"></param> /// <param name="screenedFullCaseTitle"></param> public void VerifyCaseTitleInSaksmapper(string caseId, string screenedFullCaseTitle) { CommonMethods.PlayWait(5000); var caseIdWithTitle = _driver.FindElement(By.XPath(string.Format("//span[@title='{0} - {1}'][2]", caseId, screenedFullCaseTitle))).Text; var elementCaseTitle = _driver.FindElement(By.XPath(string.Format("//span[@title='{0} - {1}'][2]", caseId, screenedFullCaseTitle))); SeleniumExtensions.DrawHighlight(elementCaseTitle); Assert.IsTrue(caseIdWithTitle == screenedFullCaseTitle, "Screened case title is mismatching : " + screenedFullCaseTitle); }
public void TestMobileRenderedCharts() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver); TestRenderedCharts(driver); TestSlicers(driver); }, Browsers.IPhone); }
public void TestProperLinks() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver, UserConstants.SampleSteamId); AssertInternalLinks(driver); AssertExternalLinks(driver); }, Browsers.Chrome | Browsers.Firefox); //IE behaves strangely and it doesn't really matter as these links are simple hrefs }
public void TestCachedRenderedCharts() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.GoToCachedGamesPage(driver); TestRenderedCharts(driver); TestSlicers(driver); }); }
public void TestCachedGamesPage() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.GoToCachedGamesPage(driver); AssertPersonaDetails(driver, String.Empty, UserConstants.SamplePersonaAvatarUuid); Console.WriteLine("Asserting the missing HLTB games alert is displayed..."); driver.FindElement(By.Id(SiteConstants.MissingHltbGamesAlertDivId)); }); }
public void TestSignInWithSteamId64() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver, UserConstants.SampleSteam64Id.ToString(CultureInfo.InvariantCulture)); AssertPersonaDetails(driver, UserConstants.SamplePersonaName, UserConstants.SamplePersonaAvatarUuid); Console.WriteLine("Asserting the imputed values notification is displayed..."); driver.FindElement(By.Id(SiteConstants.ImputedValuesNotificationDivId)); }); }
/// <summary> /// Verify Case Title In Recent Cases Grid View /// </summary> /// <param name="caseId"></param> /// <param name="screenedFullCaseTitle"></param> public void VerifyCaseTitleInRecentCasesGridView(string caseId, string screenedFullCaseTitle) { CommonMethods.PlayWait(5000); IWebElement caseIdWithTitle = _driver.FindElement(By.XPath(string.Format("//a[contains(text(),'{0}')]//following::td[1]", caseId))); SeleniumExtensions.DrawHighlight(caseIdWithTitle); var caseIdWithTitles = _driver.FindElement(By.XPath(string.Format("//a[contains(text(),'{0}')]//following::td[1]", caseId))).Text; Assert.IsTrue(caseIdWithTitles == screenedFullCaseTitle, "Screened case title is mismatching in 'Recent Cases' grid view : " + screenedFullCaseTitle); }
public void TestMissingGames() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.GoToMissingGamesPage(driver); driver.WaitUntil(d => { var games = TableHelper.ParseGameTable(d); return(games.Length >= 10 && games.All(g => g.MissingCorrelation)); }, Invariant($"Could not verify missing games page")); }); }
public static void AssertExternalLink([NotNull] IWebDriver driver, [NotNull] string linkId, [NotNull] string expectedTitleSubstring, bool newWindow = false, bool dismissAlertOnClose = false) { if (driver == null) { throw new ArgumentNullException(nameof(driver)); } if (linkId == null) { throw new ArgumentNullException(nameof(linkId)); } if (expectedTitleSubstring == null) { throw new ArgumentNullException(nameof(expectedTitleSubstring)); } var originalWindowHandle = driver.CurrentWindowHandle; var originalWindowHandles = driver.WindowHandles.ToArray(); SeleniumExtensions.ClickById(driver, linkId); if (newWindow) { Console.WriteLine("Waiting for the new window to pop..."); driver.WaitUntil(d => d.WindowHandles.Count == originalWindowHandles.Length + 1, "Could not verify new window/tab opening", TimeSpan.FromSeconds(10)); Console.WriteLine("Switching to the new window..."); driver.SwitchTo().Window(driver.WindowHandles.Except(originalWindowHandles).First()); } SeleniumExtensions.WaitForPageTitle(driver, expectedTitleSubstring); if (newWindow) { Console.WriteLine("Closing the new window..."); driver.Close(); if (dismissAlertOnClose) { driver.WaitUntil(ExpectedConditions.AlertIsPresent(), "alert expected"); driver.SwitchTo().Alert().Accept(); } Console.WriteLine("Switching back to origin window..."); driver.SwitchTo().Window(originalWindowHandle); } else { Console.WriteLine("Navigating back to HLTBS..."); driver.Navigate().Back(); SignInHelper.WaitForLoad(driver, WaitType.PageLoad); } }
public void TestMobileLinks() { // If this test fails, try clicking via JS https://stackoverflow.com/a/17569061/67824 SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver); AssertPageLinks(driver); AssertInternalLinks(driver); AssertExternalLinks(driver); }, Browsers.OptimusL70Chrome); }
public void TestGameSummary() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver); Assert.AreEqual(UserConstants.HltbUserGameCount, GameSummaryHelper.GetGameCount(driver), "incorrect game count"); Assert.AreEqual(UserConstants.HltbUserExcludedGameCount, GetExcludedGameCount(driver), "incorrect excluded game count"); AssertValidPlaytimes(driver); AssertValidPercentages(driver); }); }
public void TestCachedGameSummary() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.GoToCachedGamesPage(driver); var gameCount = GameSummaryHelper.GetGameCount(driver); Assert.IsTrue(gameCount > 10000, Invariant($"too few games in cache: {gameCount}")); Assert.AreEqual(0, GetExcludedGameCount(driver), "expected zero excluded games in cached page"); AssertValidPlaytimes(driver); AssertValidPercentages(driver); }); }
public void TestTableSort() { SeleniumExtensions.ExecuteOnMultipleBrowsers(driver => { SignInHelper.SignInWithId(driver); TestColumnSort(driver, SiteConstants.SteamNameTitle, g => g.SteamName); TestColumnSort(driver, SiteConstants.SteamPlaytimeTitle, g => g.SteamPlaytime); TestColumnSort(driver, SiteConstants.MainPlaytimeTitle, g => g.MainPlaytime); TestColumnSort(driver, SiteConstants.ExtrasPlaytimeTitle, g => g.ExtrasPlaytime); TestColumnSort(driver, SiteConstants.CompletionistPlaytimeTitle, g => g.CompletionistPlaytime); TestColumnSort(driver, SiteConstants.HltbNameTitle, g => g.HltbName); }); }