代码之家  ›  专栏  ›  技术社区  ›  Homewrecker

删除我们的网站以检查Javascript错误

  •  0
  • Homewrecker  · 技术社区  · 10 年前

    我在这里有点绝望。 几天来,我一直在尝试创建一个网页刮板,它可以浏览我们的网站并检查Javascript错误。

    最大的问题是,我只知道Java,似乎GhostDriver不再维护了。Ghostdriver的家伙指的是JbrowserDriver。 但是,JBrowserDriver没有从控制台收集Javascript错误的选项。

    然后我尝试了HTMLUnit,这是一种渴望抛出错误的方式,与javascript无关。所以,在摆弄了半天之后,我就放弃了HtmlUnit。

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

    你们有什么建议吗?

    2 回复  |  直到 10 年前
        1
  •  1
  •   Ben C    10 年前

    您可以将一些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 将触发错误事件处理程序并将其记录到隐藏的selenium日志中。

    在与页面交互之后,您可以做一些简单的事情,比如:

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

    这将获得隐藏的selenium日志中的文本,然后用分号将其分割,分号是我在每个错误日志后附加的一个字符。

        2
  •  0
  •   eee    10 年前

    默认情况下禁用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);