Как вызвать код C #, вызванный каким-либо событием JavaScript с помощью веб-драйвера Selenium? - PullRequest
0 голосов
/ 04 ноября 2018

Действительно, похоже, что это не представляет интереса для многих других, я много гуглял, но не мог найти никаких вопросов по этому поводу (обратное направление - выполнение кода javascript - конечно, более распространенное).

Если я правильно помню, есть некоторая поддержка, чтобы сделать это с помощью элемента управления .NET WebBrowser или WebView.

Обратите внимание, что запуск кода из некоторого события Javascript означает, что источником потока действий является не код C #, как это делает следующее:

var someResult = driver.ExecuteAsyncScript("var cb=arguments[0]; cb(someJsVariable);");

здесь вы можете ясно видеть, что обратный вызов cb выполняется внутри среды javascript и выглядит так, как будто он течет и продолжает работать в среде C #. Однако очевидно, что источник всего потока запускается из кода C # (по вызову driver.ExecuteAsyncScript).

Мой сценарий совершенно другой. Я хочу, чтобы какой-то код JavaScript выполнялся любым событием в среде Javascript (например, document.onload, button.onclick, ...), и на самом деле здесь я хочу перехватить ajaxSend (конечно, это может быть вызвано любым действием запущен внутри среды javascript) для отправки параметров запроса в среду C #.

Так что для вызова кода javascript должен быть некоторый C # обратный вызов, что-то вроде этого:

driver.ExecuteScript("$(document).ajaxSend(function(e,jXhr,options){ /* somehow trigger C# callback here to send back the options */ });");

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

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