From 5afab9089dc6f20939b1f33e7e4b43a4daf3ce91 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 17 Sep 2023 21:26:13 +0530 Subject: [PATCH 01/13] Java code conventions fixes --- .../java/io/appium/java_client/AppiumBy.java | 23 ++++++++++++++++--- .../java_client/CommandExecutionHelper.java | 3 +++ .../appium/java_client/ErrorCodesMobile.java | 3 +++ .../appium/java_client/InteractsWithApps.java | 8 +++---- .../io/appium/java_client/LocksDevice.java | 2 +- .../appium/java_client/ScreenshotState.java | 4 ++-- .../java/io/appium/java_client/Setting.java | 1 + .../android/options/app/IntentOptions.java | 10 ++++---- .../app/SupportsActivityOptionsOption.java | 2 +- .../app/SupportsIntentOptionsOption.java | 2 +- .../options/avd/SupportsAvdArgsOption.java | 2 +- .../options/avd/SupportsAvdEnvOption.java | 2 +- .../localization/SupportsAppLocaleOption.java | 2 +- .../options/server/EspressoBuildConfig.java | 2 +- .../SupportsEspressoBuildConfigOption.java | 2 +- .../options/SupportsBuildCheckOption.java | 6 ++--- .../imagecomparison/ComparisonResult.java | 2 +- .../OccurrenceMatchingResult.java | 2 +- .../internal/CapabilityHelpers.java | 4 +++- .../appium/java_client/internal/Config.java | 2 +- .../internal/ReflectionHelpers.java | 4 +++- .../java_client/internal/SessionHelpers.java | 3 +++ .../other/SupportsCommandTimeoutsOption.java | 2 +- .../simulator/SupportsPermissionsOption.java | 2 +- ...imulatorPasteboardAutomaticSyncOption.java | 2 +- .../ios/options/wda/ProcessArguments.java | 4 ++-- .../wda/SupportsWaitForIdleTimeoutOption.java | 2 +- .../SupportsWdaEventloopIdleDelayOption.java | 2 +- .../wda/SupportsXcodeCertificateOptions.java | 2 +- .../java_client/mac/options/Mac2Options.java | 4 ++-- .../pagefactory/AppiumElementLocator.java | 4 ++-- .../pagefactory/AppiumFieldDecorator.java | 2 +- .../pagefactory/OverrideWidgetReader.java | 4 +++- .../pagefactory/ThrowableUtil.java | 3 +++ .../java_client/pagefactory/WithTimeout.java | 4 ++++ .../pagefactory/bys/ContentMappedBy.java | 15 ++++++++++++ .../bys/builder/AppiumByBuilder.java | 16 ++++++------- .../pagefactory/bys/builder/Strategies.java | 2 +- .../InterceptorOfAListOfElements.java | 2 +- .../InterceptorOfASingleElement.java | 2 +- .../utils/WebDriverUnpackUtility.java | 4 +++- .../appium/java_client/proxy/Interceptor.java | 3 +++ .../remote/AppiumCommandExecutor.java | 2 +- .../options/SupportsOrientationOption.java | 2 +- .../remote/options/SupportsProxyOption.java | 2 +- .../remote/options/SystemScript.java | 4 ++-- .../options/UnhandledPromptBehavior.java | 2 +- .../local/AppiumDriverLocalService.java | 19 +++++++-------- .../service/local/AppiumServiceBuilder.java | 4 ++-- .../service/local/ListOutputStream.java | 2 ++ .../windows/options/WindowsOptions.java | 10 ++++---- 51 files changed, 141 insertions(+), 78 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumBy.java b/src/main/java/io/appium/java_client/AppiumBy.java index 297e9a9b3..acfdc5fa7 100644 --- a/src/main/java/io/appium/java_client/AppiumBy.java +++ b/src/main/java/io/appium/java_client/AppiumBy.java @@ -16,7 +16,9 @@ package io.appium.java_client; +import lombok.AccessLevel; import lombok.Getter; +import lombok.NoArgsConstructor; import org.apache.commons.lang3.Validate; import org.openqa.selenium.By; import org.openqa.selenium.By.Remotable; @@ -25,6 +27,7 @@ import java.io.Serializable; import java.util.List; +import java.util.Objects; public abstract class AppiumBy extends By implements Remotable { @@ -51,9 +54,9 @@ protected AppiumBy(String selector, String locatorString, String locatorName) { /** * About Android accessibility - * https://developer.android.com/intl/ru/training/accessibility/accessible-app.html + * https://developer.android.com/intl/ru/training/accessibility/accessible-app.html * About iOS accessibility - * https://developer.apple.com/library/ios/documentation/UIKit/Reference/ + * https://developer.apple.com/library/ios/documentation/UIKit/Reference/ * UIAccessibilityIdentification_Protocol/index.html * @param accessibilityId id is a convenient UI automation accessibility Id. * @return an instance of {@link AppiumBy.ByAndroidUIAutomator} @@ -74,7 +77,7 @@ public static By androidDataMatcher(final String dataMatcherString) { } /** - * Refer to https://developer.android.com/training/testing/ui-automator + * Refer to https://developer.android.com/training/testing/ui-automator * @param uiautomatorText is Android UIAutomator string * @return an instance of {@link AppiumBy.ByAndroidUIAutomator} */ @@ -253,6 +256,20 @@ protected ByIosNsPredicate(String locatorString) { super("-ios predicate string", locatorString, "iOSNsPredicate"); } } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + AppiumBy appiumBy = (AppiumBy) o; + return Objects.equals(remoteParameters, appiumBy.remoteParameters) && Objects.equals(locatorName, appiumBy.locatorName); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), remoteParameters, locatorName); + } } diff --git a/src/main/java/io/appium/java_client/CommandExecutionHelper.java b/src/main/java/io/appium/java_client/CommandExecutionHelper.java index 0a41f17b6..7abfef612 100644 --- a/src/main/java/io/appium/java_client/CommandExecutionHelper.java +++ b/src/main/java/io/appium/java_client/CommandExecutionHelper.java @@ -17,6 +17,8 @@ package io.appium.java_client; import com.google.common.collect.ImmutableMap; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import org.openqa.selenium.remote.Response; import javax.annotation.Nullable; @@ -26,6 +28,7 @@ import static org.openqa.selenium.remote.DriverCommand.EXECUTE_SCRIPT; +@NoArgsConstructor(access = AccessLevel.PRIVATE) public final class CommandExecutionHelper { @Nullable diff --git a/src/main/java/io/appium/java_client/ErrorCodesMobile.java b/src/main/java/io/appium/java_client/ErrorCodesMobile.java index 6e7e66d69..473c014d9 100644 --- a/src/main/java/io/appium/java_client/ErrorCodesMobile.java +++ b/src/main/java/io/appium/java_client/ErrorCodesMobile.java @@ -43,6 +43,7 @@ public class ErrorCodesMobile extends ErrorCodes { * @param statusCode The status code to convert. * @return The exception type that corresponds to the provided status */ + @Override public Class getExceptionType(int statusCode) { switch (statusCode) { case NO_SUCH_CONTEXT: @@ -60,6 +61,7 @@ public Class getExceptionType(int statusCode) { * @return The exception type that corresponds to the provided error message or {@code null} if * there are no matching mobile exceptions. */ + @Override public Class getExceptionType(String message) { for (Map.Entry entry : statusToState.entrySet()) { if (message.contains(entry.getValue())) { @@ -75,6 +77,7 @@ public Class getExceptionType(String message) { * @param thrown The thrown error. * @return The corresponding status code for the given thrown error. */ + @Override public int toStatusCode(Throwable thrown) { if (thrown instanceof NoSuchContextException) { return NO_SUCH_CONTEXT; diff --git a/src/main/java/io/appium/java_client/InteractsWithApps.java b/src/main/java/io/appium/java_client/InteractsWithApps.java index 45f1c285d..d61f85b19 100644 --- a/src/main/java/io/appium/java_client/InteractsWithApps.java +++ b/src/main/java/io/appium/java_client/InteractsWithApps.java @@ -75,7 +75,7 @@ default void installApp(String appPath, @Nullable BaseInstallApplicationOptions Map args = ImmutableMap.builder() .put("appPath", appPath) .putAll(Optional.ofNullable(options).map( - (opts) -> ImmutableMap.of("options", opts.build()) + opts -> ImmutableMap.of("options", opts.build()) ).orElseGet(ImmutableMap::of)) .build(); CommandExecutionHelper.execute( @@ -169,7 +169,7 @@ default boolean removeApp(String bundleId, @Nullable BaseRemoveApplicationOption Map args = ImmutableMap.builder() .put("bundleId", bundleId) .putAll(Optional.ofNullable(options).map( - (opts) -> ImmutableMap.of("options", opts.build()) + opts -> ImmutableMap.of("options", opts.build()) ).orElseGet(ImmutableMap::of)) .build(); //noinspection RedundantCast @@ -214,7 +214,7 @@ default void activateApp(String bundleId, @Nullable BaseActivateApplicationOptio Map args = ImmutableMap.builder() .put("bundleId", bundleId) .putAll(Optional.ofNullable(options).map( - (opts) -> ImmutableMap.of("options", opts.build()) + opts -> ImmutableMap.of("options", opts.build()) ).orElseGet(ImmutableMap::of)) .build(); CommandExecutionHelper.execute( @@ -290,7 +290,7 @@ default boolean terminateApp(String bundleId, @Nullable BaseTerminateApplication Map args = ImmutableMap.builder() .put("bundleId", bundleId) .putAll(Optional.ofNullable(options).map( - (opts) -> ImmutableMap.of("options", opts.build()) + opts -> ImmutableMap.of("options", opts.build()) ).orElseGet(ImmutableMap::of)) .build(); //noinspection RedundantCast diff --git a/src/main/java/io/appium/java_client/LocksDevice.java b/src/main/java/io/appium/java_client/LocksDevice.java index 60ba88ffc..76cc969d2 100644 --- a/src/main/java/io/appium/java_client/LocksDevice.java +++ b/src/main/java/io/appium/java_client/LocksDevice.java @@ -64,7 +64,7 @@ default void unlockDevice() { final String extName = "mobile: unlock"; try { //noinspection ConstantConditions - if (!(Boolean) CommandExecutionHelper.executeScript(assertExtensionExists(extName), "mobile: isLocked")) { + if (!Boolean.parseBoolean(CommandExecutionHelper.executeScript(assertExtensionExists(extName), "mobile: isLocked"))) { return; } CommandExecutionHelper.executeScript(this, extName); diff --git a/src/main/java/io/appium/java_client/ScreenshotState.java b/src/main/java/io/appium/java_client/ScreenshotState.java index 8c88397e5..1747a1e41 100644 --- a/src/main/java/io/appium/java_client/ScreenshotState.java +++ b/src/main/java/io/appium/java_client/ScreenshotState.java @@ -175,7 +175,7 @@ private ScreenshotState checkState(Function checkerFunc, Durati * @throws ScreenshotComparisonError if {@link #remember()} method has not been invoked yet */ public ScreenshotState verifyChanged(Duration timeout, double minScore) { - return checkState((x) -> x < minScore, timeout); + return checkState(x -> x < minScore, timeout); } /** @@ -190,7 +190,7 @@ public ScreenshotState verifyChanged(Duration timeout, double minScore) { * @throws ScreenshotComparisonError if {@link #remember()} method has not been invoked yet */ public ScreenshotState verifyNotChanged(Duration timeout, double minScore) { - return checkState((x) -> x >= minScore, timeout); + return checkState(x -> x >= minScore, timeout); } /** diff --git a/src/main/java/io/appium/java_client/Setting.java b/src/main/java/io/appium/java_client/Setting.java index b5b84ca16..cc1f44cd1 100644 --- a/src/main/java/io/appium/java_client/Setting.java +++ b/src/main/java/io/appium/java_client/Setting.java @@ -65,6 +65,7 @@ public enum Setting { this.name = name; } + @Override public String toString() { return this.name; } diff --git a/src/main/java/io/appium/java_client/android/options/app/IntentOptions.java b/src/main/java/io/appium/java_client/android/options/app/IntentOptions.java index e651a4b91..67f09f2b5 100644 --- a/src/main/java/io/appium/java_client/android/options/app/IntentOptions.java +++ b/src/main/java/io/appium/java_client/android/options/app/IntentOptions.java @@ -261,7 +261,7 @@ public IntentOptions withEi(Map ei) { private Map convertMapValues(Map map, Function converter) { return map.entrySet().stream() .collect(Collectors.toMap( - Map.Entry::getKey, (entry) -> converter.apply(String.valueOf(entry.getValue()))) + Map.Entry::getKey, entry -> converter.apply(String.valueOf(entry.getValue()))) ); } @@ -272,7 +272,7 @@ private Map convertMapValues(Map map, Function> getEi() { Optional> value = getOptionValue("ei"); - return value.map((v) -> convertMapValues(v, Integer::parseInt)); + return value.map(v -> convertMapValues(v, Integer::parseInt)); } /** @@ -292,7 +292,7 @@ public IntentOptions withEl(Map el) { */ public Optional> getEl() { Optional> value = getOptionValue("el"); - return value.map((v) -> convertMapValues(v, Long::parseLong)); + return value.map(v -> convertMapValues(v, Long::parseLong)); } /** @@ -312,7 +312,7 @@ public IntentOptions withEf(Map ef) { */ public Optional> getEf() { Optional> value = getOptionValue("ef"); - return value.map((v) -> convertMapValues(v, Float::parseFloat)); + return value.map(v -> convertMapValues(v, Float::parseFloat)); } /** @@ -356,7 +356,7 @@ public Optional> getEcn() { private static Map mergeValues(Map map) { return map.entrySet().stream() .collect( - Collectors.toMap(Map.Entry::getKey, (entry) -> ((List) entry.getValue()).stream() + Collectors.toMap(Map.Entry::getKey, entry -> ((List) entry.getValue()).stream() .map(String::valueOf) .collect(Collectors.joining(","))) ); diff --git a/src/main/java/io/appium/java_client/android/options/app/SupportsActivityOptionsOption.java b/src/main/java/io/appium/java_client/android/options/app/SupportsActivityOptionsOption.java index 393ee51c5..59d5fe520 100644 --- a/src/main/java/io/appium/java_client/android/options/app/SupportsActivityOptionsOption.java +++ b/src/main/java/io/appium/java_client/android/options/app/SupportsActivityOptionsOption.java @@ -48,6 +48,6 @@ default T setActivityOptions(ActivityOptions options) { default Optional getActivityOptions() { //noinspection unchecked return Optional.ofNullable(getCapability(ACTIVITY_OPTIONS_OPTION)) - .map((v) -> new ActivityOptions((Map) v)); + .map(v -> new ActivityOptions((Map) v)); } } diff --git a/src/main/java/io/appium/java_client/android/options/app/SupportsIntentOptionsOption.java b/src/main/java/io/appium/java_client/android/options/app/SupportsIntentOptionsOption.java index 91c2b49a2..3c0fab894 100644 --- a/src/main/java/io/appium/java_client/android/options/app/SupportsIntentOptionsOption.java +++ b/src/main/java/io/appium/java_client/android/options/app/SupportsIntentOptionsOption.java @@ -48,6 +48,6 @@ default T setIntentOptions(IntentOptions options) { default Optional getIntentOptions() { //noinspection unchecked return Optional.ofNullable(getCapability(INTENT_OPTIONS_OPTION)) - .map((v) -> new IntentOptions((Map) v)); + .map(v -> new IntentOptions((Map) v)); } } diff --git a/src/main/java/io/appium/java_client/android/options/avd/SupportsAvdArgsOption.java b/src/main/java/io/appium/java_client/android/options/avd/SupportsAvdArgsOption.java index 7843393e4..bca9866c0 100644 --- a/src/main/java/io/appium/java_client/android/options/avd/SupportsAvdArgsOption.java +++ b/src/main/java/io/appium/java_client/android/options/avd/SupportsAvdArgsOption.java @@ -56,7 +56,7 @@ default T setAvdArgs(String args) { default Optional, String>> getAvdArgs() { //noinspection unchecked return Optional.ofNullable(getCapability(AVD_ARGS_OPTION)) - .map((v) -> v instanceof List + .map(v -> v instanceof List ? Either.left((List) v) : Either.right(String.valueOf(v)) ); diff --git a/src/main/java/io/appium/java_client/android/options/avd/SupportsAvdEnvOption.java b/src/main/java/io/appium/java_client/android/options/avd/SupportsAvdEnvOption.java index e6d083aee..9fadb6532 100644 --- a/src/main/java/io/appium/java_client/android/options/avd/SupportsAvdEnvOption.java +++ b/src/main/java/io/appium/java_client/android/options/avd/SupportsAvdEnvOption.java @@ -45,6 +45,6 @@ default T setAvdEnv(Map env) { default Optional> getAvdEnv() { //noinspection unchecked return Optional.ofNullable(getCapability(AVD_ENV_OPTION)) - .map((v) -> (Map) v); + .map(v -> (Map) v); } } diff --git a/src/main/java/io/appium/java_client/android/options/localization/SupportsAppLocaleOption.java b/src/main/java/io/appium/java_client/android/options/localization/SupportsAppLocaleOption.java index 40447d749..d8fafba02 100644 --- a/src/main/java/io/appium/java_client/android/options/localization/SupportsAppLocaleOption.java +++ b/src/main/java/io/appium/java_client/android/options/localization/SupportsAppLocaleOption.java @@ -51,6 +51,6 @@ default T setAppLocale(AppLocale locale) { default Optional getAppLocale() { //noinspection unchecked return Optional.ofNullable(getCapability(APP_LOCALE_OPTION)) - .map((v) -> new AppLocale((Map) v)); + .map(v -> new AppLocale((Map) v)); } } diff --git a/src/main/java/io/appium/java_client/android/options/server/EspressoBuildConfig.java b/src/main/java/io/appium/java_client/android/options/server/EspressoBuildConfig.java index 2044f0bd1..24adc5675 100644 --- a/src/main/java/io/appium/java_client/android/options/server/EspressoBuildConfig.java +++ b/src/main/java/io/appium/java_client/android/options/server/EspressoBuildConfig.java @@ -51,7 +51,7 @@ private EspressoBuildConfig assignToolsVersionsField(String name, Object value) private Optional getToolsVersionsFieldValue(String name) { Optional> toolsVersionsOptional = getOptionValue(TOOLS_VERSION); //noinspection unchecked - return toolsVersionsOptional.map((v) -> (R) v.getOrDefault(name, null)); + return toolsVersionsOptional.map(v -> (R) v.getOrDefault(name, null)); } /** diff --git a/src/main/java/io/appium/java_client/android/options/server/SupportsEspressoBuildConfigOption.java b/src/main/java/io/appium/java_client/android/options/server/SupportsEspressoBuildConfigOption.java index 93eb19831..a916ec35b 100644 --- a/src/main/java/io/appium/java_client/android/options/server/SupportsEspressoBuildConfigOption.java +++ b/src/main/java/io/appium/java_client/android/options/server/SupportsEspressoBuildConfigOption.java @@ -61,7 +61,7 @@ default T setEspressoBuildConfig(EspressoBuildConfig config) { default Optional> getEspressoBuildConfig() { return Optional.ofNullable(getCapability(ESPRESSO_BUILD_CONFIG_OPTION)) .map(String::valueOf) - .map((v) -> v.trim().startsWith("{") + .map(v -> v.trim().startsWith("{") ? Either.left(new EspressoBuildConfig(v)) : Either.right(v) ); diff --git a/src/main/java/io/appium/java_client/chromium/options/SupportsBuildCheckOption.java b/src/main/java/io/appium/java_client/chromium/options/SupportsBuildCheckOption.java index d9e95f065..204967bca 100644 --- a/src/main/java/io/appium/java_client/chromium/options/SupportsBuildCheckOption.java +++ b/src/main/java/io/appium/java_client/chromium/options/SupportsBuildCheckOption.java @@ -33,11 +33,11 @@ public interface SupportsBuildCheckOption> extends * Unless disable build check preference has been user-set, the capability * is not present because the default value is false. * - * @param BuildCheckDisabled flag for --disable-build-check. + * @param buildCheckDisabled flag for --disable-build-check. * @return self instance for chaining. */ - default T setBuildCheckDisabled(boolean BuildCheckDisabled) { - return amend(DISABLE_BUILD_CHECK, BuildCheckDisabled); + default T setBuildCheckDisabled(boolean buildCheckDisabled) { + return amend(DISABLE_BUILD_CHECK, buildCheckDisabled); } /** diff --git a/src/main/java/io/appium/java_client/imagecomparison/ComparisonResult.java b/src/main/java/io/appium/java_client/imagecomparison/ComparisonResult.java index 49e487b59..ba9c07093 100644 --- a/src/main/java/io/appium/java_client/imagecomparison/ComparisonResult.java +++ b/src/main/java/io/appium/java_client/imagecomparison/ComparisonResult.java @@ -34,7 +34,7 @@ public abstract class ComparisonResult { @Getter(AccessLevel.PROTECTED) private final Map commandResult; - public ComparisonResult(Map commandResult) { + protected ComparisonResult(Map commandResult) { this.commandResult = commandResult; } diff --git a/src/main/java/io/appium/java_client/imagecomparison/OccurrenceMatchingResult.java b/src/main/java/io/appium/java_client/imagecomparison/OccurrenceMatchingResult.java index 256a1636a..510f64b8e 100644 --- a/src/main/java/io/appium/java_client/imagecomparison/OccurrenceMatchingResult.java +++ b/src/main/java/io/appium/java_client/imagecomparison/OccurrenceMatchingResult.java @@ -65,7 +65,7 @@ public List getMultiple() { //noinspection unchecked List> multiple = (List>) getCommandResult().get(MULTIPLE); return multiple.stream() - .map((m) -> new OccurrenceMatchingResult(m, false)) + .map(m -> new OccurrenceMatchingResult(m, false)) .collect(Collectors.toList()); } } diff --git a/src/main/java/io/appium/java_client/internal/CapabilityHelpers.java b/src/main/java/io/appium/java_client/internal/CapabilityHelpers.java index 3645a7520..7291eb44d 100644 --- a/src/main/java/io/appium/java_client/internal/CapabilityHelpers.java +++ b/src/main/java/io/appium/java_client/internal/CapabilityHelpers.java @@ -16,6 +16,8 @@ package io.appium.java_client.internal; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import org.openqa.selenium.Capabilities; import javax.annotation.Nullable; @@ -25,7 +27,7 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Function; - +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class CapabilityHelpers { public static final String APPIUM_PREFIX = "appium:"; diff --git a/src/main/java/io/appium/java_client/internal/Config.java b/src/main/java/io/appium/java_client/internal/Config.java index fd9ef73c1..83bfb7995 100644 --- a/src/main/java/io/appium/java_client/internal/Config.java +++ b/src/main/java/io/appium/java_client/internal/Config.java @@ -58,7 +58,7 @@ public T getValue(String key, Class valueType) { * @throws ClassCastException if the retrieved value cannot be cast to `valueType` type */ public Optional getOptionalValue(String key, Class valueType) { - final Properties cachedProps = cache.computeIfAbsent(configName, (k) -> { + final Properties cachedProps = cache.computeIfAbsent(configName, k -> { try (InputStream configFileStream = getClass().getClassLoader().getResourceAsStream(configName)) { final Properties p = new Properties(); p.load(configFileStream); diff --git a/src/main/java/io/appium/java_client/internal/ReflectionHelpers.java b/src/main/java/io/appium/java_client/internal/ReflectionHelpers.java index cbaa7c796..4f9cfa4dc 100644 --- a/src/main/java/io/appium/java_client/internal/ReflectionHelpers.java +++ b/src/main/java/io/appium/java_client/internal/ReflectionHelpers.java @@ -16,10 +16,12 @@ package io.appium.java_client.internal; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import org.openqa.selenium.WebDriverException; import java.lang.reflect.Field; - +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class ReflectionHelpers { /** diff --git a/src/main/java/io/appium/java_client/internal/SessionHelpers.java b/src/main/java/io/appium/java_client/internal/SessionHelpers.java index b3b9f0eca..c028bdfb5 100644 --- a/src/main/java/io/appium/java_client/internal/SessionHelpers.java +++ b/src/main/java/io/appium/java_client/internal/SessionHelpers.java @@ -16,7 +16,9 @@ package io.appium.java_client.internal; +import lombok.AccessLevel; import lombok.Data; +import lombok.NoArgsConstructor; import org.openqa.selenium.InvalidArgumentException; import org.openqa.selenium.WebDriverException; @@ -25,6 +27,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class SessionHelpers { private static final Pattern SESSION = Pattern.compile("/session/([^/]+)"); diff --git a/src/main/java/io/appium/java_client/ios/options/other/SupportsCommandTimeoutsOption.java b/src/main/java/io/appium/java_client/ios/options/other/SupportsCommandTimeoutsOption.java index 0afd1a9a8..4461985c1 100644 --- a/src/main/java/io/appium/java_client/ios/options/other/SupportsCommandTimeoutsOption.java +++ b/src/main/java/io/appium/java_client/ios/options/other/SupportsCommandTimeoutsOption.java @@ -62,7 +62,7 @@ default T setCommandTimeouts(Duration timeout) { default Optional> getCommandTimeouts() { return Optional.ofNullable(getCapability(COMMAND_TIMEOUTS_OPTION)) .map(String::valueOf) - .map((v) -> v.trim().startsWith("{") + .map(v -> v.trim().startsWith("{") ? Either.left(new CommandTimeouts(v)) : Either.right(toDuration(v)) ); diff --git a/src/main/java/io/appium/java_client/ios/options/simulator/SupportsPermissionsOption.java b/src/main/java/io/appium/java_client/ios/options/simulator/SupportsPermissionsOption.java index e3a4b36c2..3f55a335c 100644 --- a/src/main/java/io/appium/java_client/ios/options/simulator/SupportsPermissionsOption.java +++ b/src/main/java/io/appium/java_client/ios/options/simulator/SupportsPermissionsOption.java @@ -44,6 +44,6 @@ default T setPermissions(Permissions permissions) { */ default Optional getPermissions() { return Optional.ofNullable(getCapability(PERMISSIONS_OPTION)) - .map((v) -> new Permissions(String.valueOf(v))); + .map(v -> new Permissions(String.valueOf(v))); } } diff --git a/src/main/java/io/appium/java_client/ios/options/simulator/SupportsSimulatorPasteboardAutomaticSyncOption.java b/src/main/java/io/appium/java_client/ios/options/simulator/SupportsSimulatorPasteboardAutomaticSyncOption.java index 7f99af2e0..665c4d368 100644 --- a/src/main/java/io/appium/java_client/ios/options/simulator/SupportsSimulatorPasteboardAutomaticSyncOption.java +++ b/src/main/java/io/appium/java_client/ios/options/simulator/SupportsSimulatorPasteboardAutomaticSyncOption.java @@ -47,6 +47,6 @@ default T setSimulatorPasteboardAutomaticSync(PasteboardSyncState state) { */ default Optional getSimulatorPasteboardAutomaticSync() { return Optional.ofNullable(getCapability(SIMULATOR_PASTEBOARD_AUTOMATIC_SYNC)) - .map((v) -> PasteboardSyncState.valueOf(String.valueOf(v).toUpperCase())); + .map(v -> PasteboardSyncState.valueOf(String.valueOf(v).toUpperCase())); } } diff --git a/src/main/java/io/appium/java_client/ios/options/wda/ProcessArguments.java b/src/main/java/io/appium/java_client/ios/options/wda/ProcessArguments.java index c5ed74d22..08b06f9f8 100644 --- a/src/main/java/io/appium/java_client/ios/options/wda/ProcessArguments.java +++ b/src/main/java/io/appium/java_client/ios/options/wda/ProcessArguments.java @@ -49,8 +49,8 @@ public ProcessArguments(Map env) { */ public Map toMap() { Map result = new HashMap<>(); - Optional.ofNullable(args).ifPresent((v) -> result.put("args", v)); - Optional.ofNullable(env).ifPresent((v) -> result.put("env", v)); + Optional.ofNullable(args).ifPresent(v -> result.put("args", v)); + Optional.ofNullable(env).ifPresent(v -> result.put("env", v)); return Collections.unmodifiableMap(result); } } diff --git a/src/main/java/io/appium/java_client/ios/options/wda/SupportsWaitForIdleTimeoutOption.java b/src/main/java/io/appium/java_client/ios/options/wda/SupportsWaitForIdleTimeoutOption.java index 0d9ffda35..f9dd2401a 100644 --- a/src/main/java/io/appium/java_client/ios/options/wda/SupportsWaitForIdleTimeoutOption.java +++ b/src/main/java/io/appium/java_client/ios/options/wda/SupportsWaitForIdleTimeoutOption.java @@ -53,6 +53,6 @@ default T setWaitForIdleTimeout(Duration timeout) { default Optional getWaitForIdleTimeout() { return Optional.ofNullable(getCapability(WAIT_FOR_IDLE_TIMEOUT_OPTION)) .map(CapabilityHelpers::toDouble) - .map((d) -> toDuration((long) (d * 1000.0))); + .map(d -> toDuration((long) (d * 1000.0))); } } diff --git a/src/main/java/io/appium/java_client/ios/options/wda/SupportsWdaEventloopIdleDelayOption.java b/src/main/java/io/appium/java_client/ios/options/wda/SupportsWdaEventloopIdleDelayOption.java index 4d35bb5c4..3d48703b5 100644 --- a/src/main/java/io/appium/java_client/ios/options/wda/SupportsWdaEventloopIdleDelayOption.java +++ b/src/main/java/io/appium/java_client/ios/options/wda/SupportsWdaEventloopIdleDelayOption.java @@ -54,6 +54,6 @@ default T setWdaEventloopIdleDelay(Duration duration) { default Optional getWdaEventloopIdleDelay() { return Optional.ofNullable(getCapability(WDA_EVENTLOOP_IDLE_DELAY_OPTION)) .map(CapabilityHelpers::toDouble) - .map((d) -> toDuration((long) (d * 1000.0))); + .map(d -> toDuration((long) (d * 1000.0))); } } diff --git a/src/main/java/io/appium/java_client/ios/options/wda/SupportsXcodeCertificateOptions.java b/src/main/java/io/appium/java_client/ios/options/wda/SupportsXcodeCertificateOptions.java index fcecbab8c..45d437195 100644 --- a/src/main/java/io/appium/java_client/ios/options/wda/SupportsXcodeCertificateOptions.java +++ b/src/main/java/io/appium/java_client/ios/options/wda/SupportsXcodeCertificateOptions.java @@ -51,6 +51,6 @@ default Optional getXcodeCertificate() { String orgId = (String) getCapability(XCODE_ORG_ID_OPTION); String signingId = (String) getCapability(XCODE_SIGNING_ID_OPTION); return Optional.ofNullable(orgId) - .map((x) -> new XcodeCertificate(orgId, signingId)); + .map(x -> new XcodeCertificate(orgId, signingId)); } } diff --git a/src/main/java/io/appium/java_client/mac/options/Mac2Options.java b/src/main/java/io/appium/java_client/mac/options/Mac2Options.java index 37e31575a..5325ee284 100644 --- a/src/main/java/io/appium/java_client/mac/options/Mac2Options.java +++ b/src/main/java/io/appium/java_client/mac/options/Mac2Options.java @@ -83,7 +83,7 @@ public Mac2Options setPrerun(AppleScriptData script) { public Optional getPrerun() { //noinspection unchecked return Optional.ofNullable(getCapability(PRERUN_OPTION)) - .map((v) -> new AppleScriptData((Map) v)); + .map(v -> new AppleScriptData((Map) v)); } /** @@ -108,6 +108,6 @@ public Mac2Options setPostrun(AppleScriptData script) { public Optional getPostrun() { //noinspection unchecked return Optional.ofNullable(getCapability(POSTRUN_OPTION)) - .map((v) -> new AppleScriptData((Map) v)); + .map(v -> new AppleScriptData((Map) v)); } } diff --git a/src/main/java/io/appium/java_client/pagefactory/AppiumElementLocator.java b/src/main/java/io/appium/java_client/pagefactory/AppiumElementLocator.java index 3aba5bcdc..9e148a2c7 100644 --- a/src/main/java/io/appium/java_client/pagefactory/AppiumElementLocator.java +++ b/src/main/java/io/appium/java_client/pagefactory/AppiumElementLocator.java @@ -43,7 +43,7 @@ class AppiumElementLocator implements CacheableLocator { - private static final String exceptionMessageIfElementNotFound = "Can't locate an element by this strategy: %s"; + private static final String EXCEPTION_MESSAGE_IF_ELEMENT_NOT_FOUND = "Can't locate an element by this strategy: %s"; private final boolean shouldCache; private final By by; @@ -163,7 +163,7 @@ public WebElement findElement() { } return result; } catch (TimeoutException | StaleElementReferenceException e) { - throw new NoSuchElementException(format(exceptionMessageIfElementNotFound, bySearching.toString()), e); + throw new NoSuchElementException(format(EXCEPTION_MESSAGE_IF_ELEMENT_NOT_FOUND, bySearching.toString()), e); } } diff --git a/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java b/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java index c2f11f473..2d5daaa03 100644 --- a/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java +++ b/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java @@ -170,7 +170,7 @@ protected boolean isDecoratableList(Field field) { ? Arrays.asList(((TypeVariable) listType).getBounds()) : Collections.emptyList(); return availableElementClasses.stream() - .anyMatch((webElClass) -> webElClass.equals(listType) || bounds.contains(webElClass)); + .anyMatch(webElClass -> webElClass.equals(listType) || bounds.contains(webElClass)); } }; } diff --git a/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java b/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java index be25f1c31..4e148c385 100644 --- a/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java +++ b/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java @@ -17,6 +17,8 @@ package io.appium.java_client.pagefactory; import io.appium.java_client.pagefactory.bys.ContentType; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Constructor; @@ -28,7 +30,7 @@ import static io.appium.java_client.remote.MobilePlatform.ANDROID; import static io.appium.java_client.remote.MobilePlatform.IOS; import static io.appium.java_client.remote.MobilePlatform.WINDOWS; - +@NoArgsConstructor(access = AccessLevel.PRIVATE) class OverrideWidgetReader { private static final Class EMPTY = Widget.class; private static final String HTML = "html"; diff --git a/src/main/java/io/appium/java_client/pagefactory/ThrowableUtil.java b/src/main/java/io/appium/java_client/pagefactory/ThrowableUtil.java index c025a53dd..f5b310702 100644 --- a/src/main/java/io/appium/java_client/pagefactory/ThrowableUtil.java +++ b/src/main/java/io/appium/java_client/pagefactory/ThrowableUtil.java @@ -16,11 +16,14 @@ package io.appium.java_client.pagefactory; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import org.openqa.selenium.InvalidSelectorException; import org.openqa.selenium.StaleElementReferenceException; import java.lang.reflect.InvocationTargetException; +@NoArgsConstructor(access = AccessLevel.PRIVATE) class ThrowableUtil { private static final String INVALID_SELECTOR_PATTERN = "Invalid locator strategy:"; diff --git a/src/main/java/io/appium/java_client/pagefactory/WithTimeout.java b/src/main/java/io/appium/java_client/pagefactory/WithTimeout.java index 0b95a50c1..0727bc2b3 100644 --- a/src/main/java/io/appium/java_client/pagefactory/WithTimeout.java +++ b/src/main/java/io/appium/java_client/pagefactory/WithTimeout.java @@ -16,6 +16,9 @@ package io.appium.java_client.pagefactory; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -43,6 +46,7 @@ */ ChronoUnit chronoUnit(); + @NoArgsConstructor(access = AccessLevel.PRIVATE) class DurationBuilder { static Duration build(WithTimeout withTimeout) { return Duration.of(withTimeout.time(), withTimeout.chronoUnit()); diff --git a/src/main/java/io/appium/java_client/pagefactory/bys/ContentMappedBy.java b/src/main/java/io/appium/java_client/pagefactory/bys/ContentMappedBy.java index fe7edf9b9..481e58898 100644 --- a/src/main/java/io/appium/java_client/pagefactory/bys/ContentMappedBy.java +++ b/src/main/java/io/appium/java_client/pagefactory/bys/ContentMappedBy.java @@ -23,6 +23,7 @@ import javax.annotation.Nonnull; import java.util.List; import java.util.Map; +import java.util.Objects; import static com.google.common.base.Preconditions.checkNotNull; import static io.appium.java_client.pagefactory.bys.ContentType.NATIVE_MOBILE_SPECIFIC; @@ -57,4 +58,18 @@ public By useContent(@Nonnull ContentType type) { @Override public String toString() { return map.get(currentContent).toString(); } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + ContentMappedBy that = (ContentMappedBy) o; + return Objects.equals(map, that.map) && currentContent == that.currentContent; + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), map, currentContent); + } } diff --git a/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java b/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java index 330362140..f991388e9 100644 --- a/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java +++ b/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java @@ -41,8 +41,8 @@ /** * It is the basic handler of Appium-specific page object annotations * About the Page Object design pattern please read these documents: - * - https://code.google.com/p/selenium/wiki/PageObjects - * - https://code.google.com/p/selenium/wiki/PageFactory + * - https://code.google.com/p/selenium/wiki/PageObjects + * - https://code.google.com/p/selenium/wiki/PageFactory */ public abstract class AppiumByBuilder extends AbstractAnnotations { protected static final Class[] DEFAULT_ANNOTATION_METHOD_ARGUMENTS = new Class[]{}; @@ -76,7 +76,7 @@ private static Method[] prepareAnnotationMethods(Class ann List targetAnnotationMethodNamesList = getMethodNames(annotation.getDeclaredMethods()); targetAnnotationMethodNamesList.removeAll(METHODS_TO_BE_EXCLUDED_WHEN_ANNOTATION_IS_READ); return targetAnnotationMethodNamesList.stream() - .map((methodName) -> { + .map(methodName -> { try { return annotation.getMethod(methodName, DEFAULT_ANNOTATION_METHOD_ARGUMENTS); } catch (NoSuchMethodException | SecurityException e) { @@ -87,8 +87,8 @@ private static Method[] prepareAnnotationMethods(Class ann private static String getFilledValue(Annotation mobileBy) { return Stream.of(prepareAnnotationMethods(mobileBy.getClass())) - .filter((method) -> String.class == method.getReturnType()) - .filter((method) -> { + .filter(method -> String.class == method.getReturnType()) + .filter(method -> { try { Object strategyParameter = method.invoke(mobileBy); return strategyParameter != null && !String.valueOf(strategyParameter).isEmpty(); @@ -107,9 +107,9 @@ private static String getFilledValue(Annotation mobileBy) { private static By getMobileBy(Annotation annotation, String valueName) { return Stream.of(Strategies.values()) - .filter((strategy) -> strategy.returnValueName().equals(valueName)) + .filter(strategy -> strategy.returnValueName().equals(valueName)) .findFirst() - .map((strategy) -> strategy.getBy(annotation)) + .map(strategy -> strategy.getBy(annotation)) .orElseThrow(() -> new IllegalArgumentException( String.format("@%s: There is an unknown strategy %s", annotation.getClass().getSimpleName(), valueName) @@ -118,7 +118,7 @@ private static By getMobileBy(Annotation annotation, String valueName) { private static T getComplexMobileBy(Annotation[] annotations, Class requiredByClass) { By[] byArray = Stream.of(annotations) - .map((annotation) -> getMobileBy(annotation, getFilledValue(annotation))) + .map(annotation -> getMobileBy(annotation, getFilledValue(annotation))) .toArray(By[]::new); try { Constructor c = requiredByClass.getConstructor(By[].class); diff --git a/src/main/java/io/appium/java_client/pagefactory/bys/builder/Strategies.java b/src/main/java/io/appium/java_client/pagefactory/bys/builder/Strategies.java index a353e0257..452a8cda0 100644 --- a/src/main/java/io/appium/java_client/pagefactory/bys/builder/Strategies.java +++ b/src/main/java/io/appium/java_client/pagefactory/bys/builder/Strategies.java @@ -135,7 +135,7 @@ enum Strategies { } static List strategiesNames() { - return Stream.of(values()).map((s) -> s.valueName).collect(Collectors.toList()); + return Stream.of(values()).map(s -> s.valueName).collect(Collectors.toList()); } private static String getValue(Annotation annotation, Strategies strategy) { diff --git a/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfAListOfElements.java b/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfAListOfElements.java index 62e1442aa..dd8a0cdff 100644 --- a/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfAListOfElements.java +++ b/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfAListOfElements.java @@ -29,7 +29,7 @@ public abstract class InterceptorOfAListOfElements implements MethodCallListener { protected final ElementLocator locator; - public InterceptorOfAListOfElements(@Nullable ElementLocator locator) { + protected InterceptorOfAListOfElements(@Nullable ElementLocator locator) { this.locator = locator; } diff --git a/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfASingleElement.java b/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfASingleElement.java index 7eea82233..4be8da5ef 100644 --- a/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfASingleElement.java +++ b/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfASingleElement.java @@ -31,7 +31,7 @@ public abstract class InterceptorOfASingleElement implements MethodCallListener protected final ElementLocator locator; private final WeakReference driverReference; - public InterceptorOfASingleElement( + protected InterceptorOfASingleElement( @Nullable ElementLocator locator, WeakReference driverReference diff --git a/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java b/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java index 53ba1506c..7c689273d 100644 --- a/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java +++ b/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java @@ -18,6 +18,8 @@ import io.appium.java_client.HasBrowserCheck; import io.appium.java_client.pagefactory.bys.ContentType; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import org.openqa.selenium.ContextAware; import org.openqa.selenium.SearchContext; import org.openqa.selenium.WebDriver; @@ -30,7 +32,7 @@ import static io.appium.java_client.pagefactory.bys.ContentType.NATIVE_MOBILE_SPECIFIC; import static java.util.Optional.ofNullable; import static org.apache.commons.lang3.StringUtils.containsIgnoreCase; - +@NoArgsConstructor(access = AccessLevel.PRIVATE) public final class WebDriverUnpackUtility { private static final String NATIVE_APP_PATTERN = "NATIVE_APP"; diff --git a/src/main/java/io/appium/java_client/proxy/Interceptor.java b/src/main/java/io/appium/java_client/proxy/Interceptor.java index dce2fd807..aca474044 100644 --- a/src/main/java/io/appium/java_client/proxy/Interceptor.java +++ b/src/main/java/io/appium/java_client/proxy/Interceptor.java @@ -16,6 +16,8 @@ package io.appium.java_client.proxy; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import net.bytebuddy.implementation.bind.annotation.AllArguments; import net.bytebuddy.implementation.bind.annotation.Origin; import net.bytebuddy.implementation.bind.annotation.RuntimeType; @@ -29,6 +31,7 @@ import java.util.UUID; import java.util.concurrent.Callable; +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class Interceptor { private static final Logger logger = LoggerFactory.getLogger(Interceptor.class); 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 0085f457d..ee0e5a396 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -180,7 +180,7 @@ private Response createSession(Command command) throws IOException { } ProtocolHandshake.Result result = new AppiumProtocolHandshake().createSession( - getClient().with((httpHandler) -> (req) -> { + getClient().with(httpHandler -> req -> { req.setHeader(HttpHeaders.USER_AGENT, AppiumUserAgentFilter.buildUserAgent(req.getHeader(HttpHeaders.USER_AGENT))); req.setHeader(IDEMPOTENCY_KEY_HEADER, UUID.randomUUID().toString().toLowerCase()); diff --git a/src/main/java/io/appium/java_client/remote/options/SupportsOrientationOption.java b/src/main/java/io/appium/java_client/remote/options/SupportsOrientationOption.java index 3bc8b16e0..be2dd1a5d 100644 --- a/src/main/java/io/appium/java_client/remote/options/SupportsOrientationOption.java +++ b/src/main/java/io/appium/java_client/remote/options/SupportsOrientationOption.java @@ -42,7 +42,7 @@ default T setOrientation(ScreenOrientation orientation) { */ default Optional getOrientation() { return Optional.ofNullable(getCapability(ORIENTATION_OPTION)) - .map((v) -> v instanceof ScreenOrientation + .map(v -> v instanceof ScreenOrientation ? (ScreenOrientation) v : ScreenOrientation.valueOf((String.valueOf(v)).toUpperCase()) ); diff --git a/src/main/java/io/appium/java_client/remote/options/SupportsProxyOption.java b/src/main/java/io/appium/java_client/remote/options/SupportsProxyOption.java index cb3de55e7..d69be4d2b 100644 --- a/src/main/java/io/appium/java_client/remote/options/SupportsProxyOption.java +++ b/src/main/java/io/appium/java_client/remote/options/SupportsProxyOption.java @@ -45,7 +45,7 @@ default T setProxy(Proxy proxy) { default Optional getProxy() { return Optional.ofNullable(getCapability(PROXY_OPTION)) .map(String::valueOf) - .map((v) -> new Gson().fromJson(v, Map.class)) + .map(v -> new Gson().fromJson(v, Map.class)) .map(Proxy::new); } } diff --git a/src/main/java/io/appium/java_client/remote/options/SystemScript.java b/src/main/java/io/appium/java_client/remote/options/SystemScript.java index 901d8e220..aa23e0ecf 100644 --- a/src/main/java/io/appium/java_client/remote/options/SystemScript.java +++ b/src/main/java/io/appium/java_client/remote/options/SystemScript.java @@ -20,10 +20,10 @@ import java.util.Optional; public abstract class SystemScript> extends BaseMapOptionData { - public SystemScript() { + protected SystemScript() { } - public SystemScript(Map options) { + protected SystemScript(Map options) { super(options); } diff --git a/src/main/java/io/appium/java_client/remote/options/UnhandledPromptBehavior.java b/src/main/java/io/appium/java_client/remote/options/UnhandledPromptBehavior.java index 0068dfe42..3aa5f4add 100644 --- a/src/main/java/io/appium/java_client/remote/options/UnhandledPromptBehavior.java +++ b/src/main/java/io/appium/java_client/remote/options/UnhandledPromptBehavior.java @@ -38,7 +38,7 @@ public String toString() { */ public static UnhandledPromptBehavior fromString(String value) { return Arrays.stream(values()) - .filter((v) -> v.toString().equals(value)) + .filter(v -> v.toString().equals(value)) .findFirst() .orElseThrow(() -> new IllegalArgumentException( String.format("Unhandled prompt behavior '%s' is not supported. " 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 08f289289..f37b89e29 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 @@ -145,15 +145,15 @@ public boolean isRunning() { } private void ping(Duration timeout) throws UrlChecker.TimeoutException, MalformedURLException { - URL url = getUrl(); - String host = url.getHost(); + URL baseURL = getUrl(); + String host = baseURL.getHost(); // The operating system will block direct access to the universal broadcast IP address if (host.equals(BROADCAST_IP4_ADDRESS)) { - url = replaceHost(url, BROADCAST_IP4_ADDRESS, "127.0.0.1"); + baseURL = replaceHost(baseURL, BROADCAST_IP4_ADDRESS, "127.0.0.1"); } else if (host.equals(BROADCAST_IP6_ADDRESS)) { - url = replaceHost(url, BROADCAST_IP6_ADDRESS, "::1"); + baseURL = replaceHost(baseURL, BROADCAST_IP6_ADDRESS, "::1"); } - URL status = addSuffix(url, "/status"); + URL status = addSuffix(baseURL, "/status"); new UrlChecker().waitUntilAvailable(timeout.toMillis(), TimeUnit.MILLISECONDS, status); } @@ -163,6 +163,7 @@ private void ping(Duration timeout) throws UrlChecker.TimeoutException, Malforme * @throws AppiumServerHasNotBeenStartedLocallyException If an error occurs while spawning the child process. * @see #stop() */ + @Override public void start() throws AppiumServerHasNotBeenStartedLocallyException { lock.lock(); try { @@ -182,7 +183,7 @@ public void start() throws AppiumServerHasNotBeenStartedLocallyException { } catch (Exception e) { final Optional output = Optional.ofNullable(process) .map(CommandLine::getStdOut) - .filter((o) -> !StringUtils.isBlank(o)); + .filter(o -> !StringUtils.isBlank(o)); destroyProcess(); List errorLines = new ArrayList<>(); errorLines.add("The local appium server has not been started"); @@ -197,7 +198,7 @@ public void start() throws AppiumServerHasNotBeenStartedLocallyException { String.format("Node.js executable path: %s", nodeJSExec.getAbsolutePath()) ); errorLines.add(String.format("Arguments: %s", nodeJSArgs)); - output.ifPresent((o) -> errorLines.add(String.format("Output: %s", o))); + output.ifPresent(o -> errorLines.add(String.format("Output: %s", o))); throw new AppiumServerHasNotBeenStartedLocallyException( StringUtils.joinWith("\n", errorLines), e ); @@ -302,8 +303,8 @@ public void addOutPutStream(OutputStream outputStream) { */ public void addOutPutStreams(List outputStreams) { checkNotNull(outputStreams, "outputStreams parameter is NULL!"); - for (OutputStream stream : outputStreams) { - addOutPutStream(stream); + for (OutputStream outputStream : outputStreams) { + addOutPutStream(outputStream); } } 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 0e354d441..774399a9c 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 @@ -81,9 +81,9 @@ public final class AppiumServiceBuilder private String ipAddress = BROADCAST_IP4_ADDRESS; private Capabilities capabilities; private boolean autoQuoteCapabilitiesOnWindows = false; - private static final Function APPIUM_JS_NOT_EXIST_ERROR = (fullPath) -> String.format( + private static final Function APPIUM_JS_NOT_EXIST_ERROR = fullPath -> String.format( "The main Appium script does not exist at '%s'", fullPath.getAbsolutePath()); - private static final Function NODE_JS_NOT_EXIST_ERROR = (fullPath) -> + private static final Function NODE_JS_NOT_EXIST_ERROR = fullPath -> String.format("The main NodeJS executable does not exist at '%s'", fullPath.getAbsolutePath()); private static final List PATH_CAPABILITIES = ImmutableList.of(AndroidMobileCapabilityType.KEYSTORE_PATH, diff --git a/src/main/java/io/appium/java_client/service/local/ListOutputStream.java b/src/main/java/io/appium/java_client/service/local/ListOutputStream.java index 89820f70a..7173963ad 100644 --- a/src/main/java/io/appium/java_client/service/local/ListOutputStream.java +++ b/src/main/java/io/appium/java_client/service/local/ListOutputStream.java @@ -53,12 +53,14 @@ Optional remove(OutputStream stream) { } } + @Override public void flush() throws IOException { for (OutputStream stream : streams) { stream.flush(); } } + @Override public void close() throws IOException { for (OutputStream stream : streams) { stream.close(); diff --git a/src/main/java/io/appium/java_client/windows/options/WindowsOptions.java b/src/main/java/io/appium/java_client/windows/options/WindowsOptions.java index 8a1f0eb8f..fd4d125b0 100644 --- a/src/main/java/io/appium/java_client/windows/options/WindowsOptions.java +++ b/src/main/java/io/appium/java_client/windows/options/WindowsOptions.java @@ -28,7 +28,7 @@ import java.util.Optional; /** - * https://github.com/appium/appium-windows-driver#usage + * https://github.com/appium/appium-windows-driver#usage */ public class WindowsOptions extends BaseOptions implements SupportsAppOption, @@ -65,7 +65,7 @@ private void setCommonOptions() { * each key must be a valid PowerShell script or command to be * executed prior to the WinAppDriver session startup. * See - * https://github.com/appium/appium-windows-driver#power-shell-commands-execution + * https://github.com/appium/appium-windows-driver#power-shell-commands-execution * for more details. * * @param script E.g. {script: 'Get-Process outlook -ErrorAction SilentlyContinue'}. @@ -83,7 +83,7 @@ public WindowsOptions setPrerun(PowerShellData script) { public Optional getPrerun() { //noinspection unchecked return Optional.ofNullable(getCapability(PRERUN_OPTION)) - .map((v) -> new PowerShellData((Map) v)); + .map(v -> new PowerShellData((Map) v)); } /** @@ -91,7 +91,7 @@ public Optional getPrerun() { * each key must be a valid PowerShell script or command to be * executed after an WinAppDriver session is finished. * See - * https://github.com/appium/appium-windows-driver#power-shell-commands-execution + * https://github.com/appium/appium-windows-driver#power-shell-commands-execution * for more details. * * @param script E.g. {script: 'Get-Process outlook -ErrorAction SilentlyContinue'}. @@ -109,6 +109,6 @@ public WindowsOptions setPostrun(PowerShellData script) { public Optional getPostrun() { //noinspection unchecked return Optional.ofNullable(getCapability(POSTRUN_OPTION)) - .map((v) -> new PowerShellData((Map) v)); + .map(v -> new PowerShellData((Map) v)); } } From 454a74c0fe8d0ce58c7ec4d26c53b8a9f0edb962 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 18 Sep 2023 05:32:22 +0530 Subject: [PATCH 02/13] Changed protected constructor to public constructor --- .../io/appium/java_client/imagecomparison/ComparisonResult.java | 2 +- .../pagefactory/interceptors/InterceptorOfAListOfElements.java | 2 +- .../java/io/appium/java_client/remote/options/SystemScript.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/appium/java_client/imagecomparison/ComparisonResult.java b/src/main/java/io/appium/java_client/imagecomparison/ComparisonResult.java index ba9c07093..49e487b59 100644 --- a/src/main/java/io/appium/java_client/imagecomparison/ComparisonResult.java +++ b/src/main/java/io/appium/java_client/imagecomparison/ComparisonResult.java @@ -34,7 +34,7 @@ public abstract class ComparisonResult { @Getter(AccessLevel.PROTECTED) private final Map commandResult; - protected ComparisonResult(Map commandResult) { + public ComparisonResult(Map commandResult) { this.commandResult = commandResult; } diff --git a/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfAListOfElements.java b/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfAListOfElements.java index dd8a0cdff..62e1442aa 100644 --- a/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfAListOfElements.java +++ b/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfAListOfElements.java @@ -29,7 +29,7 @@ public abstract class InterceptorOfAListOfElements implements MethodCallListener { protected final ElementLocator locator; - protected InterceptorOfAListOfElements(@Nullable ElementLocator locator) { + public InterceptorOfAListOfElements(@Nullable ElementLocator locator) { this.locator = locator; } diff --git a/src/main/java/io/appium/java_client/remote/options/SystemScript.java b/src/main/java/io/appium/java_client/remote/options/SystemScript.java index aa23e0ecf..eb41e4783 100644 --- a/src/main/java/io/appium/java_client/remote/options/SystemScript.java +++ b/src/main/java/io/appium/java_client/remote/options/SystemScript.java @@ -23,7 +23,7 @@ public abstract class SystemScript> extends BaseMapOpt protected SystemScript() { } - protected SystemScript(Map options) { + public SystemScript(Map options) { super(options); } From d71cc8359d03aa83182f3595b1474ac31d98bc53 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 18 Sep 2023 16:55:01 +0530 Subject: [PATCH 03/13] Changed protected constructor to public constructor --- .../java/io/appium/java_client/remote/options/SystemScript.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/remote/options/SystemScript.java b/src/main/java/io/appium/java_client/remote/options/SystemScript.java index eb41e4783..901d8e220 100644 --- a/src/main/java/io/appium/java_client/remote/options/SystemScript.java +++ b/src/main/java/io/appium/java_client/remote/options/SystemScript.java @@ -20,7 +20,7 @@ import java.util.Optional; public abstract class SystemScript> extends BaseMapOptionData { - protected SystemScript() { + public SystemScript() { } public SystemScript(Map options) { From e6e0bb61244c7001122e20d72e3529e86a3a213f Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 18 Sep 2023 17:03:25 +0530 Subject: [PATCH 04/13] Changed protected constructor to public constructor --- .../pagefactory/interceptors/InterceptorOfASingleElement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfASingleElement.java b/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfASingleElement.java index 4be8da5ef..7eea82233 100644 --- a/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfASingleElement.java +++ b/src/main/java/io/appium/java_client/pagefactory/interceptors/InterceptorOfASingleElement.java @@ -31,7 +31,7 @@ public abstract class InterceptorOfASingleElement implements MethodCallListener protected final ElementLocator locator; private final WeakReference driverReference; - protected InterceptorOfASingleElement( + public InterceptorOfASingleElement( @Nullable ElementLocator locator, WeakReference driverReference From b9e182deef1f7a51f9f67dd9942b0a1a99eda900 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 18 Sep 2023 17:28:50 +0530 Subject: [PATCH 05/13] Github workflow fixes --- .../java/io/appium/java_client/AppiumBy.java | 59 ++++++++++++------- .../io/appium/java_client/LocksDevice.java | 3 +- .../internal/CapabilityHelpers.java | 1 + .../internal/ReflectionHelpers.java | 11 ++-- .../pagefactory/OverrideWidgetReader.java | 33 ++++++----- .../pagefactory/bys/ContentMappedBy.java | 50 +++++++++------- .../bys/builder/AppiumByBuilder.java | 6 +- .../utils/WebDriverUnpackUtility.java | 25 ++++---- 8 files changed, 111 insertions(+), 77 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumBy.java b/src/main/java/io/appium/java_client/AppiumBy.java index acfdc5fa7..4392542e1 100644 --- a/src/main/java/io/appium/java_client/AppiumBy.java +++ b/src/main/java/io/appium/java_client/AppiumBy.java @@ -16,9 +16,7 @@ package io.appium.java_client; -import lombok.AccessLevel; import lombok.Getter; -import lombok.NoArgsConstructor; import org.apache.commons.lang3.Validate; import org.openqa.selenium.By; import org.openqa.selenium.By.Remotable; @@ -31,7 +29,8 @@ public abstract class AppiumBy extends By implements Remotable { - @Getter private final Parameters remoteParameters; + @Getter + private final Parameters remoteParameters; private final String locatorName; protected AppiumBy(String selector, String locatorString, String locatorName) { @@ -40,15 +39,18 @@ protected AppiumBy(String selector, String locatorString, String locatorName) { this.locatorName = locatorName; } - @Override public List findElements(SearchContext context) { + @Override + public List findElements(SearchContext context) { return context.findElements(this); } - @Override public WebElement findElement(SearchContext context) { + @Override + public WebElement findElement(SearchContext context) { return context.findElement(this); } - @Override public String toString() { + @Override + public String toString() { return String.format("%s.%s: %s", AppiumBy.class.getSimpleName(), locatorName, remoteParameters.value()); } @@ -58,6 +60,7 @@ protected AppiumBy(String selector, String locatorString, String locatorName) { * About iOS accessibility * https://developer.apple.com/library/ios/documentation/UIKit/Reference/ * UIAccessibilityIdentification_Protocol/index.html + * * @param accessibilityId id is a convenient UI automation accessibility Id. * @return an instance of {@link AppiumBy.ByAndroidUIAutomator} */ @@ -67,9 +70,10 @@ public static By accessibilityId(final String accessibilityId) { /** * This locator strategy is only available in Espresso Driver mode. + * * @param dataMatcherString is a valid json string detailing hamcrest matcher for Espresso onData(). - * See - * the documentation for more details + * See + * the documentation for more details. * @return an instance of {@link AppiumBy.ByAndroidDataMatcher} */ public static By androidDataMatcher(final String dataMatcherString) { @@ -78,6 +82,7 @@ public static By androidDataMatcher(final String dataMatcherString) { /** * Refer to https://developer.android.com/training/testing/ui-automator + * * @param uiautomatorText is Android UIAutomator string * @return an instance of {@link AppiumBy.ByAndroidUIAutomator} */ @@ -87,9 +92,10 @@ public static By androidUIAutomator(final String uiautomatorText) { /** * This locator strategy is only available in Espresso Driver mode. + * * @param viewMatcherString is a valid json string detailing hamcrest matcher for Espresso onView(). - * See - * the documentation for more details + * See + * the documentation for more details * @return an instance of {@link AppiumBy.ByAndroidViewMatcher} */ public static By androidViewMatcher(final String viewMatcherString) { @@ -98,9 +104,10 @@ public static By androidViewMatcher(final String viewMatcherString) { /** * This locator strategy is available in Espresso Driver mode. - * @since Appium 1.8.2 beta + * * @param tag is a view tag string * @return an instance of {@link ByAndroidViewTag} + * @since Appium 1.8.2 beta */ public static By androidViewTag(final String tag) { return new ByAndroidViewTag(tag); @@ -109,6 +116,7 @@ public static By androidViewTag(final String tag) { /** * For IOS it is the full name of the XCUI element and begins with XCUIElementType. * For Android it is the full name of the UIAutomator2 class (e.g.: android.widget.TextView) + * * @param selector the class name of the element * @return an instance of {@link ByClassName} */ @@ -119,6 +127,7 @@ public static By className(final String selector) { /** * For IOS the element name. * For Android it is the resource identifier. + * * @param selector element id * @return an instance of {@link ById} */ @@ -129,6 +138,7 @@ public static By id(final String selector) { /** * For IOS the element name. * For Android it is the resource identifier. + * * @param selector element id * @return an instance of {@link ByName} */ @@ -152,14 +162,14 @@ public static By custom(final String selector) { * This locator strategy is available only if OpenCV libraries and * Node.js bindings are installed on the server machine. * + * @param b64Template base64-encoded template image string. Supported image formats are the same + * as for OpenCV library. + * @return an instance of {@link ByImage} * @see * The documentation on Image Comparison Features * @see * The settings available for lookup fine-tuning * @since Appium 1.8.2 - * @param b64Template base64-encoded template image string. Supported image formats are the same - * as for OpenCV library. - * @return an instance of {@link ByImage} */ public static By image(final String b64Template) { return new ByImage(b64Template); @@ -167,9 +177,10 @@ public static By image(final String b64Template) { /** * This locator strategy is available in XCUITest Driver mode. + * * @param iOSClassChainString is a valid class chain locator string. - * See - * the documentation for more details + *See + * the documentation for more details * @return an instance of {@link AppiumBy.ByIosClassChain} */ public static By iOSClassChain(final String iOSClassChainString) { @@ -178,6 +189,7 @@ public static By iOSClassChain(final String iOSClassChainString) { /** * This locator strategy is available in XCUITest Driver mode. + * * @param iOSNsPredicateString is an iOS NsPredicate String * @return an instance of {@link AppiumBy.ByIosNsPredicate} */ @@ -247,7 +259,8 @@ protected ByImage(String b64Template) { public static class ByIosClassChain extends AppiumBy implements Serializable { protected ByIosClassChain(String locatorString) { - super("-ios class chain", locatorString, "iOSClassChain"); + super("-ios class chain", locatorString, + "iOSClassChain"); } } @@ -259,9 +272,15 @@ protected ByIosNsPredicate(String locatorString) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - if (!super.equals(o)) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } AppiumBy appiumBy = (AppiumBy) o; return Objects.equals(remoteParameters, appiumBy.remoteParameters) && Objects.equals(locatorName, appiumBy.locatorName); } diff --git a/src/main/java/io/appium/java_client/LocksDevice.java b/src/main/java/io/appium/java_client/LocksDevice.java index 76cc969d2..92a167586 100644 --- a/src/main/java/io/appium/java_client/LocksDevice.java +++ b/src/main/java/io/appium/java_client/LocksDevice.java @@ -64,7 +64,8 @@ default void unlockDevice() { final String extName = "mobile: unlock"; try { //noinspection ConstantConditions - if (!Boolean.parseBoolean(CommandExecutionHelper.executeScript(assertExtensionExists(extName), "mobile: isLocked"))) { + if (!Boolean.parseBoolean(CommandExecutionHelper.executeScript(assertExtensionExists(extName), + "mobile: isLocked"))) { return; } CommandExecutionHelper.executeScript(this, extName); diff --git a/src/main/java/io/appium/java_client/internal/CapabilityHelpers.java b/src/main/java/io/appium/java_client/internal/CapabilityHelpers.java index 7291eb44d..5280b8e17 100644 --- a/src/main/java/io/appium/java_client/internal/CapabilityHelpers.java +++ b/src/main/java/io/appium/java_client/internal/CapabilityHelpers.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Function; + @NoArgsConstructor(access = AccessLevel.PRIVATE) public class CapabilityHelpers { public static final String APPIUM_PREFIX = "appium:"; diff --git a/src/main/java/io/appium/java_client/internal/ReflectionHelpers.java b/src/main/java/io/appium/java_client/internal/ReflectionHelpers.java index 4f9cfa4dc..abe16a170 100644 --- a/src/main/java/io/appium/java_client/internal/ReflectionHelpers.java +++ b/src/main/java/io/appium/java_client/internal/ReflectionHelpers.java @@ -21,16 +21,17 @@ import org.openqa.selenium.WebDriverException; import java.lang.reflect.Field; + @NoArgsConstructor(access = AccessLevel.PRIVATE) public class ReflectionHelpers { /** * Sets the given value to a private instance field. * - * @param cls The target class or a superclass. - * @param target Target instance. + * @param cls The target class or a superclass. + * @param target Target instance. * @param fieldName Target field name. - * @param newValue The value to be set. + * @param newValue The value to be set. * @return The same instance for chaining. */ public static T setPrivateFieldValue(Class cls, T target, String fieldName, Object newValue) { @@ -47,8 +48,8 @@ public static T setPrivateFieldValue(Class cls, T target, String fieldNam /** * Fetches the value of a private instance field. * - * @param cls The target class or a superclass. - * @param target Target instance. + * @param cls The target class or a superclass. + * @param target Target instance. * @param fieldName Target field name. * @param fieldType Field type. * @return The retrieved field value. diff --git a/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java b/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java index 4e148c385..9f8b59c17 100644 --- a/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java +++ b/src/main/java/io/appium/java_client/pagefactory/OverrideWidgetReader.java @@ -30,6 +30,7 @@ import static io.appium.java_client.remote.MobilePlatform.ANDROID; import static io.appium.java_client.remote.MobilePlatform.IOS; import static io.appium.java_client.remote.MobilePlatform.WINDOWS; + @NoArgsConstructor(access = AccessLevel.PRIVATE) class OverrideWidgetReader { private static final Class EMPTY = Widget.class; @@ -40,15 +41,15 @@ class OverrideWidgetReader { @SuppressWarnings("unchecked") private static Class getConvenientClass(Class declaredClass, - AnnotatedElement annotatedElement, String method) { + AnnotatedElement annotatedElement, String method) { Class convenientClass; OverrideWidget overrideWidget = annotatedElement.getAnnotation(OverrideWidget.class); try { if (overrideWidget == null || (convenientClass = - (Class) OverrideWidget.class - .getDeclaredMethod(method).invoke(overrideWidget)) - .equals(EMPTY)) { + (Class) OverrideWidget.class + .getDeclaredMethod(method).invoke(overrideWidget)) + .equals(EMPTY)) { convenientClass = declaredClass; } } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { @@ -57,9 +58,9 @@ private static Class getConvenientClass(Class getConvenientClass(Class getDefaultOrHTMLWidgetClass( - Class declaredClass, AnnotatedElement annotatedElement) { + Class declaredClass, AnnotatedElement annotatedElement) { return getConvenientClass(declaredClass, annotatedElement, HTML); } static Class getMobileNativeWidgetClass(Class declaredClass, - AnnotatedElement annotatedElement, String platform) { + AnnotatedElement annotatedElement, String platform) { String transformedPlatform = String.valueOf(platform).toUpperCase().trim(); if (ANDROID.equalsIgnoreCase(transformedPlatform)) { @@ -91,26 +92,26 @@ static Class getMobileNativeWidgetClass(Class getConstructorOfADefaultOrHTMLWidget( - Class declaredClass, AnnotatedElement annotatedElement) { + Class declaredClass, AnnotatedElement annotatedElement) { Class clazz = - getDefaultOrHTMLWidgetClass(declaredClass, annotatedElement); + getDefaultOrHTMLWidgetClass(declaredClass, annotatedElement); return findConvenientConstructor(clazz); } private static Constructor getConstructorOfAMobileNativeWidgets( - Class declaredClass, AnnotatedElement annotatedElement, String platform) { + Class declaredClass, AnnotatedElement annotatedElement, String platform) { Class clazz = - getMobileNativeWidgetClass(declaredClass, annotatedElement, platform); + getMobileNativeWidgetClass(declaredClass, annotatedElement, platform); return findConvenientConstructor(clazz); } protected static Map> read( - Class declaredClass, AnnotatedElement annotatedElement, String platform) { + Class declaredClass, AnnotatedElement annotatedElement, String platform) { Map> result = new HashMap<>(); result.put(ContentType.HTML_OR_DEFAULT, - getConstructorOfADefaultOrHTMLWidget(declaredClass, annotatedElement)); + getConstructorOfADefaultOrHTMLWidget(declaredClass, annotatedElement)); result.put(ContentType.NATIVE_MOBILE_SPECIFIC, - getConstructorOfAMobileNativeWidgets(declaredClass, annotatedElement, platform)); + getConstructorOfAMobileNativeWidgets(declaredClass, annotatedElement, platform)); return result; } } diff --git a/src/main/java/io/appium/java_client/pagefactory/bys/ContentMappedBy.java b/src/main/java/io/appium/java_client/pagefactory/bys/ContentMappedBy.java index 481e58898..30bf58456 100644 --- a/src/main/java/io/appium/java_client/pagefactory/bys/ContentMappedBy.java +++ b/src/main/java/io/appium/java_client/pagefactory/bys/ContentMappedBy.java @@ -1,18 +1,18 @@ /* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* See the NOTICE file distributed with this work for additional -* information regarding copyright ownership. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package io.appium.java_client.pagefactory.bys; @@ -38,6 +38,7 @@ public ContentMappedBy(Map map) { /** * This method sets required content type for the further searching. + * * @param type required content type {@link ContentType} * @return self-reference. */ @@ -47,23 +48,32 @@ public By useContent(@Nonnull ContentType type) { return this; } - @Override public WebElement findElement(SearchContext context) { + @Override + public WebElement findElement(SearchContext context) { return context.findElement(map.get(currentContent)); } - @Override public List findElements(SearchContext context) { + @Override + public List findElements(SearchContext context) { return context.findElements(map.get(currentContent)); } - @Override public String toString() { + @Override + public String toString() { return map.get(currentContent).toString(); } @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - if (!super.equals(o)) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } ContentMappedBy that = (ContentMappedBy) o; return Objects.equals(map, that.map) && currentContent == that.currentContent; } diff --git a/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java b/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java index f991388e9..1a5755d13 100644 --- a/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java +++ b/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java @@ -39,7 +39,7 @@ import static io.appium.java_client.remote.MobilePlatform.WINDOWS; /** - * It is the basic handler of Appium-specific page object annotations + * It is the basic handler of Appium-specific page object annotations. * About the Page Object design pattern please read these documents: * - https://code.google.com/p/selenium/wiki/PageObjects * - https://code.google.com/p/selenium/wiki/PageFactory @@ -93,7 +93,7 @@ private static String getFilledValue(Annotation mobileBy) { Object strategyParameter = method.invoke(mobileBy); return strategyParameter != null && !String.valueOf(strategyParameter).isEmpty(); } catch (IllegalAccessException | IllegalArgumentException - | InvocationTargetException e) { + | InvocationTargetException e) { throw new RuntimeException(e); } }) @@ -125,7 +125,7 @@ private static T getComplexMobileBy(Annotation[] annotations, Cla Object[] values = new Object[]{byArray}; return c.newInstance(values); } catch (InvocationTargetException | NoSuchMethodException | InstantiationException - | IllegalAccessException e) { + | IllegalAccessException e) { throw new RuntimeException(e); } } diff --git a/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java b/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java index 7c689273d..b1081ef11 100644 --- a/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java +++ b/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java @@ -32,22 +32,23 @@ import static io.appium.java_client.pagefactory.bys.ContentType.NATIVE_MOBILE_SPECIFIC; import static java.util.Optional.ofNullable; import static org.apache.commons.lang3.StringUtils.containsIgnoreCase; + @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class WebDriverUnpackUtility { private static final String NATIVE_APP_PATTERN = "NATIVE_APP"; /** * This method extract an instance of {@link WebDriver} from the given {@link SearchContext}. + * * @param searchContext is an instance of {@link SearchContext}. It may be the instance of - * {@link WebDriver} or {@link org.openqa.selenium.WebElement} or some other - * user's extension/implementation. - * Note: if you want to use your own implementation then it should implement - * {@link WrapsDriver} or {@link WrapsElement} + * {@link WebDriver} or {@link org.openqa.selenium.WebElement} or some other + * user's extension/implementation. + * Note: if you want to use your own implementation then it should implement + * {@link WrapsDriver} or {@link WrapsElement} * @return the instance of {@link WebDriver}. - * Note: if the given {@link SearchContext} is not - * {@link WebDriver} and it doesn't implement - * {@link WrapsDriver} or {@link WrapsElement} then this method returns null. - * + * Note: if the given {@link SearchContext} is not + * {@link WebDriver} and it doesn't implement + * {@link WrapsDriver} or {@link WrapsElement} then this method returns null. */ @Nullable public static WebDriver unpackWebDriverFromSearchContext(SearchContext searchContext) { @@ -77,10 +78,10 @@ public static WebDriver unpackWebDriverFromSearchContext(SearchContext searchCon * Note: if you want to use your own implementation then it should * implement {@link ContextAware} or {@link WrapsDriver} or {@link HasBrowserCheck} * @return current content type. It depends on current context. If current context is - * NATIVE_APP it will return {@link ContentType#NATIVE_MOBILE_SPECIFIC}. - * {@link ContentType#HTML_OR_DEFAULT} will be returned if the current context is WEB_VIEW. - * {@link ContentType#HTML_OR_DEFAULT} also will be returned if the given - * {@link SearchContext} instance doesn't implement {@link ContextAware} and {@link WrapsDriver} + * NATIVE_APP it will return {@link ContentType#NATIVE_MOBILE_SPECIFIC}. + * {@link ContentType#HTML_OR_DEFAULT} will be returned if the current context is WEB_VIEW. + * {@link ContentType#HTML_OR_DEFAULT} also will be returned if the given + * {@link SearchContext} instance doesn't implement {@link ContextAware} and {@link WrapsDriver} */ public static ContentType getCurrentContentType(SearchContext context) { return ofNullable(unpackWebDriverFromSearchContext(context)).map(driver -> { From b6aee49aac8a4a1cb9044e4858534571edbe03c2 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 18 Sep 2023 22:00:52 +0530 Subject: [PATCH 06/13] Github workflow fixes --- src/main/java/io/appium/java_client/AppiumBy.java | 10 +++++----- .../pagefactory/utils/WebDriverUnpackUtility.java | 14 ++++++-------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumBy.java b/src/main/java/io/appium/java_client/AppiumBy.java index 4392542e1..fdad70264 100644 --- a/src/main/java/io/appium/java_client/AppiumBy.java +++ b/src/main/java/io/appium/java_client/AppiumBy.java @@ -166,9 +166,9 @@ public static By custom(final String selector) { * as for OpenCV library. * @return an instance of {@link ByImage} * @see - * The documentation on Image Comparison Features + * The documentation on Image Comparison Features. * @see - * The settings available for lookup fine-tuning + * The settings available for lookup fine-tuning. * @since Appium 1.8.2 */ public static By image(final String b64Template) { @@ -178,9 +178,9 @@ public static By image(final String b64Template) { /** * This locator strategy is available in XCUITest Driver mode. * - * @param iOSClassChainString is a valid class chain locator string. - *See - * the documentation for more details + * @param iOSClassChainString is a valid class chain locator string + * See + * the documentation for more details. * @return an instance of {@link AppiumBy.ByIosClassChain} */ public static By iOSClassChain(final String iOSClassChainString) { diff --git a/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java b/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java index b1081ef11..967c568a9 100644 --- a/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java +++ b/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java @@ -46,9 +46,8 @@ public final class WebDriverUnpackUtility { * Note: if you want to use your own implementation then it should implement * {@link WrapsDriver} or {@link WrapsElement} * @return the instance of {@link WebDriver}. - * Note: if the given {@link SearchContext} is not - * {@link WebDriver} and it doesn't implement - * {@link WrapsDriver} or {@link WrapsElement} then this method returns null. + * Note: if the given {@link SearchContext} is not {@link WebDriver} and it doesn't implement {@link WrapsDriver} + * or {@link WrapsElement} then this method returns null. */ @Nullable public static WebDriver unpackWebDriverFromSearchContext(SearchContext searchContext) { @@ -72,11 +71,10 @@ public static WebDriver unpackWebDriverFromSearchContext(SearchContext searchCon /** * Detects content type by the provided search {@code context}. * - * @param context is an instance of {@link SearchContext}. It may be the instance of - * {@link WebDriver} or {@link org.openqa.selenium.WebElement} or some other - * user's extension/implementation. - * Note: if you want to use your own implementation then it should - * implement {@link ContextAware} or {@link WrapsDriver} or {@link HasBrowserCheck} + * @param context is an instance of {@link SearchContext}. It may be the instance of {@link WebDriver} or + * {@link org.openqa.selenium.WebElement} or some other user's extension/implementation. + * Note: if you want to use your own implementation then it should implement {@link ContextAware} or + * {@link WrapsDriver} or {@link HasBrowserCheck} * @return current content type. It depends on current context. If current context is * NATIVE_APP it will return {@link ContentType#NATIVE_MOBILE_SPECIFIC}. * {@link ContentType#HTML_OR_DEFAULT} will be returned if the current context is WEB_VIEW. From a24f657e5c322e45850d5f1a6ec4d7db95b3579c Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 19 Sep 2023 09:38:03 +0530 Subject: [PATCH 07/13] Github workflow fixes --- .../java/io/appium/java_client/AppiumBy.java | 55 +++++++------------ 1 file changed, 20 insertions(+), 35 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumBy.java b/src/main/java/io/appium/java_client/AppiumBy.java index fdad70264..521b14a32 100644 --- a/src/main/java/io/appium/java_client/AppiumBy.java +++ b/src/main/java/io/appium/java_client/AppiumBy.java @@ -29,8 +29,7 @@ public abstract class AppiumBy extends By implements Remotable { - @Getter - private final Parameters remoteParameters; + @Getter private final Parameters remoteParameters; private final String locatorName; protected AppiumBy(String selector, String locatorString, String locatorName) { @@ -39,28 +38,24 @@ protected AppiumBy(String selector, String locatorString, String locatorName) { this.locatorName = locatorName; } - @Override - public List findElements(SearchContext context) { + @Override public List findElements(SearchContext context) { return context.findElements(this); } - @Override - public WebElement findElement(SearchContext context) { + @Override public WebElement findElement(SearchContext context) { return context.findElement(this); } - @Override - public String toString() { + @Override public String toString() { return String.format("%s.%s: %s", AppiumBy.class.getSimpleName(), locatorName, remoteParameters.value()); } /** * About Android accessibility - * https://developer.android.com/intl/ru/training/accessibility/accessible-app.html + * https://developer.android.com/intl/ru/training/accessibility/accessible-app.html * About iOS accessibility - * https://developer.apple.com/library/ios/documentation/UIKit/Reference/ + * https://developer.apple.com/library/ios/documentation/UIKit/Reference/ * UIAccessibilityIdentification_Protocol/index.html - * * @param accessibilityId id is a convenient UI automation accessibility Id. * @return an instance of {@link AppiumBy.ByAndroidUIAutomator} */ @@ -70,10 +65,9 @@ public static By accessibilityId(final String accessibilityId) { /** * This locator strategy is only available in Espresso Driver mode. - * * @param dataMatcherString is a valid json string detailing hamcrest matcher for Espresso onData(). - * See - * the documentation for more details. + * See + * the documentation for more details * @return an instance of {@link AppiumBy.ByAndroidDataMatcher} */ public static By androidDataMatcher(final String dataMatcherString) { @@ -81,8 +75,7 @@ public static By androidDataMatcher(final String dataMatcherString) { } /** - * Refer to https://developer.android.com/training/testing/ui-automator - * + * Refer to https://developer.android.com/training/testing/ui-automator * @param uiautomatorText is Android UIAutomator string * @return an instance of {@link AppiumBy.ByAndroidUIAutomator} */ @@ -92,10 +85,9 @@ public static By androidUIAutomator(final String uiautomatorText) { /** * This locator strategy is only available in Espresso Driver mode. - * * @param viewMatcherString is a valid json string detailing hamcrest matcher for Espresso onView(). - * See - * the documentation for more details + * See + * the documentation for more details * @return an instance of {@link AppiumBy.ByAndroidViewMatcher} */ public static By androidViewMatcher(final String viewMatcherString) { @@ -104,10 +96,9 @@ public static By androidViewMatcher(final String viewMatcherString) { /** * This locator strategy is available in Espresso Driver mode. - * + * @since Appium 1.8.2 beta * @param tag is a view tag string * @return an instance of {@link ByAndroidViewTag} - * @since Appium 1.8.2 beta */ public static By androidViewTag(final String tag) { return new ByAndroidViewTag(tag); @@ -116,7 +107,6 @@ public static By androidViewTag(final String tag) { /** * For IOS it is the full name of the XCUI element and begins with XCUIElementType. * For Android it is the full name of the UIAutomator2 class (e.g.: android.widget.TextView) - * * @param selector the class name of the element * @return an instance of {@link ByClassName} */ @@ -127,7 +117,6 @@ public static By className(final String selector) { /** * For IOS the element name. * For Android it is the resource identifier. - * * @param selector element id * @return an instance of {@link ById} */ @@ -138,7 +127,6 @@ public static By id(final String selector) { /** * For IOS the element name. * For Android it is the resource identifier. - * * @param selector element id * @return an instance of {@link ByName} */ @@ -162,14 +150,14 @@ public static By custom(final String selector) { * This locator strategy is available only if OpenCV libraries and * Node.js bindings are installed on the server machine. * - * @param b64Template base64-encoded template image string. Supported image formats are the same - * as for OpenCV library. - * @return an instance of {@link ByImage} * @see - * The documentation on Image Comparison Features. + * The documentation on Image Comparison Features * @see - * The settings available for lookup fine-tuning. + * The settings available for lookup fine-tuning * @since Appium 1.8.2 + * @param b64Template base64-encoded template image string. Supported image formats are the same + * as for OpenCV library. + * @return an instance of {@link ByImage} */ public static By image(final String b64Template) { return new ByImage(b64Template); @@ -177,10 +165,9 @@ public static By image(final String b64Template) { /** * This locator strategy is available in XCUITest Driver mode. - * - * @param iOSClassChainString is a valid class chain locator string + * @param iOSClassChainString is a valid class chain locator string. * See - * the documentation for more details. + * the documentation for more details * @return an instance of {@link AppiumBy.ByIosClassChain} */ public static By iOSClassChain(final String iOSClassChainString) { @@ -189,7 +176,6 @@ public static By iOSClassChain(final String iOSClassChainString) { /** * This locator strategy is available in XCUITest Driver mode. - * * @param iOSNsPredicateString is an iOS NsPredicate String * @return an instance of {@link AppiumBy.ByIosNsPredicate} */ @@ -259,8 +245,7 @@ protected ByImage(String b64Template) { public static class ByIosClassChain extends AppiumBy implements Serializable { protected ByIosClassChain(String locatorString) { - super("-ios class chain", locatorString, - "iOSClassChain"); + super("-ios class chain", locatorString, "iOSClassChain"); } } From 8a9f755c26955c05da3c1c954aadd67b47e64377 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 19 Sep 2023 09:41:42 +0530 Subject: [PATCH 08/13] Github workflow fixes --- .../utils/WebDriverUnpackUtility.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java b/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java index 967c568a9..9df129930 100644 --- a/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java +++ b/src/main/java/io/appium/java_client/pagefactory/utils/WebDriverUnpackUtility.java @@ -39,15 +39,16 @@ public final class WebDriverUnpackUtility { /** * This method extract an instance of {@link WebDriver} from the given {@link SearchContext}. - * * @param searchContext is an instance of {@link SearchContext}. It may be the instance of - * {@link WebDriver} or {@link org.openqa.selenium.WebElement} or some other - * user's extension/implementation. - * Note: if you want to use your own implementation then it should implement - * {@link WrapsDriver} or {@link WrapsElement} + * {@link WebDriver} or {@link org.openqa.selenium.WebElement} or some other + * user's extension/implementation. + * Note: if you want to use your own implementation then it should implement + * {@link WrapsDriver} or {@link WrapsElement} * @return the instance of {@link WebDriver}. - * Note: if the given {@link SearchContext} is not {@link WebDriver} and it doesn't implement {@link WrapsDriver} - * or {@link WrapsElement} then this method returns null. + * Note: if the given {@link SearchContext} is not + * {@link WebDriver} and it doesn't implement + * {@link WrapsDriver} or {@link WrapsElement} then this method returns null. + * */ @Nullable public static WebDriver unpackWebDriverFromSearchContext(SearchContext searchContext) { @@ -71,15 +72,16 @@ public static WebDriver unpackWebDriverFromSearchContext(SearchContext searchCon /** * Detects content type by the provided search {@code context}. * - * @param context is an instance of {@link SearchContext}. It may be the instance of {@link WebDriver} or - * {@link org.openqa.selenium.WebElement} or some other user's extension/implementation. - * Note: if you want to use your own implementation then it should implement {@link ContextAware} or - * {@link WrapsDriver} or {@link HasBrowserCheck} + * @param context is an instance of {@link SearchContext}. It may be the instance of + * {@link WebDriver} or {@link org.openqa.selenium.WebElement} or some other + * user's extension/implementation. + * Note: if you want to use your own implementation then it should + * implement {@link ContextAware} or {@link WrapsDriver} or {@link HasBrowserCheck} * @return current content type. It depends on current context. If current context is - * NATIVE_APP it will return {@link ContentType#NATIVE_MOBILE_SPECIFIC}. - * {@link ContentType#HTML_OR_DEFAULT} will be returned if the current context is WEB_VIEW. - * {@link ContentType#HTML_OR_DEFAULT} also will be returned if the given - * {@link SearchContext} instance doesn't implement {@link ContextAware} and {@link WrapsDriver} + * NATIVE_APP it will return {@link ContentType#NATIVE_MOBILE_SPECIFIC}. + * {@link ContentType#HTML_OR_DEFAULT} will be returned if the current context is WEB_VIEW. + * {@link ContentType#HTML_OR_DEFAULT} also will be returned if the given + * {@link SearchContext} instance doesn't implement {@link ContextAware} and {@link WrapsDriver} */ public static ContentType getCurrentContentType(SearchContext context) { return ofNullable(unpackWebDriverFromSearchContext(context)).map(driver -> { From f83fa5ee0c5aa1a1e75fe2b1500e19ce39f6e4dd Mon Sep 17 00:00:00 2001 From: ashwithpoojary98 <61794427+ashwithpoojary98@users.noreply.github.com> Date: Wed, 20 Sep 2023 19:26:48 +0530 Subject: [PATCH 09/13] Update src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java Co-authored-by: Valery Yatsynovich --- .../java_client/pagefactory/bys/builder/AppiumByBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java b/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java index 1a5755d13..834485ffe 100644 --- a/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java +++ b/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java @@ -42,7 +42,7 @@ * It is the basic handler of Appium-specific page object annotations. * About the Page Object design pattern please read these documents: * - https://code.google.com/p/selenium/wiki/PageObjects - * - https://code.google.com/p/selenium/wiki/PageFactory + * - Selenium Page Factory */ public abstract class AppiumByBuilder extends AbstractAnnotations { protected static final Class[] DEFAULT_ANNOTATION_METHOD_ARGUMENTS = new Class[]{}; From e578c0ddbdff2145ea4fc2f685ef4c05ccfa9911 Mon Sep 17 00:00:00 2001 From: ashwithpoojary98 <61794427+ashwithpoojary98@users.noreply.github.com> Date: Wed, 20 Sep 2023 19:27:19 +0530 Subject: [PATCH 10/13] Update src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java Co-authored-by: Valery Yatsynovich --- .../java_client/pagefactory/bys/builder/AppiumByBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java b/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java index 834485ffe..0e7146a0c 100644 --- a/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java +++ b/src/main/java/io/appium/java_client/pagefactory/bys/builder/AppiumByBuilder.java @@ -41,7 +41,7 @@ /** * It is the basic handler of Appium-specific page object annotations. * About the Page Object design pattern please read these documents: - * - https://code.google.com/p/selenium/wiki/PageObjects + * - Selenium Page Object models * - Selenium Page Factory */ public abstract class AppiumByBuilder extends AbstractAnnotations { From 50c35bf9f0e53480b4bf99688b0631208df3d5b5 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 20 Sep 2023 19:52:47 +0530 Subject: [PATCH 11/13] Github workflow fixes --- src/main/java/io/appium/java_client/AppiumBy.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/AppiumBy.java b/src/main/java/io/appium/java_client/AppiumBy.java index 521b14a32..a6c512a35 100644 --- a/src/main/java/io/appium/java_client/AppiumBy.java +++ b/src/main/java/io/appium/java_client/AppiumBy.java @@ -267,7 +267,8 @@ public boolean equals(Object o) { return false; } AppiumBy appiumBy = (AppiumBy) o; - return Objects.equals(remoteParameters, appiumBy.remoteParameters) && Objects.equals(locatorName, appiumBy.locatorName); + return Objects.equals(remoteParameters, appiumBy.remoteParameters) && + Objects.equals(locatorName, appiumBy.locatorName); } @Override From 32fc2e9d466baf38e31644a78e563fe529c07dff Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 20 Sep 2023 21:07:46 +0530 Subject: [PATCH 12/13] Github workflow fixes --- src/main/java/io/appium/java_client/AppiumBy.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumBy.java b/src/main/java/io/appium/java_client/AppiumBy.java index a6c512a35..7e067287d 100644 --- a/src/main/java/io/appium/java_client/AppiumBy.java +++ b/src/main/java/io/appium/java_client/AppiumBy.java @@ -267,8 +267,8 @@ public boolean equals(Object o) { return false; } AppiumBy appiumBy = (AppiumBy) o; - return Objects.equals(remoteParameters, appiumBy.remoteParameters) && - Objects.equals(locatorName, appiumBy.locatorName); + return Objects.equals(remoteParameters, appiumBy.remoteParameters) + && Objects.equals(locatorName, appiumBy.locatorName); } @Override From ab425541fbb021a86736ba137933e2bbed8ad336 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 21 Sep 2023 05:07:17 +0530 Subject: [PATCH 13/13] Github workflow fixes --- src/main/java/io/appium/java_client/LocksDevice.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/io/appium/java_client/LocksDevice.java b/src/main/java/io/appium/java_client/LocksDevice.java index 92a167586..60ba88ffc 100644 --- a/src/main/java/io/appium/java_client/LocksDevice.java +++ b/src/main/java/io/appium/java_client/LocksDevice.java @@ -64,8 +64,7 @@ default void unlockDevice() { final String extName = "mobile: unlock"; try { //noinspection ConstantConditions - if (!Boolean.parseBoolean(CommandExecutionHelper.executeScript(assertExtensionExists(extName), - "mobile: isLocked"))) { + if (!(Boolean) CommandExecutionHelper.executeScript(assertExtensionExists(extName), "mobile: isLocked")) { return; } CommandExecutionHelper.executeScript(this, extName);