From 2f208cda7ec19905e7677fe062c673fb797145eb Mon Sep 17 00:00:00 2001 From: Saniya Gazala Date: Fri, 5 Dec 2025 18:26:19 +0530 Subject: [PATCH] Migration Support of BS, SL and Local to LambdaTest --- .../Lambdatest-text-validation-result.png | Bin 0 -> 63278 bytes ...wserstack-to-lambdatest-migration-guide.md | 428 +++++++----- docs/legacy-test-platform-to-lambdatest.md | 629 +++++------------- ...saucelabs-to-lambdatest-migration-guide.md | 360 +++++++--- 4 files changed, 718 insertions(+), 699 deletions(-) create mode 100644 assets/images/browserstack-lambdatest-migration/Lambdatest-text-validation-result.png diff --git a/assets/images/browserstack-lambdatest-migration/Lambdatest-text-validation-result.png b/assets/images/browserstack-lambdatest-migration/Lambdatest-text-validation-result.png new file mode 100644 index 0000000000000000000000000000000000000000..748c0eaddadc30754b323c95fb90c814d69ea0b3 GIT binary patch literal 63278 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 -# Migrating from BrowserStack to LambdaTest +# Migration from BrowserStack to LambdaTest * * * LambdaTest and BrowserStack both offer the cloud-based Selenium Grid. Hence, you can easily migrate your existing Selenium test automation scripts (or suites) from BrowserStack to LambdaTest -[Note: This guide covers the migration of tests running on the cloud grid that uses Selenium 3.141.59] - -## Introduction -*** -Migrating your existing tests running on BrowserStack to LambdaTest can be done with just a few lines of change. In this guide, we will see how you can use LambdaTest desired capabilities in your tests, authenticate your test session, and run tests on the browsers in our cloud. +[Note: This guide covers the migration of tests running on the cloud grid that uses Selenium 4 and Selenium 3] -## Changes to be made in your scripts -*** -### Authentication +## Authentication Firstly, you need to change the authentication in your configuration settings of your test suite. For running tests on LambdaTest Selenium Grid, you need to have a valid user_name and access_key to perform tests on our Grid. In case you do not have an account on LambdaTest, visit the [LambdaTest signup page](https://accounts.lambdatest.com/register) and create a new account. - + -* UserName -* AccessKey -* Hub URL -* Desired Capabilities +When migrating your Selenium 4 tests from BrowserStack to LambdaTest, the following updates are required in your existing code: -Here is a side-by-side comparison of each of the fields that we have highlighted above: +1. Get LambdaTest Credentials: You can find these credentials under Account Settings > [Password & Security](https://accounts.lambdatest.com/security/username-accesskey) and copy your Username and Access Key, then add them to the .env file to keep them safe from public exposure. -| Property | BrowserStack | LambdaTest | -|---|---| ---| -| UserName (Type: String) | UserName to access Selenium Grid on BrowserStack | UserName to access Selenium Grid on LambdaTest | -| AccessKey (Type: String) | AccessKey to access Selenium Grid on BrowserStack | AccessKey to access Selenium Grid on LambdaTest | -| Selenium Hub URL (Type: String) | @hub-cloud.browserstack.com/wd/hub | @hub.lambdatest.com/wd/hub | +2. Create .env file: Securely store your LambdaTest credentials, create a .env file in the root of your project and add the following values: -For a Java-based implementation, here are the changes in the script as far as the authentication stage is concerned: - -**BrowserStack** -``` js -// test.java -public static final String user_name = "BrowserStack_UserName"; -public static final String access_key = "BrowserStack_AccessKey"; ``` -**LambdaTest** -``` js -// test.java -public static final String user_name = "LambdaTest_UserName"; -public static final String access_key = "LambdaTest_AccessKey"; +LT_USERNAME="" +LT_ACCESS_KEY="" ``` -### Changes in Hub URL -You need to now change the hub URL in the configuration settings of your test suite. Hub URL is of type String and it defines the Hub location to which the Selenium tests would be submitted for execution. +Once the .env file is set up, ensure your test framework correctly reads these variables at runtime. This helps keep your authentication secure and avoids hard-coding credentials within your scripts. With the credentials in place, you’re now ready to update your Hub URL for LambdaTest execution. -Here is a side-by-side comparison of the Hub URL for BrowserStack and LambdaTest: -| Property | BrowserStack | LambdaTest | -|---|---| ---| -| Selenium Hub URL (Type: String) | @hub-cloud.browserstack.com/wd/hub | @hub.lambdatest.com/wd/hub | +## Changes in Hub URL +You need to now change the hub URL in the configuration settings of your test suite. Hub URL is of type String and it defines the Hub location to which the Selenium tests would be submitted for execution. -For a Java-based implementation, here are the changes in the script as far as the Hub URL is concerned: + -**BrowserStack** -``` js -// test.java -public static final String Hub_URL = "https://" + user_name + ":" + access_key + "@hub-cloud.browserstack.com/wd/hub"; + + +```js +@hub-cloud.browserstack.com/wd/hub ``` -**LambdaTest** -``` js -// test.java -public static final String Hub_URL = "https://" + user_name + ":" + access_key + "@hub.lambdatest.com/wd/hub"; + + + + + +```js +@hub.lambdatest.com/wd/hub ``` -### Capabilities Generator + + + + +## Configuring Selenium 4 Tests on LambdaTest +*** +Migrating your Selenium 4 tests from BrowserStack to LambdaTest requires only a few small updates. In this guide, we’ll walk through how to apply LambdaTest’s W3C-compliant capabilities, configure authentication, and execute your Selenium 4 test sessions on real browsers hosted in the LambdaTest cloud. + +*** + +### LambdaTest Automation Capabilities + Capabilities generator let you configure the desired capabilities (or capabilities) which are configuration options that let you set the following: * Desired browser @@ -125,163 +120,262 @@ Optionally, you can also choose the Selenium version and other advanced options For the migration, we have considered Java-based Selenium automation tests. Shown below are the screenshots of capabilities generator of BrowserStack and LambdaTest: -**BrowserStack** + + + -Image +```js +MutableCapabilities capabilities = new MutableCapabilities(); +HashMap bstackOptions = new HashMap(); +capabilities.setCapability("browserName", "Chrome"); +bstackOptions.put("os", "OS X"); +bstackOptions.put("osVersion", "Tahoe"); +bstackOptions.put("browserVersion", "latest"); +bstackOptions.put("userName", "YOUR_USERNAME"); +bstackOptions.put("accessKey", "YOUR_ACCESS_KEY"); +bstackOptions.put("consoleLogs", "info"); +capabilities.setCapability("bstack:options", bstackOptions); +``` + + + + + +```js +ChromeOptions browserOptions = new ChromeOptions(); +browserOptions.setPlatformName("Windows 10"); +browserOptions.setBrowserVersion("dev"); +HashMap ltOptions = new HashMap(); +ltOptions.put("username", ""); +ltOptions.put("accessKey", ""); +ltOptions.put("w3c", true); +browserOptions.setCapability("LT:Options", ltOptions); +``` + + -**LambdaTest** + + +To generate capabilities use [LambdaTest Capabilities Generator](https://www.lambdatest.com/capabilities-generator/) to define key automation testing parameters, such as browser, version, operating system, and additional test settings. + + + +## Configuring Selenium 3 Tests on LambdaTest +*** +Migrating your Selenium 3 tests from BrowserStack to LambdaTest requires only a few simple configuration changes. In the sections below, we’ll guide you through updating your test setup, applying Selenium 3–compatible capabilities, and running your test sessions on real browsers hosted on the LambdaTest cloud. +*** -You can generate the corresponding Selenium capabilities using the [LambdaTest capabilities generator](https://www.lambdatest.com/capabilities-generator/). Capabilities matching the ones shown in the BrowserStack capabilities screenshot is below: +### LambdaTest Automation Capabilities -Image +The Capabilities Generator allows you to configure the required desired capabilities for Selenium 3 test execution. These capabilities define the browser environment in which your tests will run. -Shown below is the comparison of the capabilities generated by BrowserStack and LambdaTest capabilities generator: +With Selenium 3, the core capabilities remain: -| Capabilities | BrowserStack | LambdaTest | -|---|---| ---| -| Browser | browser | browserName | -| Browser Version | browser_version | version | -| Platform Name | os | platform | -| Platform Version | os_version | N.A | +* Browser Name (e.g., Chrome, Firefox, Edge) +* Browser Version +* Operating System / Platform -The platform (or OS) version is a part of the platform name in LambdaTest. Hence, it is mentioned as NA (Not Applicable) in the Capabilities Comparison Table. +Optionally, you may also configure Selenium versions or other advanced settings based on your test requirements. However, for this migration guide, we will primarily focus on the three fundamental capabilities listed above. -Here is the summary of the comparison of Desired Capabilities for `Java` language: +Below are example capability representations from BrowserStack and LambdaTest to help you understand how to adapt your existing configuration during migration. -**BrowserStack** -``` js -// test.java + + + + + +```js DesiredCapabilities caps = new DesiredCapabilities(); -caps.setCapability("os", "Windows"); -caps.setCapability("os_version", "10"); caps.setCapability("browser", "Chrome"); +caps.setCapability("os", "OS X"); +caps.setCapability("os_version", "Tahoe"); caps.setCapability("browser_version", "latest"); -caps.setCapability("browserstack.local", "false"); -caps.setCapability("browserstack.selenium_version", "3.141.59"); +caps.setCapability("browserstack.user", "YOUR_USERNAME"); +caps.setCapability("browserstack.key", "YOUR_ACCESS_KEY"); +caps.setCapability("browserstack.console", "info"); ``` -**LambdaTest** -``` js -// test.java + + + + + +```js DesiredCapabilities capabilities = new DesiredCapabilities(); -capabilities.setCapability("build", "your build name"); -capabilities.setCapability("name", "your test name"); -capabilities.setCapability("platform", "Windows 10"); -capabilities.setCapability("browserName", "Chrome"); -capabilities.setCapability("version","92.0"); +capabilities.setCapability("browserName", "Safari"); +capabilities.setCapability("browserVersion", "26"); +HashMap ltOptions = new HashMap(); +ltOptions.put("username", ""); +ltOptions.put("accessKey", ""); +ltOptions.put("visual", true); +ltOptions.put("video", true); +ltOptions.put("platformName", "MacOS Tahoe"); +capabilities.setCapability("LT:Options", ltOptions); ``` -## Hands On Guide - BrowserStack To LambdaTest Migration + + + + +To generate capabilities for Selenium 3, you can use the [LambdaTest Capabilities Generator](https://www.lambdatest.com/capabilities-generator/) , which allows you to define essential automation parameters such as browser name, browser version, operating system, along with any additional test configurations required for execution. + + +## Hands On Guide - LambdaTest Migration *** -Let’s take a practical example that demonstrates the entire migration process. The test scenario is to open Google on Chrome (version 92.0) that is installed on a Windows 10 machine. +Let’s walk through a practical example demonstrating how to migrate a Selenium 4 test to LambdaTest. In this scenario, we launch the latest Chrome browser on a Windows 10 machine. + +**Test Scenario**: + +This test script performs a basic text validation on the website [LambdaTest eCommerce Playground](https://ecommerce-playground.lambdatest.io/) and shows the expected execution results when running the test in the LambdaTest cloud. + + + + + + +```java +// TextValidationTest.java -### BrowserStack -``` js -// test.java import org.openqa.selenium.By; -import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.remote.DesiredCapabilities; +import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.RemoteWebDriver; + import java.net.URL; - -public class BrowserStackSampleTest -{ - public static final String user_name = "BrowserStack_user_name"; - public static final String access_key = "BrowserStack_access_key"; - public static final String grid_url = "https://" + user_name + ":" + access_key + "@hub-cloud.browserstack.com/wd/hub"; - public static void main(String[] args) throws Exception - { - DesiredCapabilities caps = new DesiredCapabilities(); - - caps.setCapability("build", "Build #1"); - caps.setCapability("name", "Sample project"); - caps.setCapability("os", "Windows"); - caps.setCapability("os_version", "10"); - caps.setCapability("browser", "Chrome"); - caps.setCapability("browser_version", "92.0"); - - WebDriver driver = new RemoteWebDriver(new URL(grid_url), caps); - driver.get("http://www.google.com"); - +import java.util.HashMap; + +public class TextValidationTest { + + public static void main(String[] args) throws Exception { + + // ---------------- Authentication using Environment Variables ---------------- + String username = System.getenv("LT_USERNAME") == null ? "Your LT Username" : System.getenv("LT_USERNAME"); // If env variables are unavailable, you may hard-code credentials here. + String authkey = System.getenv("LT_ACCESS_KEY") == null ? "Your LT AccessKey" : System.getenv("LT_ACCESS_KEY"); // If env variables are unavailable, you may hard-code credentials here. + + String GRID_URL = "https://" + username + ":" + authkey + "@hub.lambdatest.com/wd/hub"; + + // ---------------- Selenium 4 Browser Options (Runs on LambdaTest Cloud) ---------------- + ChromeOptions browserOptions = new ChromeOptions(); + browserOptions.setPlatformName("Windows 10"); + browserOptions.setBrowserVersion("latest"); + + HashMap ltOptions = new HashMap(); + ltOptions.put("username", username); + ltOptions.put("accessKey", authkey); + ltOptions.put("project", "Text Validation Test"); + ltOptions.put("build", "Text Validation Test Build"); + ltOptions.put("selenium_version", "4.0.0"); + ltOptions.put("w3c", true); + + browserOptions.setCapability("LT:Options", ltOptions); + + // ---------------- Start Remote WebDriver Session ---------------- + WebDriver driver = new RemoteWebDriver(new URL(GRID_URL), browserOptions); + + // 1. Visit Page + driver.get("https://ecommerce-playground.lambdatest.io/"); + + // 2. Text Validation + String expectedText = "This is a dummy website for Web Automation Testing"; + boolean isTextPresent = driver.getPageSource().contains(expectedText); + + if (isTextPresent) { + System.out.println("✔ Text validation PASSED"); + System.out.println("Found: " + expectedText); + } else { + System.out.println("✘ Text validation FAILED"); + } + + // ---------------- End Session ---------------- driver.quit(); } } ``` -### LambdaTest -``` js -// test.java + + + + +```java +// TextValidationTest.java – Selenium 3 Configuration + import org.openqa.selenium.By; -import org.openqa.selenium.Platform; import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; + import java.net.URL; - -public class LambdaTestSampleTest -{ - public static final String user_name = "LambdaTest_user_name"; - public static final String access_key = "LambdaTest_access_key"; - public static final String grid_url = "https://" + user_name + ":" + access_key + "@hub.lambdatest.com/wd/hub"; - public static void main(String[] args) throws Exception - { - DesiredCapabilities caps = new DesiredCapabilities(); - - capabilities.setCapability("build", "Build #1"); - capabilities.setCapability("name","Sample project"); - capabilities.setCapability("platform", "Windows 10 "); - capabilities.setCapability("browserName", "Chrome"); - capabilities.setCapability("version", "92.0"); - - WebDriver driver = new RemoteWebDriver(new URL(grid_url), caps); - driver.get("http://www.google.com"); - +import java.util.HashMap; + +public class TextValidationTest { + + public static void main(String[] args) throws Exception { + + // ================== LambdaTest Authentication via ENV Vars ================== + String username = System.getenv("LT_USERNAME") == null ? "Your LT Username" : System.getenv("LT_USERNAME"); // If env variables are unavailable, you may hard-code credentials here. + String authkey = System.getenv("LT_ACCESS_KEY") == null ? "Your LT AccessKey" : System.getenv("LT_ACCESS_KEY"); // If env variables are unavailable, you may hard-code credentials here. + String GRID_URL = "https://" + username + ":" + authkey + "@hub.lambdatest.com/wd/hub"; + + // ================== Selenium 3 LambdaTest Capabilities ================== + DesiredCapabilities capabilities = new DesiredCapabilities(); + capabilities.setCapability("browserName", "Safari"); + capabilities.setCapability("browserVersion", "26"); + + HashMap ltOptions = new HashMap(); + ltOptions.put("username", username); // pulled dynamically + ltOptions.put("accessKey", authkey); // pulled dynamically + ltOptions.put("visual", true); + ltOptions.put("video", true); + ltOptions.put("platformName", "MacOS Tahoe"); + + + capabilities.setCapability("LT:Options", ltOptions); + + // ================== Start Selenium 3 Remote WebDriver ================== + WebDriver driver = new RemoteWebDriver(new URL(GRID_URL), capabilities); + + // 1. Open Website + driver.get("https://ecommerce-playground.lambdatest.io/"); + + // 2. Validate expected UI text + String expectedText = "This is a dummy website for Web Automation Testing"; + boolean isTextPresent = driver.getPageSource().contains(expectedText); + + if (isTextPresent) { + System.out.println("✔ Text validation PASSED"); + System.out.println("Found: " + expectedText); + } else { + System.out.println("✘ Text validation FAILED"); + } + driver.quit(); } } + ``` -As seen above, the majority of the implementation is unchanged. Changes are only made on the infrastructure side (i.e. instead of BrowserStack, the tests would be run on LambdaTest). + -Here is a side-by-side comparison of what has changed from the implementation point of view: + + + + + + + + + + + + +**Result** + +Visit LambdaTest Web Automation dashboard to view your test execution result. + +Lambdatest text validation result -**BrowserStack** -``` js -// test.java -public static final String user_name = "BrowserStack_user_name"; -public static final String access_key = "BrowserStack_access_key"; -public static final String grid_url = "https://" + user_name + ":" + access_key + "@hub-cloud.browserstack.com/wd/hub"; -public static void main(String[] args) throws Exception -{ - DesiredCapabilities caps = new DesiredCapabilities(); - caps.setCapability("build", "Build #1"); - caps.setCapability("name", "Sample project"); - caps.setCapability("os", "Windows"); - caps.setCapability("os_version", "10"); - caps.setCapability("browser", "Chrome"); - caps.setCapability("browser_version", "92.0"); -``` -**LambdaTest** -``` js -// test.java -public static final String user_name = "LambdaTest_user_name"; -public static final String access_key = "LambdaTest_access_key"; -public static final String grid_url = "https://" + user_name + ":" + access_key + "@hub.lambdatest.com/wd/hub"; -public static void main(String[] args) throws Exception -{ - DesiredCapabilities caps = new DesiredCapabilities(); - - capabilities.setCapability("build", "Build #1"); - capabilities.setCapability("name","Sample project"); - capabilities.setCapability("platform", "Windows 10 "); - capabilities.setCapability("browserName", "Chrome"); - capabilities.setCapability("version", "92.0"); -```