【问题标题】:How to capture java script errors using Selenium Java WebDriver如何使用 Selenium Java WebDriver 捕获 Java 脚本错误
【发布时间】:2022-01-20 14:24:48
【问题描述】:

我正在尝试使用 Java Selenium WebDriver 捕获网页的所有 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.tar.gz

这是我的 Selenium 版本:

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

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

驱动程序信息:driver.version:RemoteWebDriver at org.openqa.selenium.json.JsonInput.peek(JsonInput.java:122) 在 org.openqa.selenium.json.JsonTypeCoercer.lambda$null$6(JsonTypeCoercer.java:140) 在 org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:126) 在 org.openqa.selenium.json.Json.toType(Json.java:69) 在 org.openqa.selenium.json.Json.toType(Json.java:55) 在 org.openqa.selenium.json.Json.toType(Json.java:50) 在 org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:87) 在 org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) 在 org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) 在 org.openqa.selenium.remote.RemoteExecuteMethod.execute(RemoteExecuteMethod.java:35) 在 org.openqa.selenium.remote.RemoteLogs.getRemoteEntries(RemoteLogs.java:81) 在 org.openqa.selenium.remote.RemoteLogs.get(RemoteLogs.java:77) 在 MainExample.main(MainExample.java:17)

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

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

但我无法使用

检索它们
driver.manage().logs().get(LogType.BROWSER);

我尝试了this related subject 的不同代码,但每次都出现此错误。

我也尝试将我的 selenium 版本降级到 3.141.59,但我仍然遇到同样的错误。

【问题讨论】:

    标签: javascript java selenium selenium-webdriver


    【解决方案1】:

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

    W3C WebDriver 还没有定义 get-logs 端点..

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

    这仍然打开:

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

    所以,很遗憾,driver.manage().logs() 没有被 Firefox 实现。

    来自 geckodriver 团队:

    目前这不在 W3C 规范中,因此我们将延迟支持,直到明确指定行为为止。但您的要求已被记录。


    使用 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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-05
      • 2021-02-28
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 2015-04-05
      • 2015-04-15
      • 1970-01-01
      • 2016-06-13
      相关资源
      最近更新 更多