2011-11-08 2 views
4

В настоящее время я использую последнюю версию Selenium и ее привязки .net для выполнения некоторых тестов. К сожалению, мне приходится моделировать некоторую реакцию, которая происходит в переменное время и может выполняться только в течение очень ограниченного интервала времени, а опрос DOM постоянно не достаточно быстрый. Есть ли способ, чтобы Selenium подключался к событиям DOM, чтобы я мог перехватить события, которые меня интересуют в моем коде? Если это так, образец .net-кода был бы очень признателен.Selenium реагирует на события

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

P.S .: Я в основном безразличны к браузеру, однако решение, которое работает в Chrome будет предпочтительнее

+0

В зависимости от вашего браузера это может быть проблемой типа типа локатора и браузера, и именно поэтому вы не можете опрашивать DOM. – CBRRacer

+0

Я думаю, что он может опросить DOM, он просто ищет решение, которое не требует опроса – prestomanifesto

+1

@prestomanifesto OP сказал, что опрос DOM был недостаточно быстрым, поэтому мое утверждение о типе браузера. Случай и точка Я провела тестовый тест с Selenium 2 Webdriver C# и обнаружила, что поиск элемента по идентификатору занимает 198 мс в firefox и 308 мс в IE (это в среднем 5 попыток для каждого браузера. Но CssSelector или Xpath были 7ms для Firefox и 38ms для IE снова в среднем по 5 попыток для каждого.Таким образом, если он проводит опрос DOM по ID в IE, который может быть медленнее, чем требуется время ответа. – CBRRacer

ответ

2

Ваша единственная надежда на это, чтобы сделать это в JavaScript. Вы можете запустить произвольный код JavaScript, используя ISelenium.GetEval() или ISelenium.RunScript(). GetEval() будет выполнять код синхронно и возвращать значение последнего выражения в блоке. RunScript() фактически построит новый элемент <SCRIPT> в DOM с кодом, который заставит браузер запускать его асинхронно, ожидая, пока движок JavaScript не будет работать (i.e., по крайней мере, после завершения команды RunScript()).

Возможно, вы хотите использовать RunScript(), чтобы перехватить событие, которое вы хотите, а затем, чтобы тестовый скрипт подождал, пока у события не будет достаточно времени для запуска, вы можете использовать для получения или проверки результатов обработчика событий.

+0

Вот ссылка на пример того, что @Ross Паттерсон упоминает https://www.swtestacademy.com/selenium-wait-javascript-angular-ajax/ –

Смежные вопросы