当前位置: 首页 > 知识库问答 >
问题:

如何使用SeleniumJavaWebDriver捕获java脚本错误

锺离晗昱
2023-03-14

我正在尝试使用JavaSeleniumWebDriver捕获网页的所有javascripts错误。

下面是我的代码示例:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.logging.LogType;

public class MainExample {
    public static void main(String[] args) {
        System.setProperty("webdriver.gecko.driver", "path_to_driver/geckodriver");
        FirefoxOptions options = new FirefoxOptions();
        WebDriver driver = new FirefoxDriver(options);
        driver.get("https://www.google.com");
        LogEntries entries = driver.manage().logs().get(LogType.BROWSER);
    }
}

作为Firefox驱动程序,我使用的是这个版本:geckodriver-v0。30.0-linux64。焦油广州

以下是我的Selenium版本:

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.1.1</version>
</dependency>

我的问题是,在运行前面的代码时,出现以下异常

司机信息:司机。版本:组织上的RemoteWebDriver。openqa。硒。json。JsonInput。peek(JsonInput.java:122)位于org。openqa。硒。json。JSONTypeConverter。org上的lambda$null$6(jsontypecompler.java:140)。openqa。硒。json。JSONTypeConverter。在组织上强制(jsontypecompiler.java:126)。openqa。硒。json。Json。toType(Json.java:69)位于org。openqa。硒。json。Json。toType(Json.java:55)位于org。openqa。硒。json。Json。toType(Json.java:50)位于org。openqa。硒。遥远的http。W3HttpResponseCoDec。在org上解码(w3chttrpresponsecodec.java:87)。openqa。硒。遥远的http。W3HttpResponseCoDec。在org上解码(w3chttrpresponsecodec.java:49)。openqa。硒。遥远的HttpCommandExecutor。在org上执行(HttpCommandExecutor.java:158)。openqa。硒。遥远的服务驱动器命令执行器。在org上执行(DriverCommandExecutor.java:83)。openqa。硒。遥远的RemoteWebDriver。在org上执行(RemoteWebDriver.java:552)。openqa。硒。遥远的RemoteExecuteMethod。在org上执行(RemoteExecuteMethod.java:35)。openqa。硒。遥远的远程日志。org上的getRemoteEntries(RemoteLogs.java:81)。openqa。硒。遥远的远程日志。在main示例中获取(RemoteLogs.java:77)。main(MainExample.java:17)

如果我在有Java脚本错误的自定义页面上运行代码,我会在日志中看到它们:

JavaScript错误:http://localhost/js/app.js?version=625f9736,第1行:类型错误:e未定义

但是我不能用

driver.manage().logs().get(LogType.BROWSER);

我尝试过这个相关主题的不同代码,但每次都会出现这个错误。

我还试图将我的selenium版本降级到3.141.59,但仍然出现同样的错误。

共有1个答案

宇文弘懿
2023-03-14

使用WebDriver日志内点(不支持)

W3C WebDriver还没有定义get-logs终结点。

https://www.w3.org/TR/webdriver/#endpoints

这仍然是开放的:

https://github.com/w3c/webdriver/issues/406

不幸的是,驱动程序。管理()。logs()不是由Firefox实现的。

geckodriver团队:

目前这不在W3C规范中,因此我们将延迟支持,直到行为得到很好的指定。但是你的要求被注意到了。

看到没

>

  • (2016年)https://bugzilla.mozilla.org/show_bug.cgi?id=1453962

    (2016) html" target="_blank">https://github.com/mozilla/geckodriver/issues/284

    (2018) https://github.com/mozilla/geckodriver/issues/1292

    使用DevTools(似乎有效)

    我能够通过selenium-4.1.1devtools看到控制台输出。v85

    package org.example.getlogs
    
    import org.openqa.selenium.WebDriver
    import org.openqa.selenium.devtools.DevTools
    import org.openqa.selenium.devtools.v85.log.Log
    import org.openqa.selenium.firefox.FirefoxDriver
    import org.openqa.selenium.firefox.FirefoxOptions
    
    class GetLogsTest {
    
        public static void main(String[] args) {
            FirefoxOptions options = new FirefoxOptions();
            WebDriver driver = new FirefoxDriver(options);
            DevTools devTools = driver.getDevTools();
            devTools.createSession();
            devTools.send(Log.enable());
            devTools.addListener(Log.entryAdded(),
                    logEntry -> {
                        System.out.println("" + logEntry.getLevel()+ ": " + logEntry.getText());
                    });
            driver.get("https://stackoverflow.com/questions/70787924/how-to-capture-java-script-errors-using-selenium-java-webdriver");
            driver.quit();
        }
    }
    

  •  类似资料:
    • 我想知道是否有一种方法可以在运行自动Selenium测试时捕获页面上的JavaScript错误。

    • 是否可以使用promises的ES6语法捕获异步错误?例如,以下操作不起作用(.catch未捕获错误): 但是这个同步版本有: 使用try/catch块和清除catch中的错误是执行以下操作的唯一解决方案吗? 对于这个问题,假设抛出错误的代码部分位于另一个命名函数中,因此它没有访问函数的权限。 谢谢 编辑:这里有一个更完整的示例,说明我想在JSFIDLE中做什么。

    • 问题内容: 我有一个用户脚本(适用于chrome和FF),该脚本向页面添加了重要功能,但最近由于开发人员向页面添加了一些AJAX而被破坏了。我想修改脚本以侦听xmlhttp请求的页面,以便可以基于页面接收的JSON格式动态更新添加的内容。 搜索显示了许多应该工作的功能,这些功能在控制台中运行时也可以工作。但是,它们在用户脚本的上下文中什么也不做。 它可以在控制台中完美地工作,我可以更改为它,并且效

    • 问题内容: 我只是从Groovy开始。我在任何地方都找不到如何处理Groovy脚本参数的示例,因此我自己修改了此方法。必须有更好的方法来做到这一点?如果是这样,我正在寻找这种更好的方法,因为我可能忽略了显而易见的方法。 问题答案: 如果您想要的不仅仅是进阶参数解析,还可以使用Groovy CliBuilder来帮助您。它可以帮助您使用命令行标志,可选参数和打印用法说明。 签出CliBuilder的

    • 问题内容: 鉴于Java 9已经来临,我们终于可以拥有Java REPL了,我希望有一种方法可以在脚本中添加shebang并对其进行解释。 我尝试创建: 然而,这给出了: 事实证明,OpenJDK https://bugs.openjdk.java.net/browse/JDK-8167440中对此有增强要求。 还有其他方法吗? 问题答案: 用 作为的第一行。该脚本可能如下所示: 当然,命令行选项

    • 问题内容: 我在Python中构建了一个简短的url转换器引擎,并且看到大量的“管道破损”错误,并且很好奇在使用BaseHTTPServer类时如何最好地捕获它。这不是全部代码,但可以让您大致了解我目前正在做什么: 该代码本身运行良好,但是在生产中几乎立即开始引发错误: 这些错误的大部分似乎源于在调用send_header()方法时遇到的问题,其中我要写的是: 所以我很好奇在我的代码中尝试捕获此I