Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .github/workflows/pre-prod-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Pre-Prod Release

on:
push:
branches:
- pre-prod

jobs:
build-and-release:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up JDK 11
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
cache: maven

- name: Build with Maven
run: mvn clean package

- name: Upload main JAR artifact
uses: actions/upload-artifact@v4
with:
name: lambdatest-java-selenium-sdk
path: target/lambdatest-java-selenium-sdk-*.jar
retention-days: 90
if-no-files-found: error

- name: Upload agent JAR artifact
uses: actions/upload-artifact@v4
with:
name: lambdatest-java-selenium-sdk-agent
path: target/lambdatest-java-selenium-sdk-*-agent.jar
retention-days: 90
if-no-files-found: error

3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ MAVEN_CENTRAL*
*.tmp
*.bak
*~
gradle.properties
gradle.properties
.gradle/
Binary file removed .gradle/8.10/fileHashes/fileHashes.bin
Binary file not shown.
Binary file removed .gradle/8.10/fileHashes/fileHashes.lock
Binary file not shown.
2 changes: 1 addition & 1 deletion dependency-reduced-pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<groupId>com.lambdatest</groupId>
<artifactId>lambdatest-java-selenium-sdk</artifactId>
<name>LambdaTest Selenium SDK</name>
<version>1.0.1</version>
<version>1.0.2</version>
<description>A Java SDK for integrating Selenium tests with LambdaTest cloud platform</description>
<url>https://www.lambdatest.com</url>
<licenses>
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.lambdatest</groupId>
<artifactId>lambdatest-java-selenium-sdk</artifactId>
<version>1.0.1</version>
<version>1.0.2</version>
<packaging>jar</packaging>

<name>LambdaTest Selenium SDK</name>
Expand Down
238 changes: 200 additions & 38 deletions src/main/java/com/lambdatest/selenium/agent/RemoteWebDriverAdvice.java

Large diffs are not rendered by default.

213 changes: 156 additions & 57 deletions src/main/java/com/lambdatest/selenium/lambdatest/LambdaTestConfig.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.lambdatest.selenium.lambdatest.capabilities;

import java.util.Map;

import org.openqa.selenium.remote.DesiredCapabilities;

