[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;
            }
        }
Exemple #3
0
        /// <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);
        }
Exemple #5
0
        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);
        }
Exemple #7
0
        /// <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);
        }
Exemple #8
0
 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);
     });
 }
Exemple #12
0
 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);
        }
Exemple #19
0
        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
        }
Exemple #21
0
        public void TestCachedRenderedCharts()
        {
            SeleniumExtensions.ExecuteOnMultipleBrowsers(driver =>
            {
                SignInHelper.GoToCachedGamesPage(driver);

                TestRenderedCharts(driver);
                TestSlicers(driver);
            });
        }
Exemple #22
0
        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));
            });
        }
Exemple #23
0
        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);
        }
Exemple #28
0
        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);
            });
        }
Exemple #29
0
        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);
            });
        }