Docs

Selenium Testing Hub

Overview

Selenium is the industry-standard framework for web application testing. RobusTest Hub's Selenium integration provides a cloud-based grid for running your Selenium tests on real browsers and devices, eliminating the need to maintain local browser infrastructure.

Key Benefits:

  • Real Browser Testing: Execute tests on actual browsers across different platforms
  • Cross-Browser Support: Test on multiple browsers simultaneously
  • Cloud Infrastructure: No need to manage local browser installations
  • Scalable Execution: Run tests in parallel across multiple browsers
  • Mobile Web Testing: Test mobile web applications on real devices

Setup Process

Follow these steps to configure Selenium testing on RobusTest Hub:

Step 1: Project Configuration

Create a web project in RobusTest for your Selenium testing:

  • Project Type: Select "Mobile Web App Project" or appropriate web project type
  • Project ID: Note the project ID from your project dashboard URL
  • Configuration: Ensure project is configured for web testing

Step 2: Hub URL Configuration

Configure your Selenium tests to point to the RobusTest Hub:

  • Hub URL: Point your Selenium WebDriver to the RobusTest Hub endpoint
  • Connection: Ensure network connectivity to the RobusTest Hub
  • Authentication: Use your access key for authentication

Step 3: Desired Capabilities

Configure your Selenium desired capabilities for RobusTest Hub:

{
  "browserName": "[Browser Name]",
  "accessKey": "[User Access Key]",
  "projectID": "[Project ID]"
}

Parameter Details:

  • browserName: Specify the browser for test execution
    • Supported values: chrome, firefox, safari, MicrosoftEdge
    • Case-sensitive browser names
  • accessKey: Your RobusTest API access key
    • Location: Available in your user profile
    • Security: Keep secure and never share publicly
  • projectID: Your RobusTest project identifier
    • Format: Alphanumeric string from project dashboard URL
    • Example: 5d176ffef0238be8f3b7afa5

Step 4: Browser Status Monitoring

Monitor available browsers and their status:

API Endpoint:

GET http://[DEVICE_LAB_URL]/grid/browsers

Response Information:

  • Available Browsers: List of browsers ready for testing
  • Browser Versions: Specific versions available for each browser
  • Device Status: Current availability of browser instances
  • Capacity Information: Maximum concurrent sessions supported

Example Implementation

Java Example:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class RobusTestSeleniumExample {
    public static void main(String[] args) {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("browserName", "chrome");
        capabilities.setCapability("accessKey", "your_access_key_here");
        capabilities.setCapability("projectID", "your_project_id_here");

        WebDriver driver = new RemoteWebDriver(
            new URL("http://your-robustest-hub-url/wd/hub"),
            capabilities
        );

        // Your test code here
        driver.get("https://example.com");

        driver.quit();
    }
}

Python Example:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

capabilities = DesiredCapabilities.CHROME.copy()
capabilities['accessKey'] = 'your_access_key_here'
capabilities['projectID'] = 'your_project_id_here'

driver = webdriver.Remote(
    command_executor='http://your-robustest-hub-url/wd/hub',
    desired_capabilities=capabilities
)

# Your test code here
driver.get('https://example.com')

driver.quit()

JavaScript (Node.js) Example:

const { Builder } = require('selenium-webdriver');

const capabilities = {
    browserName: 'chrome',
    accessKey: 'your_access_key_here',
    projectID: 'your_project_id_here'
};

const driver = new Builder()
    .usingServer('http://your-robustest-hub-url/wd/hub')
    .withCapabilities(capabilities)
    .build();

// Your test code here
driver.get('https://example.com');

driver.quit();

Best Practices

Test Design:

  • Cross-Browser Testing: Test on multiple browsers to ensure compatibility
  • Responsive Testing: Verify responsive design across different screen sizes
  • Performance Testing: Monitor page load times and responsiveness
  • Error Handling: Implement proper error handling for network issues

Resource Management:

  • Session Management: Properly close WebDriver sessions to free resources
  • Parallel Execution: Use parallel execution for faster test feedback
  • Timeout Configuration: Set appropriate timeouts for test operations
  • Resource Optimization: Optimize tests for efficient resource usage

CI/CD Integration:

  • Pipeline Integration: Integrate Selenium tests into your CI/CD pipeline
  • Automated Triggers: Trigger tests automatically on code changes
  • Result Integration: Integrate test results with your reporting systems
  • Quality Gates: Use test results to make deployment decisions

Troubleshooting

Common Issues:

  • Connection Problems: Verify hub URL and network connectivity
  • Authentication Failures: Check access key validity and permissions
  • Browser Unavailability: Monitor browser status and availability
  • Test Timeouts: Adjust timeout settings for network conditions

Debugging Tips:

  • Log Analysis: Review Selenium logs for error details
  • Network Monitoring: Monitor network connectivity during test execution
  • Browser Status: Check browser availability before test execution
  • Capability Validation: Verify desired capabilities are correctly formatted

Randomizing Browser Selection

The RobusTest deployment at your location may consist of more than one server.

When starting a test session using the Selenium Hub on a multi-server deployment of RobusTest, it may be desirable to launch the browser each time from a different server machine at random.

This is in opposition to launching the test session on the browser on the same server machine in every run, thereby increasing the load on that server.

In order to randomize this process, i.e., to launch the browser on a different server machine each time, you need to perform the following steps:

1. Obtain all browsers on all server machines

2. Add the following code to your program:

browsers := model.GetAllAvailableSeleniumBrowsers(*db)
browser := model.Browser{}
rand.Seed(time.Now().UnixNano())
rand.Shuffle(len(browsers), func(i, j int) { browsers[i], browsers[j] = browsers[j], browsers[i] })

3. Now, iterate through the list of browsers until you find one that matches the desired capabilities you have chosen

4. Launch the Selenium test session