С# Selenium Web Driver с пользовательским интерфейсом Kendo: как дождаться полного заполнения раскрывающегося списка кендо

Когда раскрывающийся список кендо содержит много значений, для загрузки всех значений требуется время (5 секунд и более). При загрузке значений в раскрывающемся элементе появляется индикатор прокрутки (значок занятости), указывающий на то, что значения заполняются.

введите здесь описание изображения

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

В настоящее время я использую Thread.Sleep(10000), чтобы заставить веб-драйвер Selenium дождаться заполнения всех значений. Я знаю, что использование Tread.Sleep - ПЛОХАЯ практика. Я не могу найти лучшего решения, так как не могу получить элемент индикатора. Я также получил ожидание готовности страницы и, похоже, ничего не делает, он работает на обычных страницах, НО не в пользовательском интерфейсе Kendo.

Кто-нибудь сталкивался с этой проблемой?

Спасибо


person Patrick    schedule 26.01.2015    source источник


Ответы (1)


Вы должны сделать явное ожидание (после щелчка, чтобы открыть список) и использовать ExpectedCondition либо для того, чтобы элемент пользовательского интерфейса списка присутствовал, либо для того, чтобы он был «видимым», в зависимости от того, что работает для вас (это зависит от того, как реализован выпадающий список).

Вместо чего-то вроде этого:

var element = driver.FindElement(By.ID("foo"))

вы бы сделали:

var element = new WebDriverWait(driver, TimeSpan.FromSeconds(10))
                     .Until(ExpectedConditions.presenceOfElementLocated(By.ID("foo"));

Там Вы, очевидно, можете использовать разные типы By. Также есть ExpectedConditions.visibilityOfElementLocated и другие, см. https://code.google.com/p/selenium/source/browse/java/client/src/org/openqa/selenium/support/ui/ExpectedConditions.java

Это называется явным ожиданием, потому что вы явно устанавливаете, какое условие необходимо для этого элемента. Если он обнаружит, что условие выполняется в течение этого времени, он немедленно продолжит работу. Если время истекло, будет выдано исключение.

person jwg    schedule 26.01.2015
comment
Привет, спасибо за ваш ответ. Но проблема в том, что я не могу щелкнуть раскрывающийся список (чтобы открыть список), потому что значок занятости находится в фактической области, где пользователь щелкает, чтобы увидеть список (к вашему сведению, у меня есть добавил скриншот к моему исходному вопросу, чтобы показать, где находится значок занятости). Таким образом, пользователь может щелкнуть список только после того, как значок занятости исчезнет. Кроме того, ExplitWAit (ExpectedConditions) в C# содержит только 4 метода (ElementExist, ElemeetVisible, TitleContains, Titles). Ни один из этих методов не может помочь, поскольку элемент явно существует и виден. - person Patrick; 27.01.2015