我在这里绝望。 几天来,我一直在尝试创建一个可以浏览我们网站并检查Javascript错误的网络抓取工具。
最大的问题是我只知道Java,似乎GhostDriver不再维护了。来自Ghostdriver的人指的是JbrowserDriver。 但是,JBrowserDriver无法从控制台收集Javascript错误。
然后我尝试了HTMLUnit,这是渴望抛出错误,而不是javascript相关的方式。所以在摆弄了半天之后,我就在HtmlUnit上沾上了毛巾。
我可以恢复到普通的旧WebDriver,但这将涉及太多的样板。
你们其中有人有什么建议吗?
答案 0 :(得分: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
将触发错误事件处理程序并将其记录到隐藏的selenium日志中。
在与页面交互后,您可以执行以下简单的操作:
Driver.FindElement(By.Id("hidden-selenium-log")).text.split(";");
这将获取隐藏的selenium日志中的文本,然后用分号分割,这是我记录每个错误后附加的字符。
答案 1 :(得分:0)
默认情况下禁用日志记录。您可以通过设置构建器启用它。
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);