2013-11-11 6 views
0

Я использую Selenium RemoteWebDriver и C#. Сейчас я нагнетание яваскрипта функции в голова страницы, которая выглядит как этотВызов метода в C# из javascript

"window.__webdriver_javascript_errors = []; 
       window.onerror = function(errorMsg, url, line) { 
       window.__webdriver_javascript_errors.push(
        errorMsg + ' (found at ' + url + ', line ' + line + ')'); 
       };"; 

Он впрыскиваемый скрипач прокси-сервер и он хранит JavaScript ошибки на странице в массив. Затем я могу использовать IJavascriptExecuter для извлечения этого метода.

Однако вместо этого я хочу, чтобы javascript автоматически вызывал метод C# всякий раз, когда обнаруживается ошибка, поэтому я могу сразу его зарегистрировать. Есть ли способ сделать это?

+0

Возможный дубликат [Можете ли вы назвать функцию C# из javascript?] (Http://stackoverflow.com/questions/3994150/can-you-call-c-sharp-function-from-javascript) – Arran

+0

Я не знаете, есть ли у Selenium что-либо, что абстрагирует это, но я полагаю, вам нужно сделать запрос AJAX на серверный ресурс (обработчик ashx, действие контроллера и т. д.) и передать ему данные об ошибках. Этот обработчик на стороне сервера может вызывать любые серверные методы, которые ему необходимы. – David

+0

Вызывающая функция C# из javascript для asp.net, поэтому я думаю, что функция C#, которая называется там, принадлежит serveride.Correct me, если я ошибаюсь, но я думаю, что это другое дело – user2932876

ответ

0

Поскольку WebDriver работает снаружи и независимо от процесса браузера, введенный JavaScript ничего не знает о языке процесса автоматизации. Они принципиально отключены, и это полностью по дизайну. Вы можете либо реализовать функцию ведения журнала на стороне сервера приложения, которое вы автоматизируете, нажав ошибки в журнал; или вы можете опросить ошибки, вытащив их со страницы.

Могут быть некоторые способы сделать это немного проще и прозрачно для вашего кода. Вы можете рассмотреть возможность использования реализации EventFiringWebDriver, обнаруженной в сборке WebDriver.Support.dll. Он переносит многие вызовы API WebDriver, запускает события до и/или после вызова метода. Вы можете разместить свою проверку журнала JavaScript в обработчиках событий этих событий, и это будет прозрачно для вашего тестового кода. Если текущая реализация не отвечает вашим потребностям, вы можете использовать the implementation в качестве шаблона для реализации, которая будет работать для вас.

+0

Спасибо за сообщение. Реализация интересна, я увижу, могу ли я использовать ее для улучшения моего кода. Я нашел обходной путь для этой проблемы, хотя, хотя и не слишком изящный. Всякий раз, когда обнаруживается ошибка, появляется всплывающее предупреждение, и когда это происходит, в моем коде бросается исключение. При обработке исключения я могу зарегистрировать ошибку javascript. – user2932876