From 15c4641eed23538a84fcc9c528d304be7c9eb2d1 Mon Sep 17 00:00:00 2001 From: labkey-tchad Date: Tue, 21 Jan 2025 12:19:58 -0800 Subject: [PATCH] Handle MultipleFailureException thrown by tests --- src/org/labkey/test/BaseWebDriverTest.java | 37 ++++++++++++---------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/org/labkey/test/BaseWebDriverTest.java b/src/org/labkey/test/BaseWebDriverTest.java index cff19774ce..542dbcf5ba 100644 --- a/src/org/labkey/test/BaseWebDriverTest.java +++ b/src/org/labkey/test/BaseWebDriverTest.java @@ -37,6 +37,7 @@ import org.junit.rules.TestRule; import org.junit.rules.Timeout; import org.junit.runner.Description; +import org.junit.runners.model.MultipleFailureException; import org.junit.runners.model.Statement; import org.junit.runners.model.TestTimedOutException; import org.labkey.junit.rules.TestWatcher; @@ -928,7 +929,17 @@ private void handleFailure(Throwable error, @LoggedParam String testName) _testFailed = true; _anyTestFailed = true; - error.printStackTrace(); + if (error instanceof MultipleFailureException mfe) + { + // Only "handle" primary test failure. Just log failures thrown during @After or @AfterClass methods. + error = mfe.getFailures().get(0); + for (int i = 1; i < mfe.getFailures().size(); i++) + { + TestLogger.error("Secondary error after test:", mfe.getFailures().get(i)); + } + } + + TestLogger.error("Primary test failure:", error); if (Thread.interrupted() || wasCausedBy(error, Arrays.asList(TestTimedOutException.class, InterruptedException.class))) { @@ -1042,24 +1053,16 @@ private void handleFailure(Throwable error, @LoggedParam String testName) try { - boolean inIFrame = Locator.css(":root").findElement(getDriver()).getSize().getHeight() > 0; - if (inIFrame) + try { - // TODO: Need a better way to detect when we are in an iFrame. Above method is not reliable - //if (isFirefox()) // As of 2.45, Chromedriver screenshots are not restricted to currently focused iFrame - //{ - // getArtifactCollector().dumpPageSnapshot(testName + "-iframe", null, false); // Snapshot of iFrame - //} - try - { - // Switch to default content just in case we're in an iFrame - getDriver().switchTo().defaultContent(); - } - catch (UnhandledAlertException alert) - { - TestLogger.warn("Alert was triggered by iframe: " + WebDriverUtils.getUnhandledAlertText(alert, getDriver())); - } + // Switch to default content just in case we're in an iFrame + getDriver().switchTo().defaultContent(); } + catch (UnhandledAlertException alert) + { + TestLogger.warn("Alert was triggered by iframe: " + WebDriverUtils.getUnhandledAlertText(alert, getDriver())); + } + // Don't take screenshots if error was deferred and any screenshots were taken if (!(error instanceof DeferredErrorCollector.DeferredAssertionError)) {