From 4671d41decede0c9b1145fec19e0290d03f1cd2e Mon Sep 17 00:00:00 2001 From: Juho Saarinen Date: Sat, 25 Jan 2025 12:18:15 +0200 Subject: [PATCH 1/4] deps: update dependencies --- DEPENDENCIES.md | Bin 14294 -> 8149 bytes README.md | 14 +++--- pom.xml | 42 +++++++----------- .../keywords/BrowserManagement.java | 18 ++++---- .../keywords/BrowserManagementTest.java | 31 ++++++++++--- 5 files changed, 57 insertions(+), 48 deletions(-) diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md index ae9e64634021912c66ffa5e4d038b84d4e38074e..4957e88f33aa6c4be4a038f31c0a951ed22b8418 100644 GIT binary patch literal 8149 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 diff --git a/README.md b/README.md index d1c0ccd..1285e8b 100644 --- a/README.md +++ b/README.md @@ -18,18 +18,18 @@ your pom.xml: com.github.marketsquare robotframework-seleniumlibrary - 4.0.0.0 + 4.28.1.0 test If you cannot use the robotframework-maven-plugin you can use the -[jar-with-dependencies](https://repo1.maven.org/maven2/com/github/marketsquare/robotframework-seleniumlibrary/4.0.0.0/robotframework-seleniumlibrary-4.0.0.0-jar-with-dependencies.jar), -which contains all required libraries except ios/android ones (Appium and Selendroid). Running of tests with this can be done with command `java -jar robotframework-seleniumlibrary-4.0.0.0-jar-with-dependencies.jar `. +[jar-with-dependencies](https://repo1.maven.org/maven2/com/github/marketsquare/robotframework-seleniumlibrary/4.28.1.0/robotframework-seleniumlibrary-4.28.1.0-jar-with-dependencies.jar), +which contains all required libraries except ios/android ones (Appium). Running of tests with this can be done with command `java -jar robotframework-seleniumlibrary-4.28.1.0-jar-with-dependencies.jar `. - More information about this library can be found in the - [Keyword Documentation](https://repo1.maven.org/maven2/com/github/marketsquare/robotframework-seleniumlibrary/4.0.0.0/robotframework-seleniumlibrary-4.0.0.0.html). + [Keyword Documentation](https://repo1.maven.org/maven2/com/github/marketsquare/robotframework-seleniumlibrary/4.28.1.0/robotframework-seleniumlibrary-4.28.1.0.html). - For keyword completion in RIDE you can download this - [Library Specs](https://repo1.maven.org/maven2/com/github/marketsquare/robotframework-seleniumlibrary/4.0.0.0/robotframework-seleniumlibrary-4.0.0.0.xml) + [Library Specs](https://repo1.maven.org/maven2/com/github/marketsquare/robotframework-seleniumlibrary/4.28.1.0/robotframework-seleniumlibrary-4.28.1.0.xml) and place it in your PYTHONPATH. ## Old versions @@ -82,8 +82,8 @@ which contains all required libraries. Running of tests with this can be done wi ## Testing IOS/Android browsers with library -Pre-Selenium 4 fat-jar contains Appium and Selendroid that allow testing of IOS and Android browsers. Those are dropped in Selenium 4 -versions, -so dependencies needs to be handles self with either Maven/Gradle or manually. If there's need to have fat-jar with those, please create issue about that. +Pre-Selenium 4 fat-jar contained Appium and Selendroid that allowed testing of IOS and Android browsers. Those are dropped in Selenium 4 -versions, +so dependencies needs to be handles self with either Maven/Gradle or manually. Also 4.28.1.0 version of the library moved purely to Appium. If there's need to have fat-jar with those, please create issue about that. ## Differences diff --git a/pom.xml b/pom.xml index 4d69e68..51c2829 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.github.marketsquare robotframework-seleniumlibrary - 4.0.0.1-SNAPSHOT + 4.28.1.0-SNAPSHOT jar Robot Framework :: SeleniumLibrary @@ -72,11 +72,12 @@ UTF-8 true true - 1.9.8.RC1 - 11 + 1.9.21.2 + 17 + 11 2.1.0 - 4.1 - 4.0.0 + 4.1.2 + 4.28.1 SeleniumLibrary googlechromeheadless False @@ -108,22 +109,10 @@ json-simple 1.1.1 - - io.selendroid - selendroid-client - 0.17.0 - - - org.seleniumhq.selenium - selenium-java - - - provided - io.appium java-client - 7.6.0 + 9.4.0 org.seleniumhq.selenium @@ -139,12 +128,12 @@ org.apache.commons commons-exec - 1.3 + 1.4.0 org.seleniumhq.selenium htmlunit-driver - 2.53.0 + 4.13.0 org.seleniumhq.selenium @@ -163,18 +152,19 @@ org.mockito mockito-core - 2.28.2 + 5.15.2 test io.github.bonigarcia webdrivermanager - 5.0.3 + + 5.7.0 org.apache.commons commons-lang3 - 3.12.0 + 3.17.0 @@ -341,9 +331,9 @@ - ${java.version} - ${java.version} - ${java.version} + ${java.compile.version} + ${java.runtime.version} + ${java.compile.version} true diff --git a/src/main/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagement.java b/src/main/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagement.java index 7a90687..24a9af3 100644 --- a/src/main/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagement.java +++ b/src/main/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagement.java @@ -1,9 +1,9 @@ package com.github.markusbernhardt.seleniumlibrary.keywords; +import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.ios.IOSDriver; import io.github.bonigarcia.wdm.WebDriverManager; import io.github.bonigarcia.wdm.config.DriverManagerType; -import io.selendroid.client.SelendroidDriver; import java.io.File; import java.lang.reflect.Field; @@ -61,6 +61,8 @@ import com.github.markusbernhardt.seleniumlibrary.utils.WebDriverCache; import com.github.markusbernhardt.seleniumlibrary.utils.WebDriverCache.SessionIdAliasWebDriverTuple; +import static org.openqa.selenium.remote.Browser.HTMLUNIT; + @RobotKeywords public class BrowserManagement extends RunOnFailureKeywordsAdapter { @@ -639,14 +641,14 @@ protected WebDriver createLocalWebDriver(String browserName, Capabilities desire return new SafariDriver(new SafariOptions().merge(desiredCapabilities)); case "android": try { - return new SelendroidDriver(desiredCapabilities); + return new AndroidDriver(desiredCapabilities); } catch (Exception e) { throw new SeleniumLibraryFatalException(e); } case "ipad": case "iphone": try { - return new IOSDriver<>(new URL(""), desiredCapabilities); + return new IOSDriver(new URL(""), desiredCapabilities); } catch (Exception e) { throw new SeleniumLibraryFatalException("Creating " + browserName + " instance failed.", e); } @@ -716,7 +718,7 @@ protected Capabilities createCapabilities(String browserName, String desiredCapa case "firefoxheadless": desiredCapabilities = new FirefoxOptions(); parseBrowserOptionsFirefox(browserOptions, desiredCapabilities); - ((FirefoxOptions)desiredCapabilities).setHeadless(true); + ((FirefoxOptions)desiredCapabilities).addArguments("-headless"); break; case "ie": case "internetexplorer": @@ -727,7 +729,7 @@ protected Capabilities createCapabilities(String browserName, String desiredCapa break; case "edgeheadless": desiredCapabilities = new EdgeOptions(); - ((EdgeOptions)desiredCapabilities).setHeadless(true); + ((EdgeOptions)desiredCapabilities).addArguments("--headless=chrome"); break; case "gc": case "chrome": @@ -742,14 +744,14 @@ protected Capabilities createCapabilities(String browserName, String desiredCapa desiredCapabilities = new ChromeOptions(); logging.debug("Parsing chrome options: "+browserOptions); parseBrowserOptionsChrome(browserOptions, desiredCapabilities); - ((ChromeOptions)desiredCapabilities).setHeadless(true); + ((ChromeOptions)desiredCapabilities).addArguments("--headless=chrome"); break; case "safari": desiredCapabilities = new SafariOptions(); break; case "htmlunit": case "htmlunitwithjs": - desiredCapabilities = DesiredCapabilities.htmlUnit(); + desiredCapabilities = new DesiredCapabilities(HTMLUNIT.browserName(), "", Platform.ANY); ((DesiredCapabilities) desiredCapabilities).setBrowserName("htmlunit"); break; default: @@ -858,7 +860,7 @@ protected void parseBrowserOptionsFirefox(String browserOptions, Capabilities de logging.warn("Unknown browserOption: " + key + ":" + entry.getValue()); } } - ((FirefoxOptions) desiredCapabilities).setCapability(FirefoxDriver.PROFILE, firefoxProfile); + ((FirefoxOptions) desiredCapabilities).setProfile(firefoxProfile); } else { logging.warn("Invalid browserOptions: " + browserOptions); } diff --git a/src/test/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagementTest.java b/src/test/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagementTest.java index 799b749..e137322 100644 --- a/src/test/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagementTest.java +++ b/src/test/java/com/github/markusbernhardt/seleniumlibrary/keywords/BrowserManagementTest.java @@ -1,8 +1,12 @@ package com.github.markusbernhardt.seleniumlibrary.keywords; import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; +import java.io.IOException; + import org.junit.BeforeClass; import org.junit.Test; import org.openqa.selenium.Capabilities; @@ -41,25 +45,39 @@ public void testCreateDesiredCapabilities() { String desired = "{\"platform\":\"WINDOWS\",\"browserName\":\"firefox\",\"version\":\"\"}"; String browserOptions = "{\"preferences\": {\"network.proxy.type\": 1, \"network.proxy.http\": \"localhost\", \"network.proxy.http_port\": 73571}}"; Capabilities dc = bm.createCapabilities("firefox", desired, browserOptions); - FirefoxProfile profile = (FirefoxProfile) dc.getCapability("firefox_profile"); - assertTrue(dc.getCapability("platform").toString().equals("WINDOWS")); - assertTrue(profile.getStringPreference("network.proxy.http", "wrong") != "wrong"); + @SuppressWarnings("unchecked") + String profileString = ((java.util.Map) dc.getCapability("moz:firefoxOptions")).get("profile"); + FirefoxProfile profile; + try { + profile = FirefoxProfile.fromJson(profileString); + assertTrue(dc.getCapability("platform").toString().equals("WINDOWS")); + assertTrue(profile.getStringPreference("network.proxy.http", "wrong") != "wrong"); + } catch (IOException e) { + fail(e.getMessage()); + } } @Test public void testCreateDesiredCapabilitiesWithoutBrowserOptions() { String desired = "{\"platform\":\"WINDOWS\",\"browserName\":\"firefox\",\"version\":\"\"}"; Capabilities dc = bm.createCapabilities("firefox", desired, null); - FirefoxProfile profile = (FirefoxProfile) dc.getCapability("firefox_profile"); assertTrue(dc.getCapability("platform").toString().equals("WINDOWS")); } + @SuppressWarnings("rawtypes") @Test public void testCreateDesiredCapabilitiesWithOnlyBrowserOptions() { String browserOptions = "{\"preferences\": {\"network.proxy.type\": 1, \"network.proxy.http\": \"localhost\", \"network.proxy.http_port\": 73571}}"; Capabilities dc = bm.createCapabilities("firefox", null, browserOptions); - FirefoxProfile profile = (FirefoxProfile) dc.getCapability("firefox_profile"); - assertTrue(profile.getStringPreference("network.proxy.http", "wrong") != "wrong"); + @SuppressWarnings("unchecked") + String profileString = ((java.util.Map) dc.getCapability("moz:firefoxOptions")).get("profile"); + FirefoxProfile profile; + try { + profile = FirefoxProfile.fromJson(profileString); + assertTrue(profile.getStringPreference("network.proxy.http", "wrong") != "wrong"); + } catch (IOException e) { + fail(e.getMessage()); + } } @Test @@ -79,7 +97,6 @@ public void parseChromeBrowserOptions() { @Test public void parseChromeCapabilities() { - ChromeOptions chromeOptions = new ChromeOptions(); String browserName = "googlechromeheadless"; String browserOptions = "{\"args\":[\"start-maximized\"],\"extensions\":[],\"prefs\":{\"intl.accept_languages\":\"de-AT\"}}"; String desiredCapabilitiesString = "{}"; From 8e8e518eb42dfe37801cbceb2e85bbd3399dab21 Mon Sep 17 00:00:00 2001 From: Juho Saarinen Date: Sat, 25 Jan 2025 12:33:00 +0200 Subject: [PATCH 2/4] deps: updated action versions --- .github/workflows/codeql-analysis.yml | 8 +++---- .github/workflows/maven.yml | 33 +++++++++++++++------------ .m2/settings.xml | 32 ++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 19 deletions(-) create mode 100644 .m2/settings.xml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 63aa25c..97da42a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -39,11 +39,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -54,7 +54,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v3 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -68,5 +68,5 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v3 \ No newline at end of file diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 6f443c2..215bb39 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -14,7 +14,7 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-latest', 'macos-latest', 'windows-latest' ] - java-version: [ 11 ] + java-version: [ 17 ] browser: ['googlechromeheadless', 'firefoxheadless', 'edgeheadless'] include: - os: ubuntu-latest @@ -43,9 +43,9 @@ jobs: runs-on: ${{ matrix.os }} name: Test on ${{ matrix.os }} with Java ${{ matrix.java-version }} using browser ${{ matrix.browser }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v2.3.0 + uses: actions/setup-java@v4 with: distribution: zulu java-version: ${{ matrix.java-version }} @@ -75,7 +75,7 @@ jobs: run: echo "${{ env.SHA }}" - name: Archive acceptances test results - uses: actions/upload-artifact@v2.2.4 + uses: actions/upload-artifact@v4 with: name: at-results-${{ matrix.browser }}-${{ matrix.os }}-${{ matrix.java-version }} path: target/robotframework-reports @@ -91,7 +91,7 @@ jobs: echo "::set-output name=JOB_STATUS::$(python -c "print('${{ job.status }}'.lower())")" if: always() && job.status == 'failure' - - uses: octokit/request-action@7e93b91076fad3920c29d44eb2a6311d929db3dd + - uses: octokit/request-action@dad4362715b7fb2ddedf9772c8670824af564f0d #v2.4.0 name: Update status with Github Status API id: update_status_pr with: @@ -112,17 +112,20 @@ jobs: runs-on: ubuntu-latest name: Release package steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v2.3.0 + uses: actions/setup-java@v4 with: distribution: zulu - java-version: 11 + java-version: 17 - name: Release Maven package - uses: samuelmeuli/action-maven-publish@201a45a3f311b2ee888f252ba9f4194257545709 - with: - gpg_private_key: ${{ secrets.gpg_private_key }} - gpg_passphrase: ${{ secrets.gpg_passphrase }} - nexus_username: ${{ secrets.nexus_username }} - nexus_password: ${{ secrets.nexus_password }} - maven_args: -DskipTests -B -ntp + run: + echo $GPG_PRIVATE_KEY > .m2/private-key.txt + gpg --import --batch .m2/private-key.txt + rm .m2/private-key.txt + mvn clean deploy --batch-mode --activate-profiles deploy --settings ${{ github.workspace }}/.m2/settings.xml -DskipTests -B -ntp + env: + GPG_PRIVATE_KEY: ${{ secrets.gpg_private_key }} + GPG_PASSPHRASE: ${{ secrets.gpg_passphrase }} + NEXUS_USERNAME: ${{ secrets.nexus_username }} + NEXUS_PASSWORD: ${{ secrets.nexus_password }} diff --git a/.m2/settings.xml b/.m2/settings.xml new file mode 100644 index 0000000..6264c03 --- /dev/null +++ b/.m2/settings.xml @@ -0,0 +1,32 @@ + + + + + + + gpg + + true + + + gpg + + ${env.GPG_PASSPHRASE} + + + + + + + + ossrh + + ${env.NEXUS_USERNAME} + ${env.NEXUS_PASSWORD} + + + \ No newline at end of file From 020ef715560f83fb485f06e4cc3175d205305f0f Mon Sep 17 00:00:00 2001 From: Juho Saarinen Date: Sat, 25 Jan 2025 15:25:36 +0200 Subject: [PATCH 3/4] tests: updated test cases due target page changes Removed Google search tests due to bad UI testability --- .../robotframework/objects/Google.Site.txt | 2 +- .../robotframework/settings/Settings.robot | 3 +++ .../testsuites/UnitTests/AW3Schools.robot | 16 +++++++------- .../testsuites/UnitTests/Google.robot | 21 +++---------------- .../testsuites/UnitTests/WhatAreCookies.robot | 2 +- 5 files changed, 16 insertions(+), 28 deletions(-) diff --git a/src/test/robotframework/objects/Google.Site.txt b/src/test/robotframework/objects/Google.Site.txt index 47ab5cd..93a0758 100644 --- a/src/test/robotframework/objects/Google.Site.txt +++ b/src/test/robotframework/objects/Google.Site.txt @@ -24,7 +24,7 @@ Go To ${Current.Location}= Get Location Run Keyword If '${Current.Location}'!='${Google.Site.Url}' SeleniumLibrary.Go To ${Google.Site.Url} Title Should Be ${Google.Site.PageTitle} - Handle Cookie Consent xpath:(//div[@role="none"])[last()] + Handle Cookie Consent //*[@id="L2AGLb"] Close Close Browser diff --git a/src/test/robotframework/settings/Settings.robot b/src/test/robotframework/settings/Settings.robot index 446ce7a..7fd8eac 100644 --- a/src/test/robotframework/settings/Settings.robot +++ b/src/test/robotframework/settings/Settings.robot @@ -17,9 +17,12 @@ Test Handle Cookie Consent [Arguments] ${consent click xpath} + Reload Page Comment Consent search causes stack overflow to jbrowser, so tagging tescases using this keyword Set Tags jbrowser ${count} Get Matching Xpath Count ${consent click xpath} IF ${count} > 0 + Capture Page Screenshot + Wait Until Element Is Clickable ${consent click xpath} 30s Click Element ${consent click xpath} END \ No newline at end of file diff --git a/src/test/robotframework/testsuites/UnitTests/AW3Schools.robot b/src/test/robotframework/testsuites/UnitTests/AW3Schools.robot index dacdea9..06c4b8c 100644 --- a/src/test/robotframework/testsuites/UnitTests/AW3Schools.robot +++ b/src/test/robotframework/testsuites/UnitTests/AW3Schools.robot @@ -9,14 +9,14 @@ ${URL Application} http://www.w3schools.com *** Test Cases *** Select [Tags] jbrowser - Open Browser https://developer.mozilla.org/en/docs/Web/HTML/Element/select#Examples ${browser} mainbrowser - Wait Until Page Contains Element frame_Basic_select - Select Frame frame_Basic_select - Wait Until Page Contains Element xpath://select[@name="choice"] - Select From List xpath://select[@name="choice"] Third Value - ${label} Get Selected List Label xpath://select[@name="choice"] - Should Be Equal ${label} Third Value - List Selection Should Be xpath://select[@name="choice"] Third Value + Open Browser https://interactive-examples.mdn.mozilla.net/pages/tabbed/select.html ${browser} mainbrowser + Wait Until Page Contains Element output-iframe + Select Frame output-iframe + Wait Until Page Contains Element xpath://select[@name="pets"] + Select From List xpath://select[@name="pets"] Spider + ${label} Get Selected List Label xpath://select[@name="pets"] + Should Be Equal ${label} Spider + List Selection Should Be xpath://select[@name="pets"] Spider Multiple Browsers Open Browser ${URL Application} ${browser} mainbrowser1 diff --git a/src/test/robotframework/testsuites/UnitTests/Google.robot b/src/test/robotframework/testsuites/UnitTests/Google.robot index 856b9cc..b50cf10 100644 --- a/src/test/robotframework/testsuites/UnitTests/Google.robot +++ b/src/test/robotframework/testsuites/UnitTests/Google.robot @@ -10,25 +10,10 @@ Open And Close Google Site Capture Page Screenshot Store Web Element In JavaScript - Wait Until Page Contains Element //*[contains(@class,'gsfi')] - Execute Javascript window.document.my_element = window.document.getElementsByClassName('gsfi')[0]; + Wait Until Page Contains Element //*[contains(@class,'gLFyf')] + Execute Javascript window.document.my_element = window.document.getElementsByClassName('gLFyf')[0]; ${className}= Execute Javascript return window.document.my_element.className; - Should Contain ${className} gsfi - -Search Robotframework Selenium2Library - Google.Search.Search String Robotframework Selenium2Library Java - -Search With JavaScript Locator - SeleniumLibrary.Add Location Strategy elementByName return window.document.getElementsByName(arguments[0])[0]; - Input Text elementByName:q Robotframework Selenium2Library Java - Press Key elementByName:q \\13 - Wait Until Element Is Visible xpath://a[contains(.,'MarkusBernhardt')] - Capture Page Screenshot - -Search Without Locator Type - Input Text q Robotframework Selenium2Library Java - Press Key q \\13 - Wait Until Element Is Visible //a[contains(.,'MarkusBernhardt')] + Should Contain ${className} gLFyf Get Name Of Active Element With JavaScript Input Text q Robotframework Selenium2Library diff --git a/src/test/robotframework/testsuites/UnitTests/WhatAreCookies.robot b/src/test/robotframework/testsuites/UnitTests/WhatAreCookies.robot index 7b120d6..3e6c99e 100644 --- a/src/test/robotframework/testsuites/UnitTests/WhatAreCookies.robot +++ b/src/test/robotframework/testsuites/UnitTests/WhatAreCookies.robot @@ -6,7 +6,7 @@ Library String *** Test Cases *** Cookies Open Browser http://www.whatarecookies.com/cookietest.asp ${browser} mainbrowser - Handle Cookie Consent cookieconsent_btn + Handle Cookie Consent xpath://*[@id="cookieconsent_btn"] ${all_cookies} Get Cookies ${first cookie name} Split String ${all_cookies} = ${test} Get Cookie Value ${first cookie name}[0] From 527555cac490a917d0b30ab44bddd6306176ad71 Mon Sep 17 00:00:00 2001 From: Juho Saarinen Date: Sat, 25 Jan 2025 17:10:35 +0200 Subject: [PATCH 4/4] docs: deprecation message --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 1285e8b..bb9e4fd 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ +> [!WARNING] +> Repository is not currently maintained. Version released on 25th of January will probably be last one for this library as it has mostly lost it's meaning after Robot Framework dropped Jython support (due to dropping support for Python 2) +> +> If you're interested of starting to maintain this library please check [MarketSquare](https://marketsquare.github.io/) and create issue to there. +> +> Repository will be archived for time being to make this very clear. + # Java port of the Python based SeleniumLibrary for Robot Framework ## Introduction