From 0c76371d59f549b3de4af4bbe132c52f84e30f8f Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 6 Sep 2023 08:25:17 -0500 Subject: [PATCH] Add maven-jar-plugin to publish qfmd's test classes in a jar (e.g., for inclusion in applications for selenium testing); Updates in library classes to support alternative usages --- pom.xml | 14 ++++ .../lib/QBaseSeleniumTest.java | 24 ++++-- .../materialdashboard/lib/QSeleniumLib.java | 84 +++++++++++++++++++ 3 files changed, 117 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 83eb339..e3768cc 100644 --- a/pom.xml +++ b/pom.xml @@ -161,6 +161,20 @@ true + + + + maven-jar-plugin + + + package + + test-jar + + + + + diff --git a/src/test/java/com/kingsrook/qqq/materialdashboard/lib/QBaseSeleniumTest.java b/src/test/java/com/kingsrook/qqq/materialdashboard/lib/QBaseSeleniumTest.java index 8f3ece1..e88b1b1 100755 --- a/src/test/java/com/kingsrook/qqq/materialdashboard/lib/QBaseSeleniumTest.java +++ b/src/test/java/com/kingsrook/qqq/materialdashboard/lib/QBaseSeleniumTest.java @@ -18,7 +18,7 @@ import org.openqa.selenium.chrome.ChromeOptions; *******************************************************************************/ public class QBaseSeleniumTest { - private static ChromeOptions chromeOptions; + protected static ChromeOptions chromeOptions; protected WebDriver driver; protected QSeleniumJavalin qSeleniumJavalin; @@ -52,15 +52,29 @@ public class QBaseSeleniumTest ** *******************************************************************************/ @BeforeEach - void beforeEach() + public void beforeEach() { driver = new ChromeDriver(chromeOptions); driver.manage().window().setSize(new Dimension(1700, 1300)); qSeleniumLib = new QSeleniumLib(driver); - qSeleniumJavalin = new QSeleniumJavalin(); - addJavalinRoutes(qSeleniumJavalin); - qSeleniumJavalin.start(); + if(useInternalJavalin()) + { + qSeleniumJavalin = new QSeleniumJavalin(); + addJavalinRoutes(qSeleniumJavalin); + qSeleniumJavalin.start(); + } + } + + + + /******************************************************************************* + ** control if the test needs to start its own javalin server, or if we're running + ** in an environment where an external web server is being used. + *******************************************************************************/ + protected boolean useInternalJavalin() + { + return (true); } diff --git a/src/test/java/com/kingsrook/qqq/materialdashboard/lib/QSeleniumLib.java b/src/test/java/com/kingsrook/qqq/materialdashboard/lib/QSeleniumLib.java index 9bbc344..2b28423 100755 --- a/src/test/java/com/kingsrook/qqq/materialdashboard/lib/QSeleniumLib.java +++ b/src/test/java/com/kingsrook/qqq/materialdashboard/lib/QSeleniumLib.java @@ -5,6 +5,7 @@ import java.io.File; import java.time.Duration; import java.util.List; import java.util.Objects; +import java.util.Set; import org.apache.commons.io.FileUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -96,6 +97,17 @@ public class QSeleniumLib + /******************************************************************************* + ** Getter for BASE_URL + ** + *******************************************************************************/ + public String getBaseUrl() + { + return BASE_URL; + } + + + /******************************************************************************* ** *******************************************************************************/ @@ -265,6 +277,31 @@ public class QSeleniumLib + /******************************************************************************* + ** + *******************************************************************************/ + public void waitForNumberOfWindowsToBe(int number) + { + LOG.debug("Waiting for number of windows (tabs) to be [" + number + "]"); + long start = System.currentTimeMillis(); + + do + { + if(driver.getWindowHandles().size() == number) + { + LOG.debug("Number of windows (tabs) is [" + number + "]"); + return; + } + + sleepABit(); + } + while(start + (1000 * WAIT_SECONDS) > System.currentTimeMillis()); + + fail("Failed waiting for number of windows (tabs) to be [" + number + "] after [" + WAIT_SECONDS + "] seconds."); + } + + + /******************************************************************************* ** *******************************************************************************/ @@ -293,6 +330,53 @@ public class QSeleniumLib + /******************************************************************************* + ** + *******************************************************************************/ + public void switchToSecondaryTab() + { + String originalWindow = driver.getWindowHandle(); + + waitForNumberOfWindowsToBe(2); + + Set windowHandles = driver.getWindowHandles(); + for(String windowHandle : windowHandles) + { + if(!windowHandle.equals(originalWindow)) + { + driver.switchTo().window(windowHandle); + return; + } + } + + fail("Failed to find a window handle not equal to the original window handle. Original=[" + originalWindow + "]. All=[" + windowHandles + "]"); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public void closeSecondaryTab() + { + String originalWindow = driver.getWindowHandle(); + driver.close(); + + Set windowHandles = driver.getWindowHandles(); + for(String windowHandle : windowHandles) + { + if(!windowHandle.equals(originalWindow)) + { + driver.switchTo().window(windowHandle); + return; + } + } + + fail("Failed to find a window handle not equal to the original window handle. Original=[" + originalWindow + "]. All=[" + windowHandles + "]"); + } + + + @FunctionalInterface public interface Code {