Appium.java
package io.github.giulong.spectrum.drivers;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.service.local.AppiumDriverLocalService;
import io.appium.java_client.service.local.AppiumServiceBuilder;
import io.github.giulong.spectrum.interfaces.BiDiDriver;
import io.github.giulong.spectrum.utils.Configuration;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.MutableCapabilities;
import org.openqa.selenium.remote.service.DriverService;
import java.net.URL;
import java.nio.file.Path;
import java.util.Map;
@Slf4j
public abstract class Appium<T extends MutableCapabilities, U extends AppiumDriver> extends Driver<T, AppiumDriverLocalService, AppiumServiceBuilder> implements BiDiDriver<T> {
public static final String APP_CAPABILITY = "app";
public abstract U buildDriverFor(URL url);
@Override
public DriverService.Builder<AppiumDriverLocalService, AppiumServiceBuilder> getDriverServiceBuilder() {
final Configuration.Environments.Appium.Service service = configuration.getEnvironments().getAppium().getService();
return new AppiumServiceBuilder()
.withIPAddress(service.getIpAddress())
.usingPort(service.getPort())
.withTimeout(service.getTimeout());
}
Map<String, Object> adjustCapabilitiesFrom(final Map<String, Object> configurationCapabilities) {
final String app = (String) configurationCapabilities.get(APP_CAPABILITY);
if (app != null) {
log.debug("Adjusting capabilities for {}", getClass().getSimpleName());
final Path appPath = Path.of(app);
if (!appPath.isAbsolute()) {
final String absoluteAppPath = appPath.toAbsolutePath().toString();
log.warn("Converting app path '{}' to absolute: '{}'", appPath, absoluteAppPath);
configurationCapabilities.put(APP_CAPABILITY, absoluteAppPath);
}
}
return configurationCapabilities;
}
}