From 7eeb5189cbcdd17dab6da356f0fe085049004950 Mon Sep 17 00:00:00 2001 From: Ivan Kalinin Date: Mon, 22 Aug 2022 14:00:24 +0300 Subject: [PATCH] [plugin-web-app] Refactor console validation steps --- .../selenium/logging/BrowserLogManager.java | 8 +--- .../steps/ui/web/JsValidationSteps.java | 40 +++++++++++-------- .../steps/ui/web/JsValidationStepsTests.java | 14 ++++--- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/vividus-plugin-web-app/src/main/java/org/vividus/selenium/logging/BrowserLogManager.java b/vividus-plugin-web-app/src/main/java/org/vividus/selenium/logging/BrowserLogManager.java index 9f851638d9..a805226c99 100644 --- a/vividus-plugin-web-app/src/main/java/org/vividus/selenium/logging/BrowserLogManager.java +++ b/vividus-plugin-web-app/src/main/java/org/vividus/selenium/logging/BrowserLogManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 the original author or authors. + * Copyright 2019-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -73,10 +73,6 @@ private static Optional getLog(WebDriver driver, boolean ignoreUnsup private static Stream filter(LogEntries log, Level level) { int levelValue = level.intValue(); - return log.getAll().stream().filter(logEntry -> - { - int logEntryLevel = logEntry.getLevel().intValue(); - return logEntryLevel >= levelValue && logEntryLevel <= levelValue; - }); + return log.getAll().stream().filter(logEntry -> levelValue == logEntry.getLevel().intValue()); } } diff --git a/vividus-plugin-web-app/src/main/java/org/vividus/steps/ui/web/JsValidationSteps.java b/vividus-plugin-web-app/src/main/java/org/vividus/steps/ui/web/JsValidationSteps.java index c2f350d9de..f84fdfd8a9 100644 --- a/vividus-plugin-web-app/src/main/java/org/vividus/steps/ui/web/JsValidationSteps.java +++ b/vividus-plugin-web-app/src/main/java/org/vividus/steps/ui/web/JsValidationSteps.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 the original author or authors. + * Copyright 2019-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import java.util.Map; import java.util.Set; import java.util.function.Predicate; +import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.inject.Inject; @@ -52,14 +53,9 @@ public class JsValidationSteps * @param regex Regular expression to filter log entries */ @Then("there are browser console $logEntries by regex `$regex`") - public void checkThereAreLogEntriesOnOpenedPageFiltredByRegExp(List logEntries, String regex) + public void checkThereAreLogEntriesOnOpenedPageFilteredByRegExp(List logEntries, Pattern regex) { - WebDriver webDriver = webDriverProvider.get(); - Set filteredLogEntries = BrowserLogManager.getFilteredLog(webDriver, logEntries).stream() - .filter(logEntry -> logEntry.getMessage().matches(regex)) - .collect(Collectors.toSet()); - - publishAttachment(Map.of(webDriver.getCurrentUrl(), filteredLogEntries)); + Set filteredLogEntries = getLogEntries(logEntries, regex); softAssert.assertFalse(String.format("Current page contains JavaScript %s by regex '%s'", toString(logEntries), regex), filteredLogEntries.isEmpty()); } @@ -77,8 +73,8 @@ public void checkThereAreLogEntriesOnOpenedPageFiltredByRegExp(List logEntries) { - checkFilteredJsEntries(logEntries, - e -> includeBrowserExtensionLogEntries || !e.getMessage().contains("extension")); + checkLogMessagesAbsence(getLogEntries(logEntries, + e -> includeBrowserExtensionLogEntries || !e.getMessage().contains("extension")), logEntries); } /** @@ -93,21 +89,31 @@ public void checkJsLogEntriesOnOpenedPage(List logEntries) * @param regex Regular expression to filter log entries */ @Then(value = "there are no browser console $logEntries by regex '$regex'", priority = 1) - public void checkJsLogEntriesOnOpenedPageFiltredByRegExp(List logEntries, String regex) + public void checkJsLogEntriesOnOpenedPageFilteredByRegExp(List logEntries, Pattern regex) + { + checkLogMessagesAbsence(getLogEntries(logEntries, regex), logEntries); + } + + private void checkLogMessagesAbsence(Set logEntries, List logLevels) { - checkFilteredJsEntries(logEntries, logEntry -> logEntry.getMessage().matches(regex)); + softAssert.assertEquals("Current page contains no JavaScript " + toString(logLevels), 0, + logEntries.size()); } - private void checkFilteredJsEntries(List logLevels, Predicate filter) + private Set getLogEntries(List logEntries, Predicate filter) { WebDriver webDriver = webDriverProvider.get(); - Set filteredLogEntries = BrowserLogManager.getFilteredLog(webDriver, logLevels).stream() - .filter(filter) + Set filteredLogEntries = BrowserLogManager.getFilteredLog(webDriver, logEntries).stream() + .filter(filter::test) .collect(Collectors.toSet()); publishAttachment(Map.of(webDriver.getCurrentUrl(), filteredLogEntries)); - softAssert.assertEquals("Current page contains no JavaScript " + toString(logLevels), 0, - filteredLogEntries.size()); + return filteredLogEntries; + } + + private Set getLogEntries(List logEntries, Pattern regex) + { + return getLogEntries(logEntries, message -> regex.matcher(message.getMessage()).matches()); } private void publishAttachment(Map> results) diff --git a/vividus-plugin-web-app/src/test/java/org/vividus/steps/ui/web/JsValidationStepsTests.java b/vividus-plugin-web-app/src/test/java/org/vividus/steps/ui/web/JsValidationStepsTests.java index d4129a320e..06da943b88 100644 --- a/vividus-plugin-web-app/src/test/java/org/vividus/steps/ui/web/JsValidationStepsTests.java +++ b/vividus-plugin-web-app/src/test/java/org/vividus/steps/ui/web/JsValidationStepsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 the original author or authors. + * Copyright 2019-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ import java.util.Map; import java.util.Set; import java.util.logging.Level; +import java.util.regex.Pattern; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -52,7 +53,9 @@ class JsValidationStepsTests { private static final String URL = "url"; private static final String ERROR_MESSAGE = "error message"; + private static final Pattern ERROR_MESSAGE_PATTERN = Pattern.compile(ERROR_MESSAGE); private static final String EXTENSION = "extension "; + private static final Pattern EXTENSION_PATTERN = Pattern.compile(EXTENSION); private static final String ERRORS_ASSERTION_DESCRIPTION = "Current page contains no JavaScript errors"; @Mock @@ -68,11 +71,11 @@ class JsValidationStepsTests private JsValidationSteps jsValidationSteps; @Test - void testCheckThereAreLogEntriesOnOpenedPageFiltredByRegExp() + void testCheckThereAreLogEntriesOnOpenedPageFilteredByRegExp() { Map> expectedResults = testCheckJsErrors(ERROR_MESSAGE, () -> jsValidationSteps - .checkThereAreLogEntriesOnOpenedPageFiltredByRegExp(singletonList(BrowserLogLevel.ERRORS), - ERROR_MESSAGE)); + .checkThereAreLogEntriesOnOpenedPageFilteredByRegExp(singletonList(BrowserLogLevel.ERRORS), + ERROR_MESSAGE_PATTERN)); InOrder inOrder = inOrder(attachmentPublisher, softAssert); verifyAttachmentPublisher(expectedResults, inOrder); inOrder.verify(softAssert).assertFalse(String.format("Current page contains JavaScript %s by regex '%s'", @@ -91,7 +94,8 @@ void testCheckJsErrorsOnPage() void testCheckJsErrorsOnPageByRegExpNoMatch() { testCheckJsErrors(ERROR_MESSAGE, () -> jsValidationSteps - .checkJsLogEntriesOnOpenedPageFiltredByRegExp(singletonList(BrowserLogLevel.ERRORS), EXTENSION)); + .checkJsLogEntriesOnOpenedPageFilteredByRegExp(singletonList(BrowserLogLevel.ERRORS), + EXTENSION_PATTERN)); verifyTestActions(Map.of(URL, Collections.emptySet()), ERRORS_ASSERTION_DESCRIPTION); }