From 2429ad8ebc82cf918f01c6380b923ca34bcc96ee Mon Sep 17 00:00:00 2001 From: amanchopra1905 Date: Mon, 6 Jan 2025 18:21:25 +0530 Subject: [PATCH] selenium - testng updates --- docs/java-frameworks.md | 7 - docs/testng-framework.md | 295 +++++++++------------------------------ 2 files changed, 66 insertions(+), 236 deletions(-) diff --git a/docs/java-frameworks.md b/docs/java-frameworks.md index 769abb336..612db52f0 100644 --- a/docs/java-frameworks.md +++ b/docs/java-frameworks.md @@ -70,14 +70,7 @@ cd java-selenium-sample If you are using your own project, make sure you update the **Hub endpoint** in your tests file. By setting up the Hub endpoint, you establish the communication channel between your tests and the browser nodes, enabling effective test distribution and execution. ```java title="Test.java" -// highlight-next-line public static String hubURL = "https://hub.lambdatest.com/wd/hub"; -private WebDriver driver; -public void setup() throws MalformedURLException { - //... your capabilities - // highlight-next-line - driver = new RemoteWebDriver(new URL(hubURL), capabilities); -} ``` ## Step 2: Update the dependencies diff --git a/docs/testng-framework.md b/docs/testng-framework.md index 86318ae61..86f0a60d1 100644 --- a/docs/testng-framework.md +++ b/docs/testng-framework.md @@ -1,6 +1,6 @@ --- id: testng-framework -title: Execute Selenium Tests With TestNG +title: Run your Selenium TestNG tests on LambdaTest sidebar_label: TestNG description: Your guide to running tests using TestNG on LambdaTest's Selenium Grid of 3000+ real devices and desktop browsers. keywords: @@ -21,6 +21,8 @@ slug: testng-with-selenium-running-java-automation-scripts-on-lambdatest-seleniu import CodeBlock from '@theme/CodeBlock'; import {YOUR_LAMBDATEST_USERNAME, YOUR_LAMBDATEST_ACCESS_KEY} from "@site/src/component/keys"; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +This guide walks you through the process of running Selenium TestNG tests on LambdaTest, a cloud-based cross-browser testing platform. By following these steps, you can seamlessly execute automated tests on a wide range of browsers and operating systems using LambdaTest’s Selenium Grid. -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -# Selenium With TestNG Tutorial - ---- - -In this topic, you will learn how to configure and run tests using **TestNG** on LambdaTest's [Selenium testing cloud platform](https://www.lambdatest.com/selenium-automation). - -## Objectives - ---- +## Prerequisites +Before you begin, ensure you have the following: -By the end of this topic, you will be able to: +- Your [LambdaTest Username and Access Key](https://accounts.lambdatest.com/) +- Install Java Development Kit (JDK). We recommend Java version 11 +- Install [Maven](https://maven.apache.org/) +- [Download](https://www.selenium.dev/downloads/) the latest Selenium Client and its WebDriver bindings -1. Set up an environment for testing your hosted web pages using **TestNG** framework with **Selenium**. -2. Understand and configure the core capabilities required for your Selenium test suite. -3. Run test cases in parallel using **TestNG** with Selenium to reduce build times. -4. Test your locally hosted pages on LambdaTest platform. -5. Explore advanced features of LambdaTest. +## Step 1: Configure your test suite :::tip Sample repo +Download or Clone the code sample for the TestNG from the LambdaTest GitHub repository to run the tests on our Standard Grid. -All the code samples in this documentation can be found on **LambdaTest's Github Repository**. You can either download or clone the repository to quickly run your tests. Image View on GitHub - +Image View on GitHub ::: -## Prerequisites - ---- - -Before you can start performing Java automation testing with Selenium, you would need to: - -- Install the latest **Java development environment**. We recommend to use **Java 11** version. - -- Download the latest **Selenium Client** and its **WebDriver bindings** from the [official website](https://www.selenium.dev/downloads/). Latest versions of Selenium Client and WebDriver are ideal for running your automation script on LambdaTest Selenium cloud grid. - -- Install **Maven** which supports **TestNG** framework out of the box. **Maven** can be downloaded and installed following the steps from [the official website](https://maven.apache.org/). Maven can also be installed easily on **Linux/MacOS** using [**Homebrew**](https://brew.sh/) package manager. - -### Cloning Repo and Installing Dependencies - -**Step 1:** Clone the LambdaTest’s [Java-TestNG-Selenium](https://github.com/LambdaTest/Java-TestNG-Selenium) repository and navigate to the code directory as shown below: - ```bash -git clone https://github.com/LambdaTest/Java-TestNG-Selenium +git clone https://github.com/LambdaTest/Java-TestNG-Selenium.git cd Java-TestNG-Selenium ``` -You may also want to run the command below to check for outdated dependencies. +If you are using your own project, make sure you update the **Hub endpoint** in your tests file. By setting up the Hub endpoint, you establish the communication channel between your tests and the browser nodes, enabling effective test distribution and execution. + +```java title="Test.java" +public static String hubURL = "https://hub.lambdatest.com/wd/hub"; +``` + +## Step 2: Update the dependencies +Run the command below to check for outdated dependencies. Review updates carefully before modifying your `pom.xml`, as they might not be compatible with your code. ```bash mvn versions:display-dependency-updates ``` -### Setting up your Authentication +## Step 3: Configure your test Capabilities +LambdaTest requires specific capabilities to set the browser, browser version, operating system, and other configurations for your test. -Make sure you have your LambdaTest credentials with you to run test automation scripts on LambdaTest Selenium Grid. You can obtain these credentials from the [LambdaTest Automation Dashboard](https://automation.lambdatest.com/build) or through [LambdaTest Profile](https://accounts.lambdatest.com/login). +Example desired capabilities for testing on Chrome 120: -**Step 2:** Set LambdaTest **Username** and **Access Key** in environment variables. +```java title="Test.java" +DesiredCapabilities capabilities = new DesiredCapabilities(); +capabilities.setCapability("browserName", "chrome"); +capabilities.setCapability("version", "120.0"); +capabilities.setCapability("platform", "win10"); // If this cap isn't specified, it will just get the any available one +capabilities.setCapability("build", "LambdaTestSampleApp"); +capabilities.setCapability("name", "LambdaTestJavaSample"); +``` - +:::tip +You can generate capabilities for your test requirements with the help of our inbuilt :link: **[Capabilities Generator tool](https://www.lambdatest.com/capabilities-generator/)**. +::: - +## Step 4: Setup your LambdaTest credentials +In your terminal (as per your respective Operating System), run these command to setup your LambdaTest credentials. +> You can see your credentials below if you have logged into our platform. + +
- {`export LT_USERNAME="${ YOUR_LAMBDATEST_USERNAME()}" \\ + {`export LT_USERNAME="${ YOUR_LAMBDATEST_USERNAME()}" export LT_ACCESS_KEY="${ YOUR_LAMBDATEST_ACCESS_KEY()}"`}
-
-
- {`set LT_USERNAME="${ YOUR_LAMBDATEST_USERNAME()}" \` + {`set LT_USERNAME="${ YOUR_LAMBDATEST_USERNAME()}" set LT_ACCESS_KEY="${ YOUR_LAMBDATEST_ACCESS_KEY()}"`}
-
-## Run Your First Test +## Step 5: Execute your test +If you are using the sample code repository (provided above), then use the below mentioned command to trigger your tests: ---- - -### Sample Test with TestNG - -```java title="TestNG To Do" -import org.openqa.selenium.By; -import org.openqa.selenium.Platform; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.remote.DesiredCapabilities; -import org.openqa.selenium.remote.RemoteWebDriver; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import java.net.MalformedURLException; -import java.net.URL; -public class TestNGTodo{ - public String username = "YOUR_LAMBDATEST_USERNAME"; - public String accesskey = "YOUR_LAMBDATEST_ACCESS_KEY"; - public static RemoteWebDriver driver = null; - public String gridURL = "@hub.lambdatest.com/wd/hub"; - boolean status = false; - @BeforeClass - public void setUp() throws Exception { - DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability("browserName", "chrome"); - capabilities.setCapability("version", "70.0"); - capabilities.setCapability("platform", "win10"); // If this cap isn't specified, it will just get the any available one - capabilities.setCapability("build", "LambdaTestSampleApp"); - capabilities.setCapability("name", "LambdaTestJavaSample"); - try { - driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities); - } catch (MalformedURLException e) { - System.out.println("Invalid grid URL"); - } catch (Exception e) { - System.out.println(e.getMessage()); - } - } - @Test - public void testSimple() throws Exception { - try {//Change it to production page - driver.get("https://lambdatest.github.io/sample-todo-app/"); - //Let's mark done first two items in the list. - driver.findElement(By.name("li1")).click(); - driver.findElement(By.name("li2")).click(); - // Let's add an item in the list. - driver.findElement(By.id("sampletodotext")).sendKeys("Yey, Let's add it to list"); - driver.findElement(By.id("addbutton")).click(); - // Let's check that the item we added is added in the list. - String enteredText = driver.findElementByXPath("/html/body/div/div/div/ul/li[6]/span").getText(); - if (enteredText.equals("Yey, Let's add it to list")) { - status = true; - } - } catch (Exception e) { - System.out.println(e.getMessage()); - } - } - @AfterClass - public void tearDown() throws Exception { - if (driver != null) { - ((JavascriptExecutor) driver).executeScript("lambda-status=" + status); - driver.quit(); - } - } -} + + +```xml reference +https://github.com/LambdaTest/java-testng-selenium/blob/master/single.xml ``` -### Configuring your Test Capabilities - -**Step 3:** In the test script, you need to update your test capabilities. In this code, we are passing browser, browser version, and operating system information, along with LambdaTest Selenium grid capabilities via capabilities object. The capabilities object in the above code are defined as: - -```java -DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability("browserName", "chrome"); - capabilities.setCapability("version", "70.0"); - capabilities.setCapability("platform", "win10"); // If this cap isn't specified, it will just get the any available one - capabilities.setCapability("build", "LambdaTestSampleApp"); - capabilities.setCapability("name", "LambdaTestJavaSample"); -``` -> You can also use **dev** and **beta** browser versions. To generate capabilities for your test requirements, you can use our inbuilt 🔗 [Capabilities Generator Tool](https://www.lambdatest.com/capabilities-generator/). - -### Executing the Test - -**Step 4:** The tests can be executed in the terminal using the following command. - ```bash mvn test -D suite=single.xml ``` + -:::info - -Your test results would be displayed on the test console (or command-line interface if you are using terminal/cmd) and on [LambdaTest automation dashboard](https://accounts.lambdatest.com/login). LambdaTest Automation Dashboard will help you view all your text logs, screenshots and video recording for your entire automation tests. - -::: - -## Run Parallel Tests Using TestNG - ---- + +```xml reference +https://github.com/LambdaTest/java-testng-selenium/blob/master/parallel.xml +``` -### Setting up the Parallel Environment +```bash +mvn test -D suite=parallel.xml +``` + -Here is an example `xml` file which would help you to run a single test on various browsers at the same time, you would also need to generate a testcase which makes use of **TestNG** framework parameters (`org.testng.annotations.Parameters`). + +Here is an example xml file which would help you to run a single test on various browsers at the same time: -```xml title="testng.xml" +```xml @@ -269,93 +185,14 @@ Here is an example `xml` file which would help you to run a single test on vario ``` + -### Executing Parallel Tests using TestNG - -To run parallel tests using **TestNG**, we would have to execute the below commands in the terminal: - -- For the above example code - ```bash - mvn test - ``` -- For the cloned Java-TestNG-Selenium repo used to run our first sample test - ```bash - mvn test -D suite=parallel.xml - ``` - -:::info - -Your test results would be displayed on the test console (or command-line interface if you are using terminal/cmd) and on [LambdaTest automation dashboard](https://accounts.lambdatest.com/login). - -::: - -## Testing Locally Hosted or Privately Hosted Projects - ---- - -You can test your locally hosted or privately hosted projects with [LambdaTest Selenium grid cloud](https://www.lambdatest.com/selenium-automation) using LambdaTest Tunnel app. All you would have to do is set up an SSH tunnel using LambdaTest Tunnel app and pass toggle `tunnel = True` via desired capabilities. LambdaTest Tunnel establishes a secure SSH protocol based tunnel that allows you in testing your locally hosted or privately hosted pages, even before they are made live. - -:::tip Tunnel Help - -Refer our :link: [LambdaTest Tunnel documentation](https://www.lambdatest.com/support/docs/testing-locally-hosted-pages/) for more information. - -::: - -Here’s how you can establish LambdaTest Tunnel. - -:::info Download the binary file - -- [LambdaTest Tunnel for Windows](https://downloads.lambdatest.com/tunnel/v3/windows/64bit/LT_Windows.zip) -- [LambdaTest Tunnel for Mac](https://downloads.lambdatest.com/tunnel/v3/mac/64bit/LT_Mac.zip) -- [LambdaTest Tunnel for Linux](https://downloads.lambdatest.com/tunnel/v3/linux/64bit/LT_Linux.zip) - -::: - -Open command prompt and navigate to the binary folder. - -Run the following command: - -```bash -./LT -user {user’s login email} -key {user’s access key} -``` - -So if your user name is **lambdatest@example.com**, the command would be: - -
- - {`./LT -user lambdatest@example.com -key ${ YOUR_LAMBDATEST_ACCESS_KEY()}`} - -
+
-Once you are able to connect **LambdaTest Tunnel** successfully, you would just have to pass on tunnel capabilities in the code as shown: - -```java title="Tunnel Capability" -DesiredCapabilities capabilities = new DesiredCapabilities(); - capabilities.setCapability("tunnel", true); -``` +Visit the [LambdaTest Web Automation](https://automation.lambdatest.com/build) page to check the status of your test execution. +Image ## Additional Links - ---- - - [Advanced Configuration for Capabilities](https://www.lambdatest.com/support/docs/selenium-automation-capabilities/) - [How to test locally hosted apps](https://www.lambdatest.com/support/docs/testing-locally-hosted-pages/) -- [How to integrate LambdaTest with CI/CD](https://www.lambdatest.com/support/docs/integrations-with-ci-cd-tools/) - - +- [How to integrate LambdaTest with CI/CD](https://www.lambdatest.com/support/docs/integrations-with-ci-cd-tools/) \ No newline at end of file