У меня есть несколько методов в моих сценариях selenium, которые в основном просто вызывают новую страницу, то есть 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);
        }
0
Butler 15 Окт 2019 в 17:04

1 ответ

Лучший ответ

Я бы выбрал совсем другой подход.

Для щелчка мне нужны два метода - 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);

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

0
Staindz 15 Окт 2019 в 18:32