t.me/atinfo_chat Telegram группа по автоматизации тестирования

Перехват событий страницы в Selenium WebDriver


(Kotor) #1

Проблема заключается в том, чтобы найти способ перехватить какое-то кастомное событие в Selenium. Пример события jquery в тестируемом приложении:

$('#vectorOverlay').on('dataLoaded', function () {// some code};

Собственно, мне требуется только знать, что событие 'dataLoaded' наступило. Пробовал делать executeScript и executeAsyncScript - не помогло. Либо я что-то делаю неправильно, либо такая функциональность в selenium'e не поддерживается. У кого какие соображения по этому поводу? Заранее благодарю.

p.s. воркэраунд на это дело есть и он работает, но хотелось бы разобраться именно в обработке подобных событий.


(Mykhailo Poliarush) #2

покажите, пожалуйста, код который вы пробывали с executeScript и executeAsyncScript

а также какой у вас воркэраунд уже есть


(Kotor) #3

начнем с воркэраунда.

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

Пример кода:

 

        boolean isDataLoaded = false;

        while(!isDataLoaded)
        {
            isDataLoaded = (Boolean) ((RemoteWebDriver) driver).executeScript("return window.dataLoaded");
        }

Этот вариант работает стабильно.

События пробовал обрабатывать разными способами:

1) ((RemoteWebDriver) driver).executeAsyncScript("$('#vectorOverlay').on('dataLoaded')

2) ((RemoteWebDriver) driver).executeAsyncScript("$('#vectorOverlay').on('dataLoaded', function () {// some code to handle this event};");

Соответственно, после того как попробовал разные варианты с executeAsyncScript, я повторил их с executeScript (просто ради эксперимента). Результат не изменился.