我正在使用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#方法,这样我就可以立即记录它。有没有办法做到这一点?
答案 0 :(得分:0)
由于WebDriver在外部运行并独立于浏览器进程运行,因此注入的JavaScript对自动化过程的语言一无所知。它们基本上是断开连接的,这完全是设计上的。您可以在要自动执行的应用程序的服务器端实现日志记录功能,将错误推送到日志中;或者您可以轮询错误,从页面中提取错误。
您可以通过某些方式使代码更轻松,更透明。您可以考虑使用WebDriver.Support.dll程序集中的EventFiringWebDriver
实现。它包装了许多WebDriver API调用,在调用方法调用之前和/或之后触发事件。您可以将JavaScript日志检查放在这些事件的事件处理程序中,它对您的测试代码是透明的。如果当前的实现不能满足您的需求,您可以使用the implementation作为适合您的实现的模板。