Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как подписаться на событие элемента для ожидания загрузки гриды kendoUI


(Шевченко Владислав) #1

Есть проблема с ожиданием загрузки гриды на странице. Не хочется вставлять sleep.

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

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

в js я совсем не разбираюсь. помогите, если кто сталкивался how to handle event javascript with webdriver


Как автоматизировать тестирование Telerik JavaScript KendoUI c помощью WebDriver ? (Обмен опытом)
(Alsu Vadimovna) #2

добрый день. у меня сделано так:

public static class WebDriverExtensions {
  public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds) {
    if (timeoutInSeconds > 0) {
      var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
      return wait.Until(drv => drv.FindElement(by));
    }
    return driver.FindElement(by);
  }
}

затем при ожидании элемента пишу так:

Selenium.FindElement(By.Classname(element), 10);

где 10 - это ожидание элемента в секундах


(Шевченко Владислав) #3

Спасибо, но это не совсем то. Я видимо не совсем корректно задал вопрос. Дописал в названии темы, что это нужно сделать для гриды kendoUI.

Хочу написать метод , который ждет загрузки гриды и метод который ждет прогрузки всех данный в гриде.


(Mykhailo Poliarush) #4

Тут надо смотреть на dataBound event http://docs.telerik.com/kendo-ui/api/web/grid#events-dataBound

Хотя я думаю для твоей задачи будет достаточно всего лишь прослеживать количество загруженных элементов в dataSource

Пример кода на python, где я ожидаю что в гриде будет 77 записей и 16 страниц для прокручивания:

from selenium.webdriver import Firefox
from selenium.webdriver.support.wait import WebDriverWait

ff = firefox = Firefox()
ff.get("http://demos.telerik.com/kendo-ui/web/grid/events.html")

js_total_items = r'return $("#grid").data("kendoGrid").dataSource.total();'
js_total_pages = r'return $("#grid").data("kendoGrid").dataSource.totalPages();'

is_total_items_expected = lambda x: int(x.execute_script(js_total_items)) == 77
is_total_pages_expected = lambda x: int(x.execute_script(js_total_pages)) == 16

wait = WebDriverWait(ff, 30)
wait.until(is_total_items_expected)
wait.until(is_total_pages_expected)

print "How much items in grid ", ff.execute_script(js_total_items)
print "How much pages in grid ", ff.execute_script(js_total_pages)

#do something further

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


(Шевченко Владислав) #5

да, суть вроде уловил, попробую перевести на Java :smile:
Спасибо. Отпишусь по результатам.