Skip to content

Commit 8057ac6

Browse files
authored
refactor!: Migrate to Selenium 4 (#1531)
* refactor!: migrate to Selenium 4 BREAKING CHANGE: - interface `io.appium.java_client.MobileDriver` do not extend `org.openqa.selenium.internal.FindsByClassName`, `org.openqa.selenium.internal.FindsByCssSelector`, `org.openqa.selenium.internal.FindsById`, `org.openqa.selenium.internal.FindsByLinkText`, `org.openqa.selenium.internal.FindsByName`, `org.openqa.selenium.internal.FindsByTagName`, `org.openqa.selenium.internal.FindsByXPath` interfaces anymore because they were removed in Selenium Java client; - class `io.appium.java_client.DefaultGenericMobileElement` do not implement `org.openqa.selenium.internal.FindsByClassName`, `org.openqa.selenium.internal.FindsByCssSelector`, `org.openqa.selenium.internal.FindsById`, `org.openqa.selenium.internal.FindsByLinkText`, `org.openqa.selenium.internal.FindsByName`, `org.openqa.selenium.internal.FindsByTagName`, `org.openqa.selenium.internal.FindsByXPath` interfaces anymore because they were removed in Selenium Java client; - method `String io.appium.java_client.remote.MobileOptions#getPlatformName()` is removed in favor of `Platform org.openqa.selenium.Capabilities#getPlatformName()` - method `io.appium.java_client.service.local.AppiumServiceBuilder#withStartUpTimeOut` is removed in favor of `org.openqa.selenium.remote.service.DriverService.Builder#withTimeout` * refactor!: drop Appium FindsBy* iterfaces BREAKING CHANGE: - drop Appium `FindsBy*` iterfaces in the same way it was done in Selenium java client. The removed intefraces are: `io.appium.java_client.FindsByAccessibilityId`, `io.appium.java_client.FindsByAndroidDataMatcher`, `io.appium.java_client.FindsByAndroidUIAutomator`, `io.appium.java_client.FindsByAndroidViewMatcher`, `io.appium.java_client.FindsByAndroidViewTag`, `io.appium.java_client.FindsByCustom`, `io.appium.java_client.FindsByFluentSelector`, `io.appium.java_client.FindsByImage`, `io.appium.java_client.FindsByIosClassChain`, `io.appium.java_client.FindsByIosNSPredicate`, `io.appium.java_client.FindsByWindowsAutomation`, `io.appium.java_client.mac.FindsByClassChain`, `io.appium.java_client.mac.FindsByNsPredicate` - remove methods `findElements(String by, String using)` and `findElement(String by, String using)` from `io.appium.java_client.DefaultGenericMobileDriver` and `io.appium.java_client.DefaultGenericMobileElement` because the originals of these methods are deprecated in Selenium `RemoteWebDriver` and `RemoteWebElement` and throw `UnsupportedOperationException` - remove `io.appium.java_client.MobileSelector` as it's used once, the string values from the enum are inlined in `io.appium.java_client.MobileBy.java` * fix: introduce MobileBy.className The change made in Selenium 4 (SeleniumHQ/selenium@0aaa401#r58091435) broke Appium `class name` selector strategy. The workaround was implemented: `MobileBy#className`. * refactor!: drop deprecated method `AppiumDriver#substituteMobilePlatform` BREAKING CHANGE: drop deprecated method `io.appium.java_client.AppiumDriver#substituteMobilePlatform`
1 parent f2e8f93 commit 8057ac6

File tree

79 files changed

+756
-2427
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+756
-2427
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ signing.secretKeyRingFile=PathToYourKeyRingFile
77
ossrhUsername=your-jira-id
88
ossrhPassword=your-jira-password
99

10-
selenium.version=3.141.59
10+
selenium.version=4.0.0

src/main/java/io/appium/java_client/AppiumDriver.java

Lines changed: 1 addition & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@
6868
*/
6969
@SuppressWarnings("unchecked")
7070
public class AppiumDriver<T extends WebElement>
71-
extends DefaultGenericMobileDriver<T> implements ComparesImages, FindsByImage<T>, FindsByCustom<T>,
72-
ExecutesDriverScript, LogsEvents, HasSettings {
71+
extends DefaultGenericMobileDriver<T> implements ComparesImages, ExecutesDriverScript, LogsEvents, HasSettings {
7372

7473
private static final ErrorHandler errorHandler = new ErrorHandler(new ErrorCodesMobile(), true);
7574
// frequently used command parameters
@@ -134,23 +133,6 @@ public AppiumDriver(Capabilities desiredCapabilities) {
134133
this(AppiumDriverLocalService.buildDefaultService(), desiredCapabilities);
135134
}
136135

137-
/**
138-
* Changes platform name and returns new capabilities.
139-
*
140-
* @param originalCapabilities the given {@link Capabilities}.
141-
* @param newPlatform a {@link MobileCapabilityType#PLATFORM_NAME} value which has
142-
* to be set up
143-
* @return {@link Capabilities} with changed mobile platform value
144-
* @deprecated Please use {@link #updateDefaultPlatformName(Capabilities, String)} instead
145-
*/
146-
@Deprecated
147-
protected static Capabilities substituteMobilePlatform(Capabilities originalCapabilities,
148-
String newPlatform) {
149-
DesiredCapabilities dc = new DesiredCapabilities(originalCapabilities);
150-
dc.setCapability(PLATFORM_NAME, newPlatform);
151-
return dc;
152-
}
153-
154136
/**
155137
* Changes platform name if it is not set and returns new capabilities.
156138
*
@@ -174,49 +156,6 @@ public List<T> findElements(By by) {
174156
return super.findElements(by);
175157
}
176158

177-
@Override
178-
public List<T> findElements(String by, String using) {
179-
return super.findElements(by, using);
180-
}
181-
182-
@Override
183-
public List<T> findElementsById(String id) {
184-
return super.findElementsById(id);
185-
}
186-
187-
public List<T> findElementsByLinkText(String using) {
188-
return super.findElementsByLinkText(using);
189-
}
190-
191-
public List<T> findElementsByPartialLinkText(String using) {
192-
return super.findElementsByPartialLinkText(using);
193-
}
194-
195-
public List<T> findElementsByTagName(String using) {
196-
return super.findElementsByTagName(using);
197-
}
198-
199-
public List<T> findElementsByName(String using) {
200-
return super.findElementsByName(using);
201-
}
202-
203-
public List<T> findElementsByClassName(String using) {
204-
return super.findElementsByClassName(using);
205-
}
206-
207-
public List<T> findElementsByCssSelector(String using) {
208-
return super.findElementsByCssSelector(using);
209-
}
210-
211-
public List<T> findElementsByXPath(String using) {
212-
return super.findElementsByXPath(using);
213-
}
214-
215-
@Override
216-
public List<T> findElementsByAccessibilityId(String using) {
217-
return super.findElementsByAccessibilityId(using);
218-
}
219-
220159
@Override
221160
public ExecuteMethod getExecuteMethod() {
222161
return executeMethod;

src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java

Lines changed: 0 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import org.openqa.selenium.By;
2222
import org.openqa.selenium.Capabilities;
23-
import org.openqa.selenium.WebDriverException;
2423
import org.openqa.selenium.WebElement;
2524
import org.openqa.selenium.remote.CommandExecutor;
2625
import org.openqa.selenium.remote.RemoteWebDriver;
@@ -49,112 +48,10 @@ public DefaultGenericMobileDriver(CommandExecutor executor, Capabilities desired
4948
return super.findElements(by);
5049
}
5150

52-
@Override public List findElements(String by, String using) {
53-
return super.findElements(by, using);
54-
}
55-
5651
@Override public T findElement(By by) {
5752
return (T) super.findElement(by);
5853
}
5954

60-
@Override public T findElement(String by, String using) {
61-
return (T) super.findElement(by, using);
62-
}
63-
64-
@Override public List findElementsById(String id) {
65-
return super.findElementsById(id);
66-
}
67-
68-
@Override public T findElementById(String id) {
69-
return (T) super.findElementById(id);
70-
}
71-
72-
/**
73-
* Finds a single element by link text.
74-
*
75-
* @throws WebDriverException This method doesn't work against native app UI.
76-
*/
77-
public T findElementByLinkText(String using) throws WebDriverException {
78-
return (T) super.findElementByLinkText(using);
79-
}
80-
81-
/**
82-
* Finds many elements by link text.
83-
*
84-
* @throws WebDriverException This method doesn't work against native app UI.
85-
*/
86-
public List findElementsByLinkText(String using) throws WebDriverException {
87-
return super.findElementsByLinkText(using);
88-
}
89-
90-
/**
91-
* Finds a single element by partial link text.
92-
*
93-
* @throws WebDriverException This method doesn't work against native app UI.
94-
*/
95-
public T findElementByPartialLinkText(String using) throws WebDriverException {
96-
return (T) super.findElementByPartialLinkText(using);
97-
}
98-
99-
/**
100-
* Finds many elements by partial link text.
101-
*
102-
* @throws WebDriverException This method doesn't work against native app UI.
103-
*/
104-
public List findElementsByPartialLinkText(String using) throws WebDriverException {
105-
return super.findElementsByPartialLinkText(using);
106-
}
107-
108-
public T findElementByTagName(String using) {
109-
return (T) super.findElementByTagName(using);
110-
}
111-
112-
public List findElementsByTagName(String using) {
113-
return super.findElementsByTagName(using);
114-
}
115-
116-
public T findElementByName(String using) {
117-
return (T) super.findElementByName(using);
118-
}
119-
120-
public List findElementsByName(String using) {
121-
return super.findElementsByName(using);
122-
}
123-
124-
public T findElementByClassName(String using) {
125-
return (T) super.findElementByClassName(using);
126-
}
127-
128-
public List findElementsByClassName(String using) {
129-
return super.findElementsByClassName(using);
130-
}
131-
132-
/**
133-
* Finds a single element by CSS selector.
134-
*
135-
* @throws WebDriverException This method doesn't work against native app UI.
136-
*/
137-
public T findElementByCssSelector(String using) throws WebDriverException {
138-
return (T) super.findElementByCssSelector(using);
139-
}
140-
141-
/**
142-
* Finds many elements by CSS selector.
143-
*
144-
* @throws WebDriverException This method doesn't work against native app UI.
145-
*/
146-
public List findElementsByCssSelector(String using) throws WebDriverException {
147-
return super.findElementsByCssSelector(using);
148-
}
149-
150-
public T findElementByXPath(String using) {
151-
return (T) super.findElementByXPath(using);
152-
}
153-
154-
public List findElementsByXPath(String using) {
155-
return super.findElementsByXPath(using);
156-
}
157-
15855
@Override
15956
public String toString() {
16057
Capabilities capabilities = getCapabilities();

src/main/java/io/appium/java_client/DefaultGenericMobileElement.java

Lines changed: 1 addition & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,14 @@
2121
import org.openqa.selenium.By;
2222
import org.openqa.selenium.WebDriverException;
2323
import org.openqa.selenium.WebElement;
24-
import org.openqa.selenium.internal.FindsByClassName;
25-
import org.openqa.selenium.internal.FindsByCssSelector;
26-
import org.openqa.selenium.internal.FindsById;
27-
import org.openqa.selenium.internal.FindsByLinkText;
28-
import org.openqa.selenium.internal.FindsByName;
29-
import org.openqa.selenium.internal.FindsByTagName;
30-
import org.openqa.selenium.internal.FindsByXPath;
3124
import org.openqa.selenium.remote.RemoteWebElement;
3225
import org.openqa.selenium.remote.Response;
3326

3427
import java.util.List;
3528
import java.util.Map;
3629

3730
@SuppressWarnings({"unchecked", "rawtypes"})
38-
abstract class DefaultGenericMobileElement<T extends WebElement> extends RemoteWebElement
39-
implements FindsByClassName,
40-
FindsByCssSelector, FindsById,
41-
FindsByLinkText, FindsByName, FindsByTagName, FindsByXPath, FindsByFluentSelector<T>, FindsByAccessibilityId<T>,
42-
ExecutesMethod {
31+
abstract class DefaultGenericMobileElement<T extends WebElement> extends RemoteWebElement implements ExecutesMethod {
4332

4433
@Override public Response execute(String driverCommand, Map<String, ?> parameters) {
4534
return super.execute(driverCommand, parameters);
@@ -53,127 +42,8 @@ abstract class DefaultGenericMobileElement<T extends WebElement> extends RemoteW
5342
return super.findElements(by);
5443
}
5544

56-
@Override public List findElements(String by, String using) {
57-
return super.findElements(by, using);
58-
}
59-
6045
@Override public T findElement(By by) {
6146
return (T) super.findElement(by);
6247
}
6348

64-
@Override public T findElement(String by, String using) {
65-
return (T) super.findElement(by, using);
66-
}
67-
68-
@Override public List findElementsById(String id) {
69-
return super.findElementsById(id);
70-
}
71-
72-
@Override public T findElementById(String id) {
73-
return (T) super.findElementById(id);
74-
}
75-
76-
/**
77-
* Finds a single element by link text.
78-
*
79-
* @throws WebDriverException This method doesn't work against native app UI.
80-
*/
81-
public T findElementByLinkText(String using) throws WebDriverException {
82-
return (T) super.findElementByLinkText(using);
83-
}
84-
85-
/**
86-
* Finds many elements by link text.
87-
*
88-
* @throws WebDriverException This method doesn't work against native app UI.
89-
*/
90-
public List findElementsByLinkText(String using) throws WebDriverException {
91-
return super.findElementsByLinkText(using);
92-
}
93-
94-
/**
95-
* Finds a single element by partial link text.
96-
*
97-
* @throws WebDriverException This method doesn't work against native app UI.
98-
*/
99-
public T findElementByPartialLinkText(String using) throws WebDriverException {
100-
return (T) super.findElementByPartialLinkText(using);
101-
}
102-
103-
/**
104-
* Finds many elements by partial link text.
105-
*
106-
* @throws WebDriverException This method doesn't work against native app UI.
107-
*/
108-
public List findElementsByPartialLinkText(String using) throws WebDriverException {
109-
return super.findElementsByPartialLinkText(using);
110-
}
111-
112-
public T findElementByTagName(String using) {
113-
return (T) super.findElementByTagName(using);
114-
}
115-
116-
public List findElementsByTagName(String using) {
117-
return super.findElementsByTagName(using);
118-
}
119-
120-
public T findElementByName(String using) {
121-
return (T) super.findElementByName(using);
122-
}
123-
124-
public List findElementsByName(String using) {
125-
return super.findElementsByName(using);
126-
}
127-
128-
public T findElementByClassName(String using) {
129-
return (T) super.findElementByClassName(using);
130-
}
131-
132-
public List findElementsByClassName(String using) {
133-
return super.findElementsByClassName(using);
134-
}
135-
136-
/**
137-
* Finds a single element by CSS selector.
138-
*
139-
* @throws WebDriverException This method doesn't work against native app UI.
140-
*/
141-
public T findElementByCssSelector(String using) throws WebDriverException {
142-
return (T) super.findElementByCssSelector(using);
143-
}
144-
145-
/**
146-
* Finds many elements by CSS selector.
147-
*
148-
* @throws WebDriverException This method doesn't work against native app UI.
149-
*/
150-
public List findElementsByCssSelector(String using) throws WebDriverException {
151-
return super.findElementsByCssSelector(using);
152-
}
153-
154-
public T findElementByXPath(String using) {
155-
return (T) super.findElementByXPath(using);
156-
}
157-
158-
public List findElementsByXPath(String using) {
159-
return super.findElementsByXPath(using);
160-
}
161-
162-
/**
163-
* {@inheritDoc}
164-
*
165-
* @throws WebDriverException because it may not work against native app UI.
166-
*/
167-
public void submit() throws WebDriverException {
168-
super.submit();
169-
}
170-
171-
/**
172-
* {@inheritDoc}
173-
*
174-
* @throws WebDriverException because it may not work against native app UI.
175-
*/
176-
public String getCssValue(String propertyName) throws WebDriverException {
177-
return super.getCssValue(propertyName);
178-
}
17949
}

src/main/java/io/appium/java_client/DriverMobileCommand.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)