如何借助Selenium Webdriver调用由某些javascript事件触发的C#代码?

时间:2018-11-04 04:41:50

标签: javascript c# selenium selenium-webdriver webdriver

对于许多其他人来说,看起来这确实不是一个有趣的问题,我已经在Google上搜索了很多,但是找不到任何问题(相反的方向-执行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#环境。

因此应该有一些C#回调供javascript代码调用,如下所示:

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

如果无法做到这一点,我认为Selenium将来应该添加此功能,简单的WebBrowser控件可以做到这一点,而功能强大的WebDriver则不能做到。

0 个答案:

没有答案