2016-04-12 19 views
0

我有点绝望在这里。 几天来,我一直在尝试创建一个可以通过我们的网站并检查Javascript错误的网络抓取工具。刮我们的网站检查Javascript错误

最大的问题是我只知道Java,而且似乎GhostDriver不再被维护。 Ghostdriver的人指的是JbrowserDriver。然而,JBrowserDriver没有选择从控制台收集Javascript错误。

然后我尝试HTMLUnit,这是渴望抛出错误,而不是与JavaScript相关的方式。所以在摆弄了半天之后,我投入了HtmlUnit。

我可以恢复到普通的旧WebDriver,但会涉及太多的样板。

有没有人有任何建议?

+0

尝试browsermobproxy与硒和应该给你使用的硒会牵扯太多的样板...... –

+0

。您可以在头部注入JavaScript,然后在页面呈现时调用它。迄今没有成功。 – Homewrecker

回答

1

您可以在每个窗口的head部分注入一些javascript以将所有错误记录到隐藏的div中。然后Selenium可以从这个div中获取文本,并将其解析为页面上发生的所有错误的报告。

例如,给出以下页面布局:

<html> 
    <head> 
     <script> 
      window.onerror = function(e) { 
       document.getElementById("hidden-selenium-log").innerText += e.toString() + ";"; 
      } 
     </script> 
    </head> 
    <body> 

     <div id="hidden-selenium-log" style="display: none;"> 
     </div> 

     <div id="broken-button" onclick="unknownFunction()">broken</div> 

    </body> 
</html> 

head标签会写所有JavaScript错误到DIV hidden-selenium-log脚本。点击div broken-button将触发错误事件处理程序并将其记录到隐藏的硒日志中。

与网页互动之后,然后你可以不喜欢简单的东西:

Driver.FindElement(By.Id("hidden-selenium-log")).text.split(";"); 

这将得到隐藏的硒日志中的文本,然后由分号分开它,一个字我后追加记录每个错误。

+0

我目前正在与JBrowserDriver这种做法一切 – Homewrecker

+0

您遇到这种方法会遇到什么样的问题? JavaScript是否被调用? –

+0

I ibsert 然后我执行:driver.executeScript(“return window.jsErrors”);但是我回到空,我确信页面上有一个Javascript错误。 – Homewrecker

0

默认情况下,JavaScript的记录被禁用。您可以通过设置生成器启用它。

Settings settings = Settings.builder() 
     .logJavascript(true) 
     .build(); 
JBrowserDriver jBrowserDriver = new JBrowserDriver(settings); 

jBrowserDriver.get("http://example.com"); 

Logs logs = jBrowserDriver.manage().logs(); 
LogEntries logEntries = logs.get("javascript"); 
logEntries.forEach(System.out::println);