
io.github.martinschneider.justtestlah.configuration.PCloudyWebDriverBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of justtestlah-pcloudy Show documentation
Show all versions of justtestlah-pcloudy Show documentation
JustTestLah! is a JAVA test framework targeting projects that support multiple platforms, in particular Web, Android and iOS. It follows a BDD approach and allows testing against all platforms using the same feature files. JustTestLah's main aim is to make the configuration and the actual test code as easy as possible.
The newest version!
package io.github.martinschneider.justtestlah.configuration;
import com.ssts.pcloudy.Connector;
import com.ssts.pcloudy.appium.PCloudyAppiumSession;
import com.ssts.pcloudy.dto.appium.booking.BookingDtoDevice;
import com.ssts.pcloudy.dto.device.MobileDevice;
import com.ssts.pcloudy.dto.file.PDriveFileDTO;
import com.ssts.pcloudy.exception.ConnectError;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
public class PCloudyWebDriverBuilder extends LocalWebDriverBuilder implements WebDriverBuilder {
private static final String PCLOUDY_API_URL = "https://device.pcloudy.com/api/";
private static final Logger LOG = LoggerFactory.getLogger(PCloudyWebDriverBuilder.class);
@Value("${pcloudy.email}")
private String email;
@Value("${pcloudy.apikey}")
private String apiKey;
@Value("${pcloudy.duration}")
private Integer duration;
/*
* (non-Javadoc)
*
* @see io.github.martinschneider.justtestlah.configuration.WebDriverBuilder# getAndroidDriver()
*/
@Override
public WebDriver getAndroidDriver() {
PCloudyAppiumSession pCloudySession;
try {
pCloudySession = getPCloudySession();
} catch (IOException | ConnectError | InterruptedException exception) {
LOG.error("Error creating pCloudy session!", exception);
return null;
}
return new AndroidDriver(
buildPCloudyUrl(pCloudySession),
addPCloudyCapabilities(
addAndroidCapabilities(new DesiredCapabilities()), pCloudySession.getDto()));
}
/*
* (non-Javadoc)
*
* @see io.github.martinschneider.justtestlah.configuration.WebDriverBuilder#getIOSDriver()
*/
@Override
public WebDriver getIOsDriver() {
PCloudyAppiumSession pCloudySession;
try {
pCloudySession = getPCloudySession();
} catch (IOException | ConnectError | InterruptedException exception) {
LOG.error("Error creating pCloudy session!", exception);
return null;
}
return new IOSDriver(
buildPCloudyUrl(pCloudySession),
addPCloudyCapabilities(
addIOsCapabilities(new DesiredCapabilities()), pCloudySession.getDto()));
}
private Capabilities addPCloudyCapabilities(
DesiredCapabilities capabilities, BookingDtoDevice device) {
capabilities.setCapability("deviceName", device.capabilities.deviceName);
capabilities.setCapability("browserName", device.capabilities.browserName);
capabilities.setCapability("platformName", device.capabilities.platformName);
capabilities.setCapability("app", "");
return capabilities;
}
private URL buildPCloudyUrl(PCloudyAppiumSession pCloudySession) {
try {
return pCloudySession
.getConnector()
.AppiumApis()
.getAppiumEndpoint(pCloudySession.getAuthToken());
} catch (IOException | ConnectError | InterruptedException exception) {
LOG.error("Error building pCloudy Appium URL!", exception);
return null;
}
}
private PCloudyAppiumSession getPCloudySession()
throws IOException, ConnectError, InterruptedException {
Connector con = new Connector(PCLOUDY_API_URL);
String authToken = con.authenticateUser(email, apiKey);
File fileToBeUploaded = new File(appPath);
PDriveFileDTO alreadyUploadedApp =
con.getAvailableAppIfUploaded(authToken, fileToBeUploaded.getName());
if (alreadyUploadedApp == null) {
LOG.info("Uploading App: {} ", fileToBeUploaded.getAbsolutePath());
PDriveFileDTO uploadedApp = con.uploadApp(authToken, fileToBeUploaded, false);
LOG.info("App uploaded");
alreadyUploadedApp = new PDriveFileDTO();
alreadyUploadedApp.file = uploadedApp.file;
} else {
LOG.info("App already present. Not uploading... ");
}
ArrayList selectedDevices = new ArrayList();
for (MobileDevice device : con.getDevices(authToken, 10, platform, true)) {
if (device.display_name.contains(deviceName)) {
selectedDevices.add(device);
break;
}
}
if (selectedDevices.size() == 0) {
LOG.error("No device of type {} available for testing", deviceName);
return null;
}
LOG.info("Booking device {} for {} minutes", selectedDevices.get(0).display_name, duration);
String sessionName = "Appium Session " + new Date();
BookingDtoDevice bookedDevice =
con.AppiumApis().bookDevicesForAppium(authToken, selectedDevices, duration, sessionName)[0];
LOG.info("Booking successful. Session name: {}", sessionName);
con.AppiumApis().initAppiumHubForApp(authToken, alreadyUploadedApp);
return new PCloudyAppiumSession(con, authToken, bookedDevice);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy