Действительно, похоже, что это не представляет интереса для многих других, я много гуглял, но не мог найти никаких вопросов по этому поводу (обратное направление - выполнение кода 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 не может.