12

我想知道是否有人可以扩展这些尝试中的任何一个,或者有任何其他想法来使用可在 Firefox、Chrome、Internet Explorer 和 Safari 中使用的 WebDriver 来捕获 JS 错误。

到目前为止,这是尝试过的:
尝试- 问题:

JSErrorCollector.jar - 工作正常,但仅是 Firefox 解决方案。

将 JS 注入到页面源代码中——我window.onerror使用 WebDriver 将代码注入到页面的源代码中,但由于注入太迟,任何初始错误都被遗漏了。

BrowserMob - 我可以拦截HTTP响应并计划将window.onerror代码注入响应体,但作者尚未实现该getBody()方法,因此只能修改标题,我知道。对于所有响应,正文始终为空。(我在一个网页上,作者谈到了实现getBody(),但还没有发生,我再也找不到了)

Fiddler – JS 将正确注入,但 Fiddler 仅适用于 Windows,因此 Safari 无法工作。

父/子窗口——我使用 javascript 打开并存储对测试页面窗口的引用。包含在父窗口中,window.onerror code因此它不会错过子窗口中的启动错误。除了 Firefox 和 Chome 之外,我无法让它在任何东西上工作。我已经在这里问过一个问题。

Selenium RC – 我没有尝试过,因为我所有的测试都使用了 WebDriver,但我知道它有某种方法,例如captureNetworkTraffic(),但我认为它不能在 WebDriver 中使用。

IE 错误弹出窗口——我打算使用 Firefox/Chrome 的父/子解决方案,然后查找 IE 错误弹出窗口。当检查设置以显示它时,将显示此弹出窗口。弹出窗口是一个本机窗口窗口(我认为),所以我不能使用 selenium 来访问它。

阅读浏览器控制台——我无法在所有浏览器中找到这样做的方法。在 Chrome 中,我找到了一种将控制台日志保存到文件然后读取文件的方法。这就是我所得到的。

我想要一个类似于 BrowserMob 的解决方案,因为它看起来像是一个跨浏览器解决方案。是否有任何其他代理可以放入测试并拦截响应?如果getBody()实施该方法,那就太好了。我也喜欢父/子解决方案,因为它看起来也是一个简单的跨浏览器解决方案,但它不适用于 IE(又是父/子问题)。

谢谢你的帮助。

4

1 回答 1

1

我不知道有什么方法可以通过测试框架直接捕获 Javascript 代码错误。如果我猜的话,我会使用PhantomJS。或者,也许像MITM Proxy这样的东西会起作用?

作为旁注,如果您使用单独的节点运行 Selenium2 Grid Hub,您可以像这样将 Java 选项传递给节点的 JVM,这将允许通过 Fiddler 的代理工作。Fiddler 在端口 8888 上侦听(默认情况下)。使用此方法,您可以查看数据包。

:: batch script: Set JAVA_OPTS java options to JVM
SET "JAVA_OPTS=-Dwebdriver.chrome.^
 driver=%CHROMEDRIVER%"
IF "%PROXY_TO_FIDDLER%"=="true" SET "JAVA_OPTS=%JAVA_OPTS% -DproxySet=true^
 -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888"

我在此处创建了可用于启动网格和节点的脚本。在我看来,您可以使用此方法在端口 8080 上与 BrowserMob 代理通信吗?我还没有尝试过。

于 2013-07-26T18:38:13.893 回答