【问题标题】:HAR incomplete when using BrowserMob Proxy in an Extension for Arquillian Drone在 Arquillian Drone 的扩展中使用 BrowserMob 代理时,HAR 不完整
【发布时间】:2023-03-29 03:18:02
【问题描述】:

我为 Arquillian-Drone 编写了一个扩展,它应该记录测试的 HTTP 请求并为每个方法创建一个 HAR 文件。 HAR 文件已创建(大部分时间......目前似乎有点不稳定),但它们不包含 HTTP 请求的 URL

我在 stackoverflow 上发现了另一个问题,描述了相同的结果,但答案在我的情况下没有解决方案。

(票务:BrowserMob Proxy + Selenium: Not receiving any HTTP responses

实例化器

@Override
public FirefoxDriver createInstance(WebDriverConfiguration arg0) {
    server.setTrustAllServers(true);
    server.setHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
    server.start();

    System.err.println("BrowserMob Proxy running on port: " + server.getPort());

    seleniumProxy = ClientUtil.createSeleniumProxy(server);

    try {
        hostIp = Inet4Address.getLocalHost().getHostAddress();
        seleniumProxy.setHttpProxy(hostIp + ":" + server.getPort());
        seleniumProxy.setSslProxy(hostIp + ":" + server.getPort());
    } catch (UnknownHostException e1) {
        e1.printStackTrace();
        System.err.println("invalid Host Address");
    }

    options.setCapability(CapabilityType.PROXY, seleniumProxy);
    options.setAcceptInsecureCerts(true);

    geckoService = new GeckoDriverService.Builder()
            .usingDriverExecutable(new File("C:/Program Files/GeckoDriver/geckodriver.exe")).usingAnyFreePort()
            .build();

    try {
        geckoService.start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    return new FirefoxDriver(geckoService, options);

}

观察者

public void prepareHAR(@Observes EventContext<Test> context) throws IOException {
    harFileName = "arquilliantest" + System.currentTimeMillis() + context.getEvent().getTestMethod().getName();
    server.newHar(harFileName);
    if (server.getHar() != null) {
        System.err.print(harFileName + " is prepared");
    } else {
        throw new RuntimeException("HAR was not created!");
    }
    context.proceed();

}

public void writeHAR(@Observes EventContext<After> context) throws IOException {
    Har har = server.getHar();
    String pfad = System.getProperty("user.dir") + File.separator + harFileName + ".har";
    if (!server.getHar().getLog().getEntries().isEmpty()) {
        File harFile = new File(pfad);
        har.writeTo(harFile);
        System.err.print(pfad + " is saved");

        List<HarEntry> entries = har.getLog().getEntries();
        for (HarEntry entry : entries) {
            System.err.println("Request URL: " + entry.getRequest().getUrl());
            System.err.println("Entry response status: " + entry.getResponse().getStatus());
            System.err.println("Entry response text: " + entry.getResponse().getStatusText());

        }

    } else {
        throw new RuntimeException("HAR is empty!");
    }

    // server.newHar(harFileName);

    context.proceed();

}

public void closeServer(@Observes EventContext<AfterClass> context) throws IOException {
    server.endHar();
    server.stop();
    geckoService.stop();

    context.proceed();

}

截取我的 HAR:

{"log":{"version":"1.2","creator":{"name":"BrowserMob 代理","版本":"2.1.5","comment":""},

“页面”: [{"id":"arquilliantest1561033479096minimaltestAnlegenKrankheit", "startedDateTime":"2019-06-20T12:24:39.316Z", "title":"arquilliantest1561033479096minimaltestAnlegenKrankheit", "pageTimings":{"comment":""},"comment":""}],

“条目”: [{"pageref":"arquilliantest1561033479096minimaltestAnlegenKrankheit", "startedDateTime":"2019-06-20T12:24:40.032Z",

“请求”: {"方法":"POST", "网址":"https://shavar.services.mozilla.com/downloads?client=navclient-auto- ffox&appver=67.0&pver=2.2", "httpVersion":"HTTP/1.1", “饼干”:[], “标题”:[],

所以看起来这些 url 以某种方式被 HAR 名称替换(就像在另一张票中一样)

我已经按照另一张票中的建议使用 BrowserMob:

编译组:'net.lightbody.bmp',名称:'browsermob-core',版本:'2.1.5'

任何想法将不胜感激!

编辑: 我使用以下版本

  • Browsermob 核心:2.1.5
  • Arquillian:1.4.1-决赛
  • 无人机:2.5.1
  • 硒:3.14.0
  • 火狐67.0
  • GeckoDriver:0.24.0

编辑

我想我知道问题的根源:Firefox 的跟踪保护。我尝试实现一个 Firefox 配置文件,该配置文件将跟踪保护的首选项设置为 false,但不知何故,这些更改不会显示在我的浏览器中。更改偏好时有什么需要考虑的吗?

【问题讨论】:

    标签: java jboss-arquillian browsermob-proxy har arquillian-drone


    【解决方案1】:

    我现在找到了解决我的问题的方法:1. BrowserMob(或 BrowserUp)ProxyServer 需要在 Drone Initializer 创建驱动程序(我使用 ManagerStarted)之前初始化并在事件中启动 2. Firefox 浏览器打开关闭对本地主机请求的代理(至少在它处于自动化模式时)。对此的解决方法是添加此首选项: options.addPreference("network.proxy.allow_hijacking_localhost", true);

    希望这对其他人有帮助:)

    【讨论】:

      【解决方案2】:

      我会打电话给 newPage,这样你就不会得到奇怪的标题。请求被分组到页面中。 URL 将位于条目部分,并将包含您传递给 newpage 的 pageref。看起来您还没有捕获流量,所以这是另一个需要调试的问题。

      【讨论】:

      • “奇怪的标题”实际上是必需的。它的构造类似于“arquilliantest”+timestamp+NameOfTheTestMethod 实际问题是 HAR 文件中没有 HTTP 请求(就像我在原始问题中所说的那样)
      • 很难说是怎么写的?你的意图是什么“似乎这些 url 以某种方式替换为 HAR 名称”
      • 感谢输入。那些错误不应该适用于我。 (也试过了,但没有帮助)我将版本号添加到原始帖子中以获得更多说明。
      猜你喜欢
      • 2016-08-19
      • 1970-01-01
      • 2019-02-02
      • 2016-11-04
      • 1970-01-01
      • 2019-12-10
      • 2016-10-09
      • 2019-10-09
      • 1970-01-01
      相关资源
      最近更新 更多