Как создать Har файл из Java с помощью селена вебдрайвер без автоэкспорта?

Я использую netexport API с Firebug в Селен для автоматизации.

Есть два случая.

  1. Автоматический экспорт: я включил эту опцию в java с пользовательским профилем FF, и файл har автоматически генерируется после загрузки страницы. Я могу также проанализировать файл.

2. На некоторых страницах есть вызовы Ajax и обновление его ответа, в частности DIV . Поэтому я не могу перехватить / сохранить файл har для конкретного запроса ajax (служба REST), поскольку страница не загружается. Я хочу детали запроса / ответа.

Можно ли вручную экспортировать файл har из селена webdriver в Java?

Было бы хорошо, если бы у нас была какая-либо команда / функция в селеновом веб-драйвере (java), которая будет возвращать файл har или строку json, мы можем вызывать это всякий раз, когда это необходимо.
Опция автоэкспорта генерирует файл har для каждой загрузки страницы.

https://groups.google.com/forum/#!topic/http-archive-specification/73jf6K_FK3c

2 ответа

Решение

Найден обходной путь для ручного экспорта файла из java с использованием скрипта AutoIt.
Необходимость включить плагин firebug в Firefox, и по умолчанию будет отображаться сетевая панель, и у нас есть возможность вручную экспортировать файл har.
Используя инструмент Autoit, мы можем записать функцию ручного экспорта и скомпилировать скрипт, который даст файл.exe, который мы можем вызвать exe-файл из java .

Используйте PhantomJS с BrowserMobProxy. PhantomJS помогает нам для страниц с поддержкой JavaScript. Следующий код работает и для веб-адресов HTTPS.

Поместите phantomjs.exe на диск C, и вы получите файл 'HAR-Information.har' на самом диске C.

Убедитесь, что вы НЕ ставите "/" в конце URL, как

driver.get("https://www.google.co.in/")

Так должно быть

driver.get("https://www.google.co.in");

Иначе это не сработает.

package makemyhar;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.proxy.CaptureType;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

public class MakeMyHAR {
    public static void main(String[] args) throws IOException, InterruptedException {

        //BrowserMobProxy
        BrowserMobProxy server = new BrowserMobProxyServer();
        server.start(0);
        server.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes());
        server.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
        server.newHar("Google");

        //PHANTOMJS_CLI_ARGS
        ArrayList<String> cliArgsCap = new ArrayList<>();
        cliArgsCap.add("--proxy=localhost:"+server.getPort());
        cliArgsCap.add("--ignore-ssl-errors=yes");

        //DesiredCapabilities
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        capabilities.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT, true);
        capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
        capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,"C:\\phantomjs.exe");

        //WebDriver
        WebDriver driver = new PhantomJSDriver(capabilities);
        driver.get("https://www.google.co.in");

        //HAR
        Har har = server.getHar();
        FileOutputStream fos = new FileOutputStream("C:\\HAR-Information.har");
        har.writeTo(fos);
        server.stop();
        driver.close();
    }
}
Другие вопросы по тегам