从javascript调用c#中的方法

从javascript调用c#中的方法,c#,javascript,selenium,remotewebdriver,C#,Javascript,Selenium,Remotewebdriver,我正在使用selenium的RemoteWebDriver和c#。现在我正在向页面的头部注入一个javascript函数,如下所示 "window.__webdriver_javascript_errors = []; window.onerror = function(errorMsg, url, line) { window.__webdriver_javascript_errors.push(

我正在使用selenium的RemoteWebDriver和c#。现在我正在向页面的头部注入一个javascript函数,如下所示

"window.__webdriver_javascript_errors = [];
                window.onerror = function(errorMsg, url, line) {
                window.__webdriver_javascript_errors.push(
                    errorMsg + ' (found at ' + url + ', line ' + line + ')');
                };";
它由fiddler代理注入,并将页面上的javascript错误存储到数组中。然后我可以使用IJavascriptExecuter来提取这个方法


然而,与此相反,我希望javascript在发现错误时自动调用c#方法,这样我就可以立即记录它。有办法做到这一点吗?

因为WebDriver在浏览器进程之外独立运行,所以注入的JavaScript对自动化进程的语言一无所知。它们从根本上是断开的,这完全是出于设计。您可以在正在自动化的应用程序的服务器端实现日志功能,将错误推送到日志中;或者,您可以轮询错误,从页面中提取错误


可能有一些方法可以使这对代码更简单、更透明。您可以考虑使用WebDr.Sputt.dl程序集中的<代码>事件处理WebReals<代码>实现。它包装了许多WebDriver API调用,在调用方法调用之前和/或之后触发事件。您可以将JavaScript日志检查放在这些事件的事件处理程序中,它对测试代码是透明的。如果当前的实现不能满足您的需要,您可以将其用作适合您的实现的模板。

我不知道Selenium是否有任何抽象内容,但我认为您需要向服务器端资源(ashx处理程序、控制器操作等)发出AJAX请求并将错误数据传递给它。服务器端处理程序可以调用它需要的任何服务器端方法。从javascript调用c#函数是针对asp.net的,因此我认为在那里调用的c#函数是从服务器端调用的。如果我错了,请纠正我,但我认为这是另一种情况matter@user2932876,看看答案并找出答案。这都是同一个想法。这个问题的答案有很多链接供你开始研究这个主题。事实上,它与ASP.NET没有任何关系。关键是JS必须调用一些东西,通常是web服务之类的东西,这就是它进入代码的“路径”。(顺便说一句,我认为您当前的实现是更好的,它更符合逻辑,我不认为有必要这样做)是的,在我发布这个问题之前,我看了一下它们。问题是,在asp.net中,很清楚将调用c#中的哪个方法,因为在代码的服务器端很容易找到它。不过,在selenium中,我不知道他们如何找到c#方法的位置,因为该方法可以在任何文件中。我的实现还可以,但每次我想查找错误时都需要使用IJavascriptExecuter,并且不清楚何时会发现错误。谢谢你的帖子。这个实现很有趣,我将看看是否可以使用它来增强我的代码。不过,我已经找到了解决这个问题的方法,尽管它不太优雅。无论何时发现错误,都会弹出一个警报,当出现这种情况时,会在我的代码中抛出一个异常。在处理异常时,我可以记录javascript错误。