Как ждать загрузки страницы, когда страница на самом деле является методом? - PullRequest
0 голосов
/ 15 октября 2019

У меня есть несколько методов в моих сценариях селена, которые в основном просто вызывают новую страницу, т.е. ChooseUserMgt () ;. Какие загрузки страниц / ожидания / явные / неявные ожидания могут применяться для обеспечения успешного запуска, потому что иногда загрузка занимает много времени?

 [TestInitialize]
        public void Setup()
        {
            _regRep = new UserRegRep(driver);
            CreateRepos();
            runTime = DateTime.Now.ToString("MMddHHmmssfff");
            userName = "Jonny" + objCommon.RandomString(8, true);
            emailID = "JonnySmithy" + runTime + "@hotmail.com";

            // Start the user mangaement tests on the user management page
            **ChooseUserMgt();**
        }

Это метод:

[TestMethod]
        [TestCategory("Cat1")]
        public void ChooseUserMgt()
        {
            //Choose the User Managment menu
            IJavaScriptExecutor executor = (IJavaScriptExecutor)driver;
            executor.ExecuteScript("arguments[0].click()", _regRep.SystemIcon);
            System.Threading.Thread.Sleep(2000);
            IJavaScriptExecutor executor1 = (IJavaScriptExecutor)driver;
            executor1.ExecuteScript("arguments[0].click()", _regRep.UserMgmtLink);
            System.Threading.Thread.Sleep(2000);
        }

1 Ответ

0 голосов
/ 15 октября 2019

Я бы вообще использовал другой подход.

Для клика я бы хотел два метода - WaitForControlToBeClickable и Click.

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

  static bool WaitForControlToBeClickable(By SeleniumObject, int waitFor = 10)
        {
            try
            {
                WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(waitFor));
                wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(SeleniumObject));
                return true;
            }
            catch (Exception er)
            {
                return false;
                throw er;
            }

        }

Далее вы создадите метод для щелчка и вызова предыдущего метода внутри:

        public void Click(By SeleniumObject)
        {
            WaitForControlClickable(SeleniumObject);
            driver.FindElement(SeleniumObject).Click();
        }

Вы можете сохранить их в другом классе - CommonActions. Поэтому, как только вы создадите экземпляр этого теста, вы можете назвать его так:

commonAction.Click(MyObject);

Я также рекомендую хранить ваши объекты в хранилище объектов отдельно, которое вы вызываете своими действиями для создания тестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...