t.me/atinfo_chat Telegram группа по автоматизации тестирования

Перехват ошибок js из консоли браузера java+selenium

java
selenium
webdriver
javascript
Теги: #<Tag:0x00007f9c54774dc0> #<Tag:0x00007f9c54774c58> #<Tag:0x00007f9c54774b18> #<Tag:0x00007f9c547749b0>

(Максим Лаптев) #1

Стоит задача собирать ошибки js при загрузке страницы.
Собственно кусок кода ниже отрабатывает, но перехватывает только 1 ошибку TypeError, но если зайти в консоль браузера, там отображается много js проблем.
пробовал сторонний сайт, где консоли браузера много ошибок js, в итоге не перехватил ни одну.
Каким образом оптимизировать код ниже, чтобы собирал все что есть в консоли браузера?

Код на java
при инициализации драйвера

 LoggingPreferences logPrefs = new LoggingPreferences();
            logPrefs.enable(LogType.BROWSER, Level.ALL);
            options.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
            driver = new ChromeDriver(options);

Сама функция перехвата

        Set<String> errorStrings = new HashSet<>();
        errorStrings.add("SyntaxError");
        errorStrings.add("EvalError");
        errorStrings.add("ReferenceError");
        errorStrings.add("RangeError");
        errorStrings.add("TypeError");
        errorStrings.add("URIError");

        LogEntries logEntries = driver.manage().logs().get(LogType.BROWSER);

        for (LogEntry logEntry : logEntries) {
            for (String errorString : errorStrings) {

                if (logEntry.getMessage().contains(errorString)) {
                    System.out.println(new Date(logEntry.getTimestamp()) + " " + logEntry.getLevel() + " " + logEntry.getMessage());
                    return true;
                }

            }
        }
        return false;
    }

(Ray Romanov) #2

Вот ссылка https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities,
обрати внимание на получение дынных из SEVERE.


(Максим Лаптев) #3

Сделал так

 public void isThereJSErrorOnThePage() {
        Logs log = driver.manage().logs();
        List<LogEntry> logsEntries = log.get("browser").filter(Level.SEVERE);

        for (LogEntry entry : logsEntries) {
                    System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " " + entry.getMessage());
        }
    }

Но появились 2 проблемы,
1 - почему-то вывод ошибок дублируется

Thu May 02 21:02:40 GMT+03:00 2019 SEVERE URL1 3:4985 Uncaught TypeError:
Thu May 02 21:02:40 GMT+03:00 2019 SEVERE URL1 3:4985 Uncaught TypeError:
Thu May 02 21:02:40 GMT+03:00 2019 SEVERE URL1 3:4985 Uncaught TypeError:
Thu May 02 21:02:40 GMT+03:00 2019 SEVERE URL1 3:4985 Uncaught TypeError:
Thu May 02 21:02:40 GMT+03:00 2019 SEVERE URL1 3:4985 Uncaught TypeError:
Thu May 02 21:02:40 GMT+03:00 2019 SEVERE URL1 3:4985 Uncaught TypeError: 


Thu May 02 21:02:42 GMT+03:00 2019 SEVERE URL2 - Failed to load resource: the server responded with a status of 404 (Not Found)
Thu May 02 21:02:42 GMT+03:00 2019 SEVERE URL2 - Failed to load resource: the server responded with a status of 404 (Not Found)
Thu May 02 21:02:42 GMT+03:00 2019 SEVERE URL2 - Failed to load resource: the server responded with a status of 404 (Not Found)
Thu May 02 21:02:42 GMT+03:00 2019 SEVERE URL2 - Failed to load resource: the server responded with a status of 404 (Not Found)

2 - как отметать ошибки с текстом 404?


(Максим Лаптев) #4

Тему можно закрывать, все работало и до этого, в первом сообщении работающий код и можно туда добить ошибки 404 и все будет ок