From 0fbae9e18612c0cdc6a2dd0b70404c30f8b16ca0 Mon Sep 17 00:00:00 2001 From: Greg Gauthier Date: Wed, 24 Jul 2024 18:14:56 +0100 Subject: [PATCH] update project for selenium 4, java 17, and gradle 9. Also add a workflow --- .gitea/workflows/build.yml | 32 ++++++++++++++++++++++++ build.gradle | 13 +++++----- gradle/wrapper/gradle-wrapper.properties | 11 ++++---- src/main/java/tools/BrowserDriver.java | 27 ++++++++------------ src/test/java/junit/BrowserTests.java | 12 ++++----- 5 files changed, 60 insertions(+), 35 deletions(-) create mode 100644 .gitea/workflows/build.yml diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..3126656 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,32 @@ +name: msbuild + +on: [push] + +env: + BUILD_TYPE: Release + +jobs: + build: + runs-on: ubuntu-gitea + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: 'adopt' + java-version: '17' + + - name: Install Gradle + run: | + wget https://services.gradle.org/distributions/gradle-8.9-bin.zip + unzip gradle-8.9-bin.zip + export PATH=$PATH:${{gitea.workspace}}/gradle-8.9/bin + + - name: Validate Java installation + run: | + java -version + gradle --version + echo $JAVA_HOME + + - name: Gradle Build + run: | + gradle build \ No newline at end of file diff --git a/build.gradle b/build.gradle index 573c87b..cda8850 100644 --- a/build.gradle +++ b/build.gradle @@ -19,17 +19,16 @@ dependencies { implementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0' implementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0' implementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.7.0' - implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.0.0-alpha-6' - //implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.141.59' - implementation group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '4.2.2' + implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.23.0' + implementation group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '5.9.1' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' - testImplementation 'io.cucumber:cucumber-java:6.7.0' - testImplementation 'io.cucumber:cucumber-junit:6.7.0' + testImplementation 'io.cucumber:cucumber-java:7.18.1' + testImplementation 'io.cucumber:cucumber-junit:7.18.1' } java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } configurations { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4b4429..1bcbcd7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists +#Wed Jul 24 17:16:25 BST 2024 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/src/main/java/tools/BrowserDriver.java b/src/main/java/tools/BrowserDriver.java index 0c258db..c47c2cc 100644 --- a/src/main/java/tools/BrowserDriver.java +++ b/src/main/java/tools/BrowserDriver.java @@ -30,7 +30,7 @@ public class BrowserDriver { case "edge": return getEdge(headless); // headless unsupported until selenium 4 case "safari": - return getSafari(false); // headless unsupported indefinitely + return getSafari(); // headless unsupported indefinitely default: throw new IllegalArgumentException("Invalid browser specified"); } } @@ -38,7 +38,10 @@ public class BrowserDriver { private static RemoteWebDriver getChrome(final Boolean headless){ WebDriverManager.chromedriver().setup(); ChromeOptions options = new ChromeOptions(); - options.setHeadless(headless); + if (headless.equals(true)) { + options.addArguments("--headless"); + } + options.addArguments("--headless"); options.setAcceptInsecureCerts(true); RemoteWebDriver driver = new ChromeDriver(options); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); @@ -48,7 +51,9 @@ public class BrowserDriver { private static RemoteWebDriver getFirefox(final Boolean headless){ WebDriverManager.firefoxdriver().setup(); FirefoxOptions options = new FirefoxOptions(); - options.setHeadless(headless); + if (headless.equals(true)) { + options.addArguments("--headless"); + } options.setAcceptInsecureCerts(true); RemoteWebDriver driver = new FirefoxDriver(options); driver.manage().timeouts().implicitlyWait(7, TimeUnit.SECONDS); @@ -56,18 +61,9 @@ public class BrowserDriver { } private static RemoteWebDriver getEdge(final Boolean headless){ - List osNames = Arrays.asList("Windows 10", "Mac OS X"); - if (!osNames.contains(osName)){ - throw new UnreachableBrowserException("Edge browser not available on this platform"); - } WebDriverManager.edgedriver().setup(); EdgeOptions options = new EdgeOptions(); options.setAcceptInsecureCerts(true); - //if (headless.equals(true)){ // necessary for Selenium 3 - // throw new UnsupportedOperationException("Edge does not support headless execution yet"); - //} - //options.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true); - //** the following will only work once Selenium 4 is ready. if (headless){ options.addArguments("headless"); } @@ -76,18 +72,15 @@ public class BrowserDriver { return driver; } - private static RemoteWebDriver getSafari(final Boolean headless){ + private static RemoteWebDriver getSafari(){ String osName = System.getProperty("os.name"); if (!osName.contentEquals("Mac OS X")){ throw new UnreachableBrowserException("Safari browser not available on this platform"); } - if (headless.equals(true)){ - throw new UnsupportedOperationException("Safari does not support headless execution yet"); - } SafariOptions options = new SafariOptions(); //options.setAcceptInsecureCerts(true); DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); + capabilities.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true); RemoteWebDriver driver = new SafariDriver(options); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); return driver; diff --git a/src/test/java/junit/BrowserTests.java b/src/test/java/junit/BrowserTests.java index 4e6a75e..a953f91 100644 --- a/src/test/java/junit/BrowserTests.java +++ b/src/test/java/junit/BrowserTests.java @@ -29,25 +29,25 @@ public class BrowserTests { @DisplayName("Browser Validation") @ParameterizedTest(name = "Browser: {0}") - @ValueSource(strings = {"chrome", "firefox", "edge", "safari" }) + @ValueSource(strings = {"chrome", "edge" }) void testBrowsers(String browser) { driver = BrowserDriver.getDriver(browser, true); System.out.println(dtf.format(LocalDateTime.now()) + " Navigating to url..."); - String url = "https://duckduckgo.com/"; + String url = "https://search.brave.com/"; driver.get(url); if (!driver.getCurrentUrl().equals(url)){ fail("Browser navigation failed"); } System.out.println(dtf.format(LocalDateTime.now()) + " Entering search now..."); RemoteWebElement searchBox = - (RemoteWebElement)driver.findElementByXPath("//input[@id='search_form_input_homepage']"); + (RemoteWebElement)driver.findElement(By.xpath("//*[@id='searchbox']")); searchBox.sendKeys("frankenberries"); searchBox.sendKeys(Keys.ENTER); System.out.println(dtf.format(LocalDateTime.now())+ " Checking search results..."); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10),Duration.ofMillis(100)); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='links']"))); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10),Duration.ofMillis(1000)); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='results']"))); RemoteWebElement results = - (RemoteWebElement)driver.findElementByPartialLinkText("Monster cereal"); + (RemoteWebElement)driver.findElement(By.partialLinkText("Monster cereals")); System.out.println(results.getText()); Assertions.assertNotNull(results); }