Selenium C # - щелкните элемент, подождите, пока страница обновится, и проверьте элемент еще раз - PullRequest
0 голосов
/ 10 января 2019

У меня есть элемент на сайте, который изменяет свой текст при нажатии. Однако при щелчке по элементу веб-страница обновляется, и только после обновления текст элемента изменяется. Я создал метод POM в Selenium WebDriver C #, который проверяет эту функциональность:

public void ChangeLanguage(string language)
    {
        //Get current language and then change it
        this.executor.ExecuteScript("arguments[0].click();", currentLanguage);
        //Wait until page reloads and language change button is visible again
        wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.Id("language-change-link")));
    }

[Test]
        public void ChangeLanguage()
        {
            ExtentTest test = null;
            LoginPage loginPage = new LoginPage(_driver);
            ICapabilities driverCapabilities = ((RemoteWebDriver)_driver).Capabilities;
            string currentLanguage = null;

            try
            {
                //Create test
                test = extent.CreateTest("Change language").Info("Test started")
                    .Info("Browser:  " + (driverCapabilities.HasCapability("browserName") ? driverCapabilities.GetCapability("browserName") : "unknown") +
                    (driverCapabilities.HasCapability("version") ? " / " + driverCapabilities.GetCapability("version") : ""));

                //Get current language
                currentLanguage = loginPage.currentLanguage.Text;
                test.Log(Status.Info, "Currently selected language: " + currentLanguage);

                //Get current language and then change it
                loginPage.ChangeLanguage(currentLanguage);
                test.Log(Status.Info, "Switching languages...");

                switch (currentLanguage)
                {
                    //Current language is english
                    case "English":
                        try
                        {
                            Assert.AreEqual(loginPage.currentLanguage.Text, "German");
                            test.Log(Status.Pass, "Previously selected language: " + currentLanguage + ". New language: " + loginPage.currentLanguage.Text + ".");
                        }
                        catch (AssertionException)
                        {
                            test.Log(Status.Fail, "Language was not set! Expected language: German");
                            test.AddScreenCaptureFromPath(Reports.CaptureScreenshot(_driver, "CloudKiosk", "testScreenshot_" + DateTime.Now.Ticks));
                        }
                        break;
                    //Current language is german
                    case "German":
                        try
                        {
                            Assert.AreEqual(loginPage.currentLanguage.Text, "English");
                            test.Log(Status.Pass, "Previously selected language: " + currentLanguage + ". New language: " + loginPage.currentLanguage.Text + ".");
                        }
                        catch (AssertionException)
                        {
                            test.Log(Status.Fail, "Language was not set! Expected language: English");
                            test.AddScreenCaptureFromPath(Reports.CaptureScreenshot(_driver, "CloudKiosk", "testScreenshot_" + DateTime.Now.Ticks));
                        }
                        break;
                }
            }
            catch (Exception e)
            {
                test.Log(Status.Fail, "Test execution failed: " + e.Message + " ---> " + e.Message).CreateNode("Error details").Log(Status.Error, e.ToString());
                test.AddScreenCaptureFromPath(Reports.CaptureScreenshot(_driver, "CloudKiosk", "testScreenshot_" + DateTime.Now.Ticks));
                throw e;
            }
        }

Проблема в том, что при нажатии элемента веб-страница обновляется, но код немедленно проверяет текст элемента еще до обновления страницы, что дает мне отрицательный результат теста. Есть ли способ заставить тест ждать обновления веб-страницы после нажатия на элемент перед проверкой его текста?

1 Ответ

0 голосов
/ 10 января 2019

Если у вас есть загрузчик на странице, вы можете сначала дождаться, пока нагрузка исчезнет, ​​затем проверить текст, иначе вы можете подождать, пока элемент со старым текстом исчезнет, ​​а затем дождаться, пока элемент с новым текстом. Вот код, который вы можете использовать для исчезновения элемента:

 var defaultWait = new WebDriverWait(this, TimeSpan.FromSeconds(30));
 defaultWait.Until(
                    ExpectedConditions.InvisibilityOfElementLocated(By.XPath((selector)))
                    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...