From 3001be137ad3927785efac648fd6cc3cf5e450ba Mon Sep 17 00:00:00 2001 From: Srinivasan Sekar Date: Wed, 13 Oct 2021 19:50:09 +0530 Subject: [PATCH] initial commit to support selenium v4 --- gradle.properties | 2 +- .../DefaultGenericMobileDriver.java | 36 +++++++++---------- .../DefaultGenericMobileElement.java | 36 +++++++++---------- .../appium/java_client/android/Activity.java | 1 - .../JsonToMobileElementConverter.java | 2 +- .../remote/AppiumCommandExecutor.java | 2 +- .../remote/AppiumW3CHttpCommandCodec.java | 2 +- .../java_client/remote/MobileOptions.java | 5 +-- .../local/AppiumDriverLocalService.java | 2 +- .../service/local/AppiumServiceBuilder.java | 8 +++-- .../touch/offset/ElementOption.java | 8 ++--- 11 files changed, 53 insertions(+), 51 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9bd535700..f0bae6203 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,4 +7,4 @@ signing.secretKeyRingFile=PathToYourKeyRingFile ossrhUsername=your-jira-id ossrhPassword=your-jira-password -selenium.version=3.141.59 +selenium.version=4.0.0-rc-3 diff --git a/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java b/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java index 0ca7a1dcc..355495204 100644 --- a/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java +++ b/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java @@ -61,12 +61,12 @@ public DefaultGenericMobileDriver(CommandExecutor executor, Capabilities desired return (T) super.findElement(by, using); } - @Override public List findElementsById(String id) { - return super.findElementsById(id); + public List findElementsById(String id) { + return super.findElements(By.id(id)); } - @Override public T findElementById(String id) { - return (T) super.findElementById(id); + public T findElementById(String id) { + return (T) super.findElement(By.id(id)); } /** @@ -75,7 +75,7 @@ public DefaultGenericMobileDriver(CommandExecutor executor, Capabilities desired * @throws WebDriverException This method doesn't work against native app UI. */ public T findElementByLinkText(String using) throws WebDriverException { - return (T) super.findElementByLinkText(using); + return (T) super.findElement(By.linkText(using)); } /** @@ -84,7 +84,7 @@ public T findElementByLinkText(String using) throws WebDriverException { * @throws WebDriverException This method doesn't work against native app UI. */ public List findElementsByLinkText(String using) throws WebDriverException { - return super.findElementsByLinkText(using); + return super.findElements(By.linkText(using)); } /** @@ -93,7 +93,7 @@ public List findElementsByLinkText(String using) throws WebDriverException { * @throws WebDriverException This method doesn't work against native app UI. */ public T findElementByPartialLinkText(String using) throws WebDriverException { - return (T) super.findElementByPartialLinkText(using); + return (T) super.findElement(By.linkText(using)); } /** @@ -102,31 +102,31 @@ public T findElementByPartialLinkText(String using) throws WebDriverException { * @throws WebDriverException This method doesn't work against native app UI. */ public List findElementsByPartialLinkText(String using) throws WebDriverException { - return super.findElementsByPartialLinkText(using); + return super.findElements(By.linkText(using)); } public T findElementByTagName(String using) { - return (T) super.findElementByTagName(using); + return (T) super.findElement(By.tagName(using)); } public List findElementsByTagName(String using) { - return super.findElementsByTagName(using); + return super.findElements(By.tagName(using)); } public T findElementByName(String using) { - return (T) super.findElementByName(using); + return (T) super.findElement(By.name(using)); } public List findElementsByName(String using) { - return super.findElementsByName(using); + return super.findElements(By.name(using)); } public T findElementByClassName(String using) { - return (T) super.findElementByClassName(using); + return (T) super.findElement(By.className(using)); } public List findElementsByClassName(String using) { - return super.findElementsByClassName(using); + return super.findElements(By.className(using)); } /** @@ -135,7 +135,7 @@ public List findElementsByClassName(String using) { * @throws WebDriverException This method doesn't work against native app UI. */ public T findElementByCssSelector(String using) throws WebDriverException { - return (T) super.findElementByCssSelector(using); + return (T) super.findElement(By.cssSelector(using)); } /** @@ -144,15 +144,15 @@ public T findElementByCssSelector(String using) throws WebDriverException { * @throws WebDriverException This method doesn't work against native app UI. */ public List findElementsByCssSelector(String using) throws WebDriverException { - return super.findElementsByCssSelector(using); + return super.findElements(By.cssSelector(using)); } public T findElementByXPath(String using) { - return (T) super.findElementByXPath(using); + return (T) super.findElement(By.xpath(using)); } public List findElementsByXPath(String using) { - return super.findElementsByXPath(using); + return super.findElements(By.xpath(using)); } @Override diff --git a/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java b/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java index 2d8154880..5f7d6fcb9 100644 --- a/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java +++ b/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java @@ -65,12 +65,12 @@ abstract class DefaultGenericMobileElement extends RemoteW return (T) super.findElement(by, using); } - @Override public List findElementsById(String id) { - return super.findElementsById(id); + public List findElementsById(String id) { + return super.findElements(By.id(id)); } - @Override public T findElementById(String id) { - return (T) super.findElementById(id); + public T findElementById(String id) { + return (T) super.findElement(By.id(id)); } /** @@ -79,7 +79,7 @@ abstract class DefaultGenericMobileElement extends RemoteW * @throws WebDriverException This method doesn't work against native app UI. */ public T findElementByLinkText(String using) throws WebDriverException { - return (T) super.findElementByLinkText(using); + return (T) super.findElement(By.linkText(using)); } /** @@ -88,7 +88,7 @@ public T findElementByLinkText(String using) throws WebDriverException { * @throws WebDriverException This method doesn't work against native app UI. */ public List findElementsByLinkText(String using) throws WebDriverException { - return super.findElementsByLinkText(using); + return super.findElements(By.linkText(using)); } /** @@ -97,7 +97,7 @@ public List findElementsByLinkText(String using) throws WebDriverException { * @throws WebDriverException This method doesn't work against native app UI. */ public T findElementByPartialLinkText(String using) throws WebDriverException { - return (T) super.findElementByPartialLinkText(using); + return (T) super.findElement(By.linkText(using)); } /** @@ -106,31 +106,31 @@ public T findElementByPartialLinkText(String using) throws WebDriverException { * @throws WebDriverException This method doesn't work against native app UI. */ public List findElementsByPartialLinkText(String using) throws WebDriverException { - return super.findElementsByPartialLinkText(using); + return super.findElements(By.linkText(using)); } public T findElementByTagName(String using) { - return (T) super.findElementByTagName(using); + return (T) super.findElement(By.tagName(using)); } public List findElementsByTagName(String using) { - return super.findElementsByTagName(using); + return super.findElements(By.tagName(using)); } public T findElementByName(String using) { - return (T) super.findElementByName(using); + return (T) super.findElement(By.name(using)); } public List findElementsByName(String using) { - return super.findElementsByName(using); + return super.findElements(By.name(using)); } public T findElementByClassName(String using) { - return (T) super.findElementByClassName(using); + return (T) super.findElement(By.className(using)); } public List findElementsByClassName(String using) { - return super.findElementsByClassName(using); + return super.findElements(By.className(using)); } /** @@ -139,7 +139,7 @@ public List findElementsByClassName(String using) { * @throws WebDriverException This method doesn't work against native app UI. */ public T findElementByCssSelector(String using) throws WebDriverException { - return (T) super.findElementByCssSelector(using); + return (T) super.findElement(By.cssSelector(using)); } /** @@ -148,15 +148,15 @@ public T findElementByCssSelector(String using) throws WebDriverException { * @throws WebDriverException This method doesn't work against native app UI. */ public List findElementsByCssSelector(String using) throws WebDriverException { - return super.findElementsByCssSelector(using); + return super.findElements(By.cssSelector(using)); } public T findElementByXPath(String using) { - return (T) super.findElementByXPath(using); + return (T) super.findElement(By.xpath(using)); } public List findElementsByXPath(String using) { - return super.findElementsByXPath(using); + return super.findElements(By.xpath(using)); } /** diff --git a/src/main/java/io/appium/java_client/android/Activity.java b/src/main/java/io/appium/java_client/android/Activity.java index da957d746..41a17dc8c 100644 --- a/src/main/java/io/appium/java_client/android/Activity.java +++ b/src/main/java/io/appium/java_client/android/Activity.java @@ -2,7 +2,6 @@ import lombok.Data; import lombok.experimental.Accessors; -import okhttp3.Interceptor; import static com.google.common.base.Preconditions.checkArgument; import static org.apache.commons.lang3.StringUtils.isBlank; diff --git a/src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java b/src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java index 9f8674a90..4d9045c72 100644 --- a/src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java +++ b/src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java @@ -24,7 +24,7 @@ import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.remote.RemoteWebElement; -import org.openqa.selenium.remote.internal.JsonToWebElementConverter; +import org.openqa.selenium.remote.JsonToWebElementConverter; import java.lang.reflect.Constructor; diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 2b0f77f7e..20560bf75 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -44,10 +44,10 @@ import org.openqa.selenium.remote.ProtocolHandshake; import org.openqa.selenium.remote.Response; import org.openqa.selenium.remote.ResponseCodec; +import org.openqa.selenium.remote.codec.w3c.W3CHttpCommandCodec; import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpRequest; import org.openqa.selenium.remote.http.HttpResponse; -import org.openqa.selenium.remote.http.W3CHttpCommandCodec; import org.openqa.selenium.remote.service.DriverService; import java.io.BufferedInputStream; diff --git a/src/main/java/io/appium/java_client/remote/AppiumW3CHttpCommandCodec.java b/src/main/java/io/appium/java_client/remote/AppiumW3CHttpCommandCodec.java index aec7ebd75..0fe0ace05 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumW3CHttpCommandCodec.java +++ b/src/main/java/io/appium/java_client/remote/AppiumW3CHttpCommandCodec.java @@ -32,7 +32,7 @@ import org.openqa.selenium.interactions.KeyInput; import org.openqa.selenium.interactions.Sequence; -import org.openqa.selenium.remote.http.W3CHttpCommandCodec; +import org.openqa.selenium.remote.codec.w3c.W3CHttpCommandCodec; import java.util.Collection; import java.util.Map; diff --git a/src/main/java/io/appium/java_client/remote/MobileOptions.java b/src/main/java/io/appium/java_client/remote/MobileOptions.java index 6a7810f1a..dcda9ee59 100644 --- a/src/main/java/io/appium/java_client/remote/MobileOptions.java +++ b/src/main/java/io/appium/java_client/remote/MobileOptions.java @@ -18,6 +18,7 @@ import org.openqa.selenium.Capabilities; import org.openqa.selenium.MutableCapabilities; +import org.openqa.selenium.Platform; import org.openqa.selenium.ScreenOrientation; import org.openqa.selenium.remote.CapabilityType; @@ -58,8 +59,8 @@ public T setPlatformName(String platform) { * @return String representing the kind of mobile device or emulator to use. * @see org.openqa.selenium.remote.CapabilityType#PLATFORM_NAME */ - public String getPlatformName() { - return (String) getCapability(CapabilityType.PLATFORM_NAME); + public Platform getPlatformName() { + return (Platform) getCapability(CapabilityType.PLATFORM_NAME); } /** diff --git a/src/main/java/io/appium/java_client/service/local/AppiumDriverLocalService.java b/src/main/java/io/appium/java_client/service/local/AppiumDriverLocalService.java index 3e82e0de4..b0c4a0c74 100644 --- a/src/main/java/io/appium/java_client/service/local/AppiumDriverLocalService.java +++ b/src/main/java/io/appium/java_client/service/local/AppiumDriverLocalService.java @@ -74,7 +74,7 @@ public final class AppiumDriverLocalService extends DriverService { AppiumDriverLocalService(String ipAddress, File nodeJSExec, int nodeJSPort, ImmutableList nodeJSArgs, ImmutableMap nodeJSEnvironment, long startupTimeout, TimeUnit timeUnit) throws IOException { - super(nodeJSExec, nodeJSPort, nodeJSArgs, nodeJSEnvironment); + super(nodeJSExec, nodeJSPort, Duration.ofSeconds(startupTimeout), nodeJSArgs, nodeJSEnvironment); this.nodeJSExec = nodeJSExec; this.nodeJSArgs = nodeJSArgs; this.nodeJSEnvironment = nodeJSEnvironment; diff --git a/src/main/java/io/appium/java_client/service/local/AppiumServiceBuilder.java b/src/main/java/io/appium/java_client/service/local/AppiumServiceBuilder.java index dc9b669be..4369cf2d3 100644 --- a/src/main/java/io/appium/java_client/service/local/AppiumServiceBuilder.java +++ b/src/main/java/io/appium/java_client/service/local/AppiumServiceBuilder.java @@ -47,6 +47,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; +import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -474,11 +475,12 @@ public AppiumServiceBuilder withLogFile(File logFile) { @Override protected AppiumDriverLocalService createDriverService(File nodeJSExecutable, int nodeJSPort, - ImmutableList nodeArguments, - ImmutableMap nodeEnvironment) { + Duration timeout, + List nodeArguments, + Map nodeEnvironment) { try { return new AppiumDriverLocalService(ipAddress, nodeJSExecutable, nodeJSPort, - nodeArguments, nodeEnvironment, startupTimeout, timeUnit); + ImmutableList.copyOf(nodeArguments), (ImmutableMap) nodeEnvironment, startupTimeout, timeUnit); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/io/appium/java_client/touch/offset/ElementOption.java b/src/main/java/io/appium/java_client/touch/offset/ElementOption.java index ede90103c..cbae27a81 100644 --- a/src/main/java/io/appium/java_client/touch/offset/ElementOption.java +++ b/src/main/java/io/appium/java_client/touch/offset/ElementOption.java @@ -6,7 +6,7 @@ import org.openqa.selenium.Point; import org.openqa.selenium.WebElement; -import org.openqa.selenium.internal.HasIdentity; +import org.openqa.selenium.remote.RemoteWebElement; import java.util.HashMap; import java.util.Map; @@ -84,9 +84,9 @@ public ElementOption withCoordinates(int xOffset, int yOffset) { public ElementOption withElement(WebElement element) { checkNotNull(element); checkArgument(true, "Element should be an instance of the class which " - + "implements org.openqa.selenium.internal.HasIdentity", - element instanceof HasIdentity); - elementId = ((HasIdentity) element).getId(); + + "implements org.openqa.selenium.remote.RemoteWebElement", + element instanceof RemoteWebElement); + elementId = ((RemoteWebElement) element).getId(); return this; }