C# Selenium ждет, пока отображение элемента не станет равным none - работает только при отладке - PullRequest
0 голосов
/ 29 февраля 2020

Я столкнулся с некоторыми проблемами при автоматизации формы, содержащей div с style="display: none;" У него есть Id, но я не могу использовать его без отладки.

Проблема в том, что есть выпадающий список, который загружает свои параметры только после того, как это «загрузить изображение» исчезает Поэтому я перепробовал множество решений и каждый вариант из SeleniumExtras.WaitHelpers (потому что старое будет устаревшим в C#).

Чем ближе я получил от решения, тем ниже был этот код: { ссылка }

Вот мой код:

<div id="updateProgress" style="display: none;" role="status" aria-hidden="true" xpath="1">

            <div id="divLoading" style="position: absolute; z-index: 10; left: 450px; top: 90px;">
                <img id="ajaxLoadNotificationImage" src="../images/ajax-loader-center.gif" alt="[image]">
            </div>

</div>

-

 WebDriverWait wait = new WebDriverWait(WebDriver, TimeSpan.FromSeconds(90));
            wait.Until(WebDriver =>
            {
                return WebDriver.FindElement(By.Id("updateProgress")).GetAttribute("style").Contains("display: none;");
            });

Я тоже пробовал:

wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeSelected(By.XPath(profilePage.LoadingStateImg.GetAttribute("style").Contains("display: none;").ToString())));

wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.InvisibilityOfElementLocated(By.XPath(profilePage.LoadingStateImg.GetAttribute("style").Contains("display: none;").ToString())));

Не указано выше, но я пробовал: - InvisibilityOfElementWithText - StalenessOf - ElementIsVisible - TextToBePresentInElementValue

Кажется, даже не попадает в эти строки кода во время работы. Отладка показывает текст в порядке с атрибутом «display: none;» и переходит к выбору необходимого выпадающего списка. Я не хочу использовать Thread.Sleep(), но пока это единственное, что работает. * (Tread.Sleep работает, но, очевидно, я не пытаюсь войти в него, потому что страница настолько медленная, что мне нужно 40-60 секунд ...)

Заранее спасибо!

1 Ответ

0 голосов
/ 09 марта 2020

Я решил это сам. Сначала нужно было проверить, виден ли элемент (По локатору), чтобы я мог проверить, не виден ли он. Элемент, вероятно, мигает на странице, прежде чем будет определенно показан на странице:

WebDriver.WaitForElementIsVisible(By.Id(profilePage.LoadingStateLocator));
WebDriver.WaitForElementIsNotVisible(profilePage.LoadingStateImg);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...