HAR неполный при использовании прокси BrowserMob в расширении для Arquillian Drone - PullRequest
1 голос
/ 20 июня 2019

Я написал расширение для Arquillian-Drone, которое должно записывать HTTP-запросы теста и создавать HAR-файл для каждого метода.Файлы HAR создаются (в большинстве случаев ... в настоящий момент они немного нестабильны), но они не содержат URL-адресов HTTP-запросов

Я нашел еще один вопрос здесьstackoverflow, описывающий тот же результат, но ответ в моем случае не дал решения.

(Ticket: BrowserMob Proxy + Selenium: не получено ни одного ответа HTTP )

Instantiator :

@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", "version": "2.1.5", "comment": ""},

"pages": [{"id": " arquilliantest1561033479096minimaltestAnlegenKrankheit ", "startDateTime": "2019-06-20T12: 24: 39.316Z", "title": " arquilliantest15610334790itk минимальный тест 10 минимальный тест* "," pageTimings ": {" comment ":" "}," comment ":" "}],

" records ": [{" pageref ":" arquilliantest1561033479096minimaltestAnlegenKrankheit "," startDateTime ":" 2019-06-20T12: 24: 40.032Z ",

" request ": {" method ":" POST "," url ":" https://shavar.services.mozilla.com/downloads?client=navclient-auto- ffox & appver = 67.0 & pver= 2.2 "," httpVersion ":" HTTP / 1.1 "," cookies ": []," headers ": [],

, поэтому кажется, что URL-адреса каким-то образом заменены на HAR-имя (как в другом билете)

Я уже использую BrowserMob, как это было предложено в другом билете:

группа компиляции: 'net.lightbody.bmp', name: 'browsermob-core ', версия:' 2.1.5 '

любые идеи будут высоко оценены!

edit: я использую следующие версии :

  • Ядро Browsermob: 2.1.5
  • Arquillian: 1.4.1-Final
  • Drone: 2.5.1
  • Селен: 3.14.0
  • Firefox 67.0
  • GeckoDriver: 0.24.0

edit

Мне кажется, я знаю корень проблемы:отслеживание защиты Firefox.Я попытался реализовать профиль Firefox, для которого для параметра «Предпочтение для отслеживания» установлено значение «false», но изменения не отображаются в моем браузере.Есть ли что-то, что необходимо учитывать при изменении предпочтений?

1 Ответ

0 голосов
/ 21 июня 2019

Я бы назвал newPage, чтобы вы не получили странный заголовок. Запросы сгруппированы по страницам. URL-адреса будут находиться в разделе записей и будут иметь страницу перехода, которую вы передадите на новую страницу. Похоже, вы еще не захватываете трафик, так что это еще одна проблема для отладки.

...