Получение журнала консоли из Firefox 43 с Selenium без расширений Firefox

Можно ли получить console.log браузеров с помощью Selenium и Firefox 43? Если да, то как?

Вот мои настройки:

DesiredCapabilities capabilities = DesiredCapabilities.firefox();
LoggingPreferences logs = new LoggingPreferences();
logs.enable(LogType.BROWSER, Level.ALL);
logs.enable(LogType.DRIVER, Level.ALL);
logs.enable(LogType.CLIENT, Level.ALL);
logs.enable(LogType.PERFORMANCE, Level.ALL);
logs.enable(LogType.PROFILER, Level.ALL);
logs.enable(LogType.SERVER, Level.ALL);
capabilities.setCapability(CapabilityType.LOGGING_PREFS, logs);

FirefoxBinary binary = new FirefoxBinary(new File(...));
FirefoxProfile profile = new FirefoxProfile();
WebDriver driver = new FirefoxDriver(binary, profile, capabilities);

//...doing things with the driver ...

driver.manage().logs().get(LogType.BROWSER) // already tried every LogType

Единственный вывод, который я получаю от этого, выглядит примерно так:

1450878255029   addons.xpi  DEBUG   startup
...
Error in parsing value for 'display'.  Declaration dropped.

Но не вывод, который записан в журнале консоли javascript браузера.

Я уже пробовал несколько настроек профиля FF, например:

profile.setPreference("extensions.sdk.console.logLevel", "all");
profile.setPreference("webdriver.log.file",tempfile.getAbsolutePath());
profile.setPreference("webdriver.firefox.logfile", othertempfile.getAbsolutePath());
profile.setPreference("webdriver.log.driver", "ALL");

Пока ничего не помогло. В Chrome это работает безупречно.

Версия Selenium: 2.48.2 Версия Firefox: 43.0.2


person Yser    schedule 23.12.2015    source источник


Ответы (1)


Я была такая же проблема. Я получил только весь этот журнальный шум о css, безопасности, сети и многом другом, но не о том, что на самом деле было зарегистрировано приложением через console.log. Я использую ту же версию для webdriver и firefox, что и вы. Для других браузеров это не было проблемой.

В итоге я расширил свой клиентский код пользовательской записью журнала. Говоря в терминах проводного протокола:

  • используйте execute, чтобы поместить что-то вроде следующего в клиент
window.recordedLogs = [];

console.log = function (message) {

    if (typeof message === 'object') {
        message = JSON.stringify(message);
    }

    window.recordedLogs.push(message);
};
  • используйте execute, чтобы получить window.recordedLogs

Предупреждение: приведенный выше код очень упрощен, он не обрабатывает несколько сообщений, передаваемых в метод журнала, и не обрабатывает другие методы журнала, такие как информация, ошибка и т. д.

Однако это может быть хорошей альтернативой методу проводного протокола log, совместимому с несколькими браузерами.

person Sebastian Gröbler    schedule 26.01.2016
comment
Вопрос: как убедиться, что этот код действительно внедряется на каждую страницу, если вы тестируете многостраничный поток? Вот с чем я борюсь - person Kutzi; 07.12.2016