diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 813a1de..4bd1c6e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -16,7 +16,7 @@ jobs:
strategy:
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
- java: ["8", "11", "17"]
+ java: ["17", "21", "23"]
steps:
- uses: actions/checkout@v3
diff --git a/.github/workflows/ci_integration.yml b/.github/workflows/ci_integration.yml
index 0ed6f42..6b6da33 100644
--- a/.github/workflows/ci_integration.yml
+++ b/.github/workflows/ci_integration.yml
@@ -17,10 +17,10 @@ jobs:
steps:
- uses: actions/checkout@v3
- - name: Set up JDK 11
+ - name: Set up JDK 17
uses: actions/setup-java@v2
with:
- java-version: 11
+ java-version: 17
distribution: "zulu"
- name: Remove Chrome
run: sudo apt purge google-chrome-stable
@@ -28,5 +28,6 @@ jobs:
run: sudo apt purge chromium-browser
- name: Install a new Chromium
run: sudo apt install -y chromium-browser
+ - uses: nanasess/setup-chromedriver@v2
- name: Integration browser test with Maven
run: mvn -Dtest=TestBrowser test
diff --git a/pom.xml b/pom.xml
index 71fdb21..fe3ecda 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.testdevlab
TestUI
- 2.0.2
+ 3.0.0
@@ -25,10 +25,15 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.8.0
+ 3.11.0
- 1.8
- 1.8
+
+
+ org.projectlombok
+ lombok
+ 1.18.28
+
+
@@ -135,7 +140,7 @@
org.seleniumhq.selenium
selenium-java
- 4.11.0
+ 4.28.0
io.appium
@@ -154,7 +159,7 @@
selenium-support
- 8.5.0
+ 9.3.0
net.lightbody.bmp
@@ -169,12 +174,17 @@
com.codeborne
selenide
- 6.17.2
+ 7.7.0
+
+
+ com.codeborne
+ selenide-proxy
+ 7.7.0
io.github.bonigarcia
webdrivermanager
- 5.5.2
+ 5.9.2
org.slf4j
@@ -217,8 +227,8 @@
org.projectlombok
lombok
- 1.18.2
- test
+ 1.18.28
+ provided
org.json
diff --git a/src/main/java/testUI/AndroidUtils/AndroidCapabilities.java b/src/main/java/testUI/AndroidUtils/AndroidCapabilities.java
index 92ebd74..9b763b8 100644
--- a/src/main/java/testUI/AndroidUtils/AndroidCapabilities.java
+++ b/src/main/java/testUI/AndroidUtils/AndroidCapabilities.java
@@ -1,7 +1,5 @@
package testUI.AndroidUtils;
-import io.appium.java_client.remote.AndroidMobileCapabilityType;
-import io.appium.java_client.remote.MobileCapabilityType;
import org.openqa.selenium.Platform;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
@@ -23,19 +21,19 @@ public static DesiredCapabilities setAppAndroidCapabilities(TestUIConfiguration
DesiredCapabilities cap = setChromeDriverCap(configuration);
if (getDesiredCapabilities() == null) {
cap.merge(setDeviceCapability(configuration));
- cap.setCapability("appium:" + AndroidMobileCapabilityType.APP_WAIT_DURATION,
+ cap.setCapability("appium:appWaitDuration",
Configuration.launchAppTimeout);
if (Configuration.automationName.isEmpty()) {
- cap.setCapability("appium:" + MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");
+ cap.setCapability("appium:automationName", "UiAutomator2");
} else {
- cap.setCapability("appium:" + MobileCapabilityType.AUTOMATION_NAME,
+ cap.setCapability("appium:automationName",
Configuration.automationName);
}
cap.setCapability("appium:platformName", Platform.ANDROID);
if (!Configuration.appActivity.isEmpty() && !Configuration.appPackage.isEmpty()) {
- cap.setCapability("appium:" + AndroidMobileCapabilityType.APP_ACTIVITY,
+ cap.setCapability("appium:appActivity",
Configuration.appActivity);
- cap.setCapability("appium:" + AndroidMobileCapabilityType.APP_PACKAGE,
+ cap.setCapability("appium:appPackage",
Configuration.appPackage);
}
if (!Configuration.androidAppPath.isEmpty()) {
@@ -69,16 +67,16 @@ public static DesiredCapabilities setAndroidBrowserCapabilities(
if (getDesiredCapabilities() == null) {
cap.merge(setDeviceCapability(configuration));
if (Configuration.automationName.isEmpty()) {
- cap.setCapability("appium:" + MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");
+ cap.setCapability("appium:automationName", "UiAutomator2");
} else {
- cap.setCapability("appium:" + MobileCapabilityType.AUTOMATION_NAME,
+ cap.setCapability("appium:automationName",
Configuration.automationName);
}
cap.merge(setPortCapabilities(configuration));
- cap.setCapability("appium:" + MobileCapabilityType.NO_RESET, true);
- cap.setCapability("appium:" + MobileCapabilityType.PLATFORM_NAME, Platform.ANDROID);
- cap.setCapability("appium:" + MobileCapabilityType.BROWSER_NAME, "chrome");
- cap.setCapability("appium:" + AndroidMobileCapabilityType.NATIVE_WEB_SCREENSHOT, true);
+ cap.setCapability("appium:noReset", true);
+ cap.setCapability("appium:platformName", Platform.ANDROID);
+ cap.setCapability("appium:browserName", "chrome");
+ cap.setCapability("appium:nativeWebScreenshot", true);
if (!Configuration.useW3C) {
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("w3c", false);
@@ -133,11 +131,11 @@ private static DesiredCapabilities setDeviceCapability(TestUIConfiguration confi
if (configuration.getEmulatorName().isEmpty()) {
String udid = configuration.getUDID().isEmpty() ? getDevice()
: configuration.getUDID();
- cap.setCapability("appium:" + MobileCapabilityType.UDID, udid);
- cap.setCapability("appium:" + MobileCapabilityType.DEVICE_NAME, udid);
+ cap.setCapability("appium:udid", udid);
+ cap.setCapability("appium:deviceName", udid);
} else {
- cap.setCapability("appium:" + AndroidMobileCapabilityType.AVD, configuration.getEmulatorName());
- cap.setCapability("appium:" + MobileCapabilityType.DEVICE_NAME, configuration.getEmulatorName());
+ cap.setCapability("appium:avd", configuration.getEmulatorName());
+ cap.setCapability("appium:deviceName", configuration.getEmulatorName());
}
return cap;
@@ -148,14 +146,14 @@ private static DesiredCapabilities setPortCapabilities(TestUIConfiguration confi
if (configuration.getAppiumUrl().isEmpty()) {
int systemPort = Integer.parseInt(getUsePort().get(getUsePort().size() - 1)) + 10;
int chromeDriverPort = Integer.parseInt(getUsePort().get(getUsePort().size() - 1)) + 15;
- cap.setCapability("appium:" + "chromedriverPort", chromeDriverPort);
- cap.setCapability("appium:" + AndroidMobileCapabilityType.SYSTEM_PORT, systemPort);
+ cap.setCapability("appium:chromedriverPort", chromeDriverPort);
+ cap.setCapability("appium:systemPort", systemPort);
}
if (Configuration.chromeDriverPort != 0) {
cap.setCapability("appium:chromedriverPort", chromeDriverPort);
}
if (Configuration.systemPort != 0) {
- cap.setCapability("appium:" + AndroidMobileCapabilityType.SYSTEM_PORT, systemPort);
+ cap.setCapability("appium:systemPort", systemPort);
}
return cap;
@@ -170,7 +168,7 @@ private static DesiredCapabilities setChromeDriverCap(
configuration.getChromeDriverPath().startsWith("C:\\")
? configuration.getChromeDriverPath()
: System.getProperty("user.dir") + slash + configuration.getChromeDriverPath();
- cap.setCapability("appium:" + AndroidMobileCapabilityType.CHROMEDRIVER_EXECUTABLE, chromePath);
+ cap.setCapability("appium:chromedriverExecutable", chromePath);
return cap;
}
diff --git a/src/main/java/testUI/IOSUtils/IOCapabilities.java b/src/main/java/testUI/IOSUtils/IOCapabilities.java
index 90735c6..8d37996 100644
--- a/src/main/java/testUI/IOSUtils/IOCapabilities.java
+++ b/src/main/java/testUI/IOSUtils/IOCapabilities.java
@@ -1,8 +1,6 @@
package testUI.IOSUtils;
-import io.appium.java_client.remote.IOSMobileCapabilityType;
import io.appium.java_client.remote.MobileBrowserType;
-import io.appium.java_client.remote.MobileCapabilityType;
import org.openqa.selenium.Platform;
import org.openqa.selenium.remote.DesiredCapabilities;
import testUI.Configuration;
@@ -27,20 +25,20 @@ public static DesiredCapabilities setIOSCapabilities(boolean browser) {
}
// BROWSER OR APP
if (browser) {
- capabilities.setCapability("appium:" + MobileCapabilityType.AUTO_WEBVIEW, true);
- capabilities.setCapability("appium:" + MobileCapabilityType.BROWSER_NAME,
+ capabilities.setCapability("appium:autoWebview", true);
+ capabilities.setCapability("appium:browserName",
MobileBrowserType.SAFARI);
} else if (!Configuration.iOSAppPath.isEmpty()) {
String appPath = Configuration.iOSAppPath.charAt(0) == '/' ?
Configuration.iOSAppPath :
System.getProperty("user.dir") + "/" + Configuration.iOSAppPath;
- capabilities.setCapability("appium:" + MobileCapabilityType.APP, appPath);
+ capabilities.setCapability("appium:app", appPath);
}
// IN CASE OF REAL DEVICE
if (!Configuration.xcodeOrgId.isEmpty()) {
- capabilities.setCapability(IOSMobileCapabilityType.XCODE_ORG_ID,
+ capabilities.setCapability("xcodeOrgId",
Configuration.xcodeOrgId);
- capabilities.setCapability(IOSMobileCapabilityType.XCODE_SIGNING_ID,
+ capabilities.setCapability("xcodeSigningId",
Configuration.xcodeSigningId);
}
if (!Configuration.updatedWDABundleId.isEmpty()) {
@@ -56,19 +54,16 @@ public static DesiredCapabilities setIOSCapabilities(boolean browser) {
wdaLocalPort =
8100 + 20 * (Integer.parseInt(getUsePort().get(getUsePort().size() - 1)) -
Configuration.baseAppiumPort) / 100;
- } else {
- wdaLocalPort = Configuration.wdaPort;
+ capabilities.setCapability("appium:wdaLocalPort", wdaLocalPort);
}
- capabilities.setCapability(IOSMobileCapabilityType.WDA_LOCAL_PORT, wdaLocalPort);
- capabilities.setCapability("appium:" + MobileCapabilityType.NO_RESET, false);
- capabilities.setCapability(IOSMobileCapabilityType.USE_NEW_WDA,
+ capabilities.setCapability("appium:noReset", false);
+ capabilities.setCapability("appium:useNewWDA",
Configuration.useNewWDA);
capabilities.setCapability("appium:platformName", Platform.IOS);
- capabilities.setCapability("appium:" + MobileCapabilityType.AUTOMATION_NAME, "XCUITest");
- capabilities.setCapability(IOSMobileCapabilityType.START_IWDP, true);
- capabilities.setCapability(IOSMobileCapabilityType.WDA_LAUNCH_TIMEOUT,
+ capabilities.setCapability("appium:automationName", "XCUITest");
+ capabilities.setCapability("appium:wdaLaunchTimeout",
Configuration.launchAppTimeout);
- capabilities.setCapability(IOSMobileCapabilityType.COMMAND_TIMEOUTS, 30000);
+ capabilities.setCapability("appium:commandTimeouts", 30000);
// ADD CUSTOM CAPABILITIES
if (!Configuration.addMobileDesiredCapabilities.asMap().isEmpty()) {
for (String key : addMobileDesiredCapabilities.asMap().keySet()) {
@@ -107,9 +102,9 @@ private static DesiredCapabilities getIOSDevice() {
Configuration.iOSDeviceName;
Configuration.iOSVersion = Configuration.iOSVersion.isEmpty() ? "13.2" :
Configuration.iOSVersion;
- capabilities.setCapability("appium:" + MobileCapabilityType.DEVICE_NAME,
+ capabilities.setCapability("appium:deviceName",
Configuration.iOSDeviceName);
- capabilities.setCapability("appium:" + MobileCapabilityType.PLATFORM_VERSION,
+ capabilities.setCapability("appium:platformVersion",
Configuration.iOSVersion);
capabilities.setCapability("appium:udid", Configuration.UDID);
} else {
@@ -118,15 +113,15 @@ private static DesiredCapabilities getIOSDevice() {
} else {
capabilities.setCapability("appium:udid", Configuration.UDID);
}
- capabilities.setCapability("appium:" + MobileCapabilityType.DEVICE_NAME,
+ capabilities.setCapability("appium:deviceName",
Configuration.iOSDeviceName);
- capabilities.setCapability("appium:" + MobileCapabilityType.PLATFORM_VERSION,
+ capabilities.setCapability("appium:platformVersion",
Configuration.iOSVersion);
}
} else {
- capabilities.setCapability("appium:" + MobileCapabilityType.DEVICE_NAME,
+ capabilities.setCapability("appium:deviceName" ,
Configuration.iOSDeviceName);
- capabilities.setCapability("appium:" + MobileCapabilityType.PLATFORM_VERSION,
+ capabilities.setCapability("appium:platformVersion",
Configuration.iOSVersion);
capabilities.setCapability("appium:udid", Configuration.UDID);
}
diff --git a/src/main/java/testUI/TestUIServer.java b/src/main/java/testUI/TestUIServer.java
index 32cc5bb..5108eac 100644
--- a/src/main/java/testUI/TestUIServer.java
+++ b/src/main/java/testUI/TestUIServer.java
@@ -367,10 +367,6 @@ public static void stop() {
if (!Configuration.automationType.equals(DESKTOP_PLATFORM)) {
removeUsePort(driver - 1);
removeUseBootstrapPort(driver - 1);
- if (Configuration.automationType.equals(IOS_PLATFORM)) {
- getDrivers().get(driver - 1).close();
- sleep(500);
- }
getDrivers().get(driver - 1).quit();
removeDriver(driver - 1);
if (getAppiumServices() != null && getAppiumServices().size() >= driver) {
diff --git a/src/main/java/testUI/elements/AttributeImp.java b/src/main/java/testUI/elements/AttributeImp.java
index c02a910..5e8aaeb 100644
--- a/src/main/java/testUI/elements/AttributeImp.java
+++ b/src/main/java/testUI/elements/AttributeImp.java
@@ -1,6 +1,7 @@
package testUI.elements;
import com.codeborne.selenide.Condition;
+import com.codeborne.selenide.WebElementCondition;
import org.openqa.selenium.By;
import testUI.Configuration;
@@ -40,7 +41,7 @@ protected AttributeImp(By AppiumElement,
this.collection = collection;
}
- private Condition condition(boolean hasCondition, Condition condition) {
+ private WebElementCondition condition(boolean hasCondition, WebElementCondition condition) {
if (hasCondition)
return condition;
return Condition.not(condition);
diff --git a/src/main/java/testUI/elements/ShouldBe.java b/src/main/java/testUI/elements/ShouldBe.java
index b94e786..717d6c9 100644
--- a/src/main/java/testUI/elements/ShouldBe.java
+++ b/src/main/java/testUI/elements/ShouldBe.java
@@ -1,6 +1,7 @@
package testUI.elements;
import com.codeborne.selenide.Condition;
+import com.codeborne.selenide.WebElementCondition;
import org.openqa.selenium.By;
import testUI.Configuration;
@@ -39,7 +40,7 @@ protected ShouldBe(By AppiumElement,
this.collection = collection;
}
- private Condition condition(boolean hasCondition, Condition condition) {
+ private WebElementCondition condition(boolean hasCondition, WebElementCondition condition) {
if (hasCondition)
return condition;
return Condition.not(condition);
diff --git a/src/main/java/testUI/elements/TestUI.java b/src/main/java/testUI/elements/TestUI.java
index e325f8a..1620c82 100644
--- a/src/main/java/testUI/elements/TestUI.java
+++ b/src/main/java/testUI/elements/TestUI.java
@@ -3,6 +3,7 @@
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
import com.codeborne.selenide.WebDriverRunner;
+import com.codeborne.selenide.WebElementCondition;
import io.appium.java_client.AppiumBy;
import io.qameta.allure.Allure;
import io.qameta.allure.model.Status;
@@ -231,7 +232,7 @@ protected SelenideElement getSelenide(By element, int index, boolean collection)
return $(element);
}
- protected void selenideAssert(Condition condition,
+ protected void selenideAssert(WebElementCondition condition,
int time,
By SelenideElement,
int index,
diff --git a/src/test/java/TestRunners/TestAndroidLocal.java b/src/test/java/TestRunners/TestAndroidLocal.java
index 8934b20..1fa768c 100644
--- a/src/test/java/TestRunners/TestAndroidLocal.java
+++ b/src/test/java/TestRunners/TestAndroidLocal.java
@@ -24,6 +24,8 @@ public void testAndroidBrowser() {
Configuration.testUILogLevel = LogLevel.DEBUG;
Configuration.automationType = ANDROID_PLATFORM;
Configuration.installMobileChromeDriver = true;
+ Configuration.UDID = "emulator-5554";
+ Configuration.appiumUrl = "http://localhost:4723/";
open("https://www.google.com");
executeJs("arguments[0].value='TestUI';", googleLandingPage.getGoogleSearchInput()
.getMobileElement());
@@ -39,8 +41,8 @@ public void testAndroidBrowser() {
@DisplayName("Android browser test case")
public void testAndroidBrowser2() {
Configuration.testUILogLevel = LogLevel.DEBUG;
- Configuration.appiumUrl = "";
- Configuration.androidDeviceName = "";
+ Configuration.appiumUrl = "http://localhost:4723/";
+ Configuration.UDID = "emulator-5554";
open("https://www.google.com");
}
}
diff --git a/src/test/java/TestRunners/TestBrowser.java b/src/test/java/TestRunners/TestBrowser.java
index fae349d..a982e7d 100644
--- a/src/test/java/TestRunners/TestBrowser.java
+++ b/src/test/java/TestRunners/TestBrowser.java
@@ -15,7 +15,6 @@
import static testUI.UIOpen.open;
import static testUI.UIUtils.*;
import static testUI.Utils.By.*;
-import static testUI.Utils.Performance.getListOfCommandsTime;
import static testUI.Utils.Performance.logAverageTime;
import static testUI.elements.TestUI.E;
import static testUI.elements.TestUI.raiseSoftAsserts;
@@ -34,12 +33,9 @@ public void testDesktopBrowser() {
open("https://www.google.com");
UIAssert("the url is not correct",
getSelenideDriver().getCurrentUrl().equals("https://www.google.com/"));
- executeJs("arguments[0].value='TestUI';", googleLandingPage.getGoogleSearchInput()
- .getSelenideElement().getWrappedElement());
googleLandingPage.getGoogleSearch()
.then().saveScreenshot("~/screen.png");
logAverageTime();
- System.out.println(getListOfCommandsTime());
raiseSoftAsserts();
stop();
@@ -66,6 +62,7 @@ public void testDesktopBrowserStatusCode() {
Configuration.logNetworkCalls = true;
Configuration.browser = "chrome";
Configuration.headless = true;
+
open("https://www.google.com")
.getNetworkCalls().filterByExactUrl("https://www.google.com/")
.and()
@@ -88,6 +85,7 @@ public void testDesktopCustomDriverBrowser() {
Configuration.browser = "chrome";
Configuration.headless = true;
Configuration.softAsserts = true;
+
open("https://www.google.com");
stop();
String userAgent = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)";
diff --git a/src/test/java/TestRunners/TestIOS.java b/src/test/java/TestRunners/TestIOS.java
index 39b85b8..9d44988 100644
--- a/src/test/java/TestRunners/TestIOS.java
+++ b/src/test/java/TestRunners/TestIOS.java
@@ -4,6 +4,7 @@
import org.junit.Test;
import testUI.Configuration;
+import static testUI.TestUIServer.stop;
import static testUI.UIOpen.open;
public class TestIOS {
@@ -15,5 +16,7 @@ public void testIOSBrowser() {
Configuration.serverLogLevel = "debug";
Configuration.useNewWDA = false;
open("https://www.facebook.com");
+ stop();
+ open("https://www.facebook.com");
}
}
diff --git a/src/test/java/TestRunners/TestJUnit.java b/src/test/java/TestRunners/TestJUnit.java
index 329f046..088f369 100644
--- a/src/test/java/TestRunners/TestJUnit.java
+++ b/src/test/java/TestRunners/TestJUnit.java
@@ -29,7 +29,7 @@ public void testAndroidBrowser() {
Configuration.testUILogLevel = LogLevel.DEBUG;
Configuration.UDID = "emulator-5554";
Configuration.installMobileChromeDriver = true;
- Configuration.appiumUrl = "http://localhost:4723/wd/hub";
+ Configuration.appiumUrl = "http://localhost:4723";
open("https://www.google.com")
.given().setElement(googleLandingPage.getGoogleSearchInput());
}
diff --git a/src/test/java/pages/GoogleLandingPage.java b/src/test/java/pages/GoogleLandingPage.java
index 6bff1ab..dd52461 100644
--- a/src/test/java/pages/GoogleLandingPage.java
+++ b/src/test/java/pages/GoogleLandingPage.java
@@ -11,8 +11,8 @@ public class GoogleLandingPage {
private UIElement googleSearch = E(byXpath("//button[@class='Tg7LZd']"))
.setSelenideElement(byCssSelector("[aria-label=\"Google Search\"]"))
.setiOSElement(byId("id"));
- private UIElement googleSearchInput = E(byName("q"))
- .setSelenideElement(byName("q"));
+ private UIElement googleSearchInput = E(byCssSelector("form[role=\"search\"] textarea"))
+ .setSelenideElement(byCssSelector("form[role=\"search\"] textarea"));
private UIElement googleCookies = E(byText("I agree"))
.setSelenideElement(byText("I agree"));
}