/**
* Handles browser-specific options (Chrome, Firefox, Edge, Safari, Opera, IE).
* These need special handling because they have different keys for Selenium 3 and 4.
*/
public class BrowserOptionsCapabilities {

/**
* Process browser-specific options from config.
* Sets both Selenium 3 and Selenium 4 keys for compatibility.
*/
public static void processBrowserOptions(Map<String, Object> config, DesiredCapabilities capabilities) {
// Chrome
processBrowserOption(config, capabilities, "chromeOptions", "goog:chromeOptions");

// Firefox
processBrowserOption(config, capabilities, "firefoxOptions", "moz:firefoxOptions");

// Edge
processBrowserOption(config, capabilities, "edgeOptions", "ms:edgeOptions");

// Safari
processBrowserOption(config, capabilities, "safariOptions", "safari:options");

// Opera (no W3C namespace, same for both)
processBrowserOption(config, capabilities, "operaOptions", "operaOptions");

// Internet Explorer
processBrowserOption(config, capabilities, "ieOptions", "se:ieOptions", "IEOptions");
}

/**
* Process a browser option with Selenium 3 and 4 compatibility.
*/
private static void processBrowserOption(Map<String, Object> config, DesiredCapabilities capabilities,
String selenium3Key, String selenium4Key) {
processBrowserOption(config, capabilities, selenium3Key, selenium4Key, selenium3Key);
}

/**
* Process a browser option with custom Selenium 3 key.
*/
private static void processBrowserOption(Map<String, Object> config, DesiredCapabilities capabilities,
String selenium3Key, String selenium4Key, String selenium3TargetKey) {
Object options = null;

// Check Selenium 3 key first
if (config.containsKey(selenium3Key)) {
options = config.get(selenium3Key);
}
// Then check Selenium 4 key
else if (config.containsKey(selenium4Key)) {
options = config.get(selenium4Key);
}

if (options != null) {
// Set both keys for compatibility
capabilities.setCapability(selenium3TargetKey, options); // Selenium 3
capabilities.setCapability(selenium4Key, options); // Selenium 4 W3C
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package com.lambdatest.selenium.lambdatest.capabilities;

import java.util.Arrays;
import java.util.List;

/**
* Definition of a capability with its key, aliases, and target locations.
* This makes it easy to add new capabilities without modifying the main processing logic.
*/
public class CapabilityDefinition {

private final String primaryKey;
private final List<String> aliases;
private final CapabilityTarget target;
private final String targetKey; // Optional: different key in target (e.g., "project" -> "projectName" for Selenium 3)

/**
* Where the capability should be set.
*/
public enum CapabilityTarget {
/** Set directly on DesiredCapabilities (Selenium 3 style) */
DESIRED_CAPABILITIES,
/** Set in lt:options (Selenium 4/W3C style) */
LT_OPTIONS,
/** Set in both places (for backwards compatibility) */
BOTH
}

public CapabilityDefinition(String primaryKey, CapabilityTarget target) {
this(primaryKey, target, null);
}

public CapabilityDefinition(String primaryKey, CapabilityTarget target, String targetKey) {
this(primaryKey, Arrays.asList(), target, targetKey);
}

public CapabilityDefinition(String primaryKey, List<String> aliases, CapabilityTarget target) {
this(primaryKey, aliases, target, null);
}

public CapabilityDefinition(String primaryKey, List<String> aliases, CapabilityTarget target, String targetKey) {
this.primaryKey = primaryKey;
this.aliases = aliases;
this.target = target;
this.targetKey = targetKey;
}

public String getPrimaryKey() {
return primaryKey;
}

public List<String> getAliases() {
return aliases;
}

public CapabilityTarget getTarget() {
return target;
}

public String getTargetKey() {
return targetKey != null ? targetKey : primaryKey;
}

/**
* Check if this definition matches the given key (primary key or any alias).
*/
public boolean matches(String key) {
return primaryKey.equals(key) || aliases.contains(key);
}

/**
* Get the value from config if it exists (checking primary key and aliases).
*/
public Object getValue(java.util.Map<String, Object> config) {
if (config.containsKey(primaryKey)) {
return config.get(primaryKey);
}
for (String alias : aliases) {
if (config.containsKey(alias)) {
return config.get(alias);
}
}
return null;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package com.lambdatest.selenium.lambdatest.capabilities;

/**
* Common capability key constants used across Selenium 3, Selenium 4, and LambdaTest configuration.
* This centralizes capability string definitions to avoid duplication and ensure consistency.
*/
public final class CapabilityKeys {

// Private constructor to prevent instantiation
private CapabilityKeys() {
throw new UnsupportedOperationException("Utility class cannot be instantiated");
}

// W3C Browser Capabilities
public static final String BROWSER_NAME = "browserName";
public static final String BROWSER = "browser";
public static final String BROWSER_VERSION = "browserVersion";
public static final String VERSION = "version";
public static final String PLATFORM_NAME = "platformName";
public static final String PLATFORM = "platform";
public static final String OS = "OS";

// LambdaTest Options
public static final String LT_OPTIONS = "lt:options";

// Organization capabilities
public static final String BUILD = "build";
public static final String BUILD_NAME = "buildName";
public static final String JOB = "job";
public static final String JOB_NAME = "jobName";
public static final String NAME = "name";
public static final String TESTNAME = "testname";
public static final String SESSIONNAME = "sessionname";
public static final String TEST = "test";
public static final String TAGS = "tags";
public static final String BUILD_TAGS = "buildTags";
public static final String PROJECT = "project";
public static final String PROJECT_NAME = "projectName";

// Driver and version capabilities
public static final String DRIVER_VERSION = "driver_version";
public static final String DRIVER_VERSION_ALIAS = "driverVersion";
public static final String DRIVER = "driver";

// Resolution
public static final String RESOLUTION = "resolution";
public static final String VIEWPORT = "viewport";

// Extension loading
public static final String LAMBDA_LOAD_EXTENSION = "lambda:loadExtension";
public static final String LOAD_EXTENSION = "loadExtension";

// Logging capabilities
public static final String COMMAND_LOG = "commandLog";
public static final String COMMAND_LOGS = "commandLogs";
public static final String SYSTEM_LOG = "systemLog";
public static final String SELENIUM_LOGS = "seleniumLogs";

// Network capabilities
public static final String NETWORK_HTTP2 = "network.http2";
public static final String DISABLE_XF_HEADERS = "DisableXFHeaders";
public static final String NETWORK_DEBUG = "network.debug";
public static final String IGNORE_FF_OPTIONS_ARGS = "ignoreFfOptionsArgs";
public static final String UPDATE_BUILD_STATUS_ON_SUCCESS = "updateBuildStatusOnSuccess";

// User files
public static final String LAMBDA_USER_FILES = "lambda:userFiles";
public static final String USER_FILES = "userFiles";

// Tunnel
public static final String TUNNEL_NAME = "tunnelName";

// Credentials
public static final String USER = "user";
public static final String ACCESS_KEY = "accessKey";
public static final String USERNAME = "username";
public static final String ACCESSKEY = "accesskey";

// Environment Variables
public static final String ENV_LT_USERNAME = "LT_USERNAME";
public static final String ENV_LT_ACCESS_KEY = "LT_ACCESS_KEY";
public static final String ENV_LT_PLATFORM_INDEX = "LT_PLATFORM_INDEX";

// Config Keys
public static final String PLATFORMS = "platforms";

// Config File Names
public static final String CONFIG_FILE_YML = "lambdatest.yml";
public static final String CONFIG_FILE_YAML = "lambdatest.yaml";

// Hub URL
public static final String HUB_URL_PREFIX = "https://";
public static final String HUB_URL_SUFFIX = "@hub.lambdatest.com/wd/hub";
public static final String HUB_URL_SEPARATOR = ":";
}

Loading