在Selenium WebDriver中捕获JavaScript错误 - 独立于浏览器

时间:2013-07-09 18:48:22

标签: java selenium-webdriver

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

以下是迄今为止所尝试的内容:
尝试 - 问题:

JSErrorCollector.jar - 工作正常,但仅限Firefox。

将JS注入页面源 - 我使用WebDriver将window.onerror代码注入到页面的源代码中,但是因为注入太晚而错过了任何初始错误。

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

Fiddler - JS会正确注入,但Fiddler只是Windows,因此Safari无法正常工作。

父/子窗口 - 我使用javascript打开并存储对测试页面窗口的引用。 window.onerror code包含在父窗口中,因此它不会错过子窗口中的启动错误。除了Firefox和Chome之外,我无法使用它。我已经问了一个关于它的问题here

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

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

阅读浏览器控制台 - 我找不到在所有浏览器中执行此操作的方法。在Chrome中,我找到了将控制台日志保存到文件然后读取文件的方法。就我而言。就是这样。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分: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"

我创建了scripts you can use to start your grid and node here。在我看来,您可以使用此方法与端口8080上的BrowserMob代理通信?我没试过。