Localization Testing & Capturing Network in Selenium 4 using CDP
Introduction
This blog explores the essentials of Localization Testing and the efficient use of Chrome DevTools Protocol (CDP) for network data capture in Selenium 4. We'll uncover practical insights to enhance the quality and performance of web applications.
What is Localization Testing?
Localization Testing ensures that a software application meets cultural and language-specific requirements for a region. It focuses on functionality, language, date formats, currency symbols, and other cultural elements to ensure a seamless user experience globally.
Performing Localization Testing
Emulating Geographical Location
You can use CDP to set the geographical location, simulating users from different regions:
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import java.util.HashMap;
import java.util.Map;
public class SetGeolocation {
public static void main(String[] args) {
// Set the path to the ChromeDriver executable
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
// Initialize ChromeDriver
ChromeDriver driver = new ChromeDriver();
// Obtain DevTools instance
DevTools devTools = driver.getDevTools();
devTools.createSession();
// Set geolocation
Map<String, Object> coordinates = new HashMap<>();
coordinates.put("latitude", 40);
coordinates.put("longitude", 3);
coordinates.put("accuracy", 1);
// Execute CDP command to set geolocation
driver.executeCdpCommand("Emulation.setGeolocationOverride", coordinates);
// Navigate to Google and perform a search
driver.get("http://google.com");
driver.findElement(By.name("q")).sendKeys("netflix", Keys.ENTER);
// Click on the first search result
driver.findElements(By.cssSelector(".LC20lb")).get(0).click();
// Get and print the title of the page
String title = driver.findElement(By.cssSelector(".our-story-card-title")).getText();
// OutPut - Películas ilimitadas, programas de TV y más
System.out.println(title);
// Close the driver
driver.quit();
}
}
Exploring Network Interactions with Selenium 4 and CDP
The Network domain in Selenium provides the capability to monitor and analyze various network activities of a web page. It reveals details about HTTP, file, data, and other types of requests and responses. This includes information about headers, bodies, timing, and more, offering insights into the communication between the browser and the server during the loading and rendering of a webpage.
1.Capturing Network Requests
import java.util.Optional;
import org.junit.Test;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v94.network.Network;
public class CaptureRequestSelenium {
// Create a method to capture network requests
public void captureRequestSelenium() {
// Set the path for the ChromeDriver executable
System.setProperty("webdriver.chrome.driver", "path to chromedriver");
// Initialize a ChromeDriver instance
ChromeDriver driver = new ChromeDriver();
// Obtain DevTools instance from the ChromeDriver
DevTools devTool = driver.getDevTools();
// Create a session using DevTools
devTool.createSession();
// Enable network monitoring using Chrome DevTools Protocol (CDP)
devTool.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
// Add a listener for the 'requestWillBeSent' event
devTool.addListener(Network.requestWillBeSent(), requestSent -> {
// Print the captured request details
System.out.println("Request URL => " + requestSent.getRequest().getUrl());
System.out.println("Request Method => " + requestSent.getRequest().getMethod());
System.out.println("Request Headers => " + requestSent.getRequest().getHeaders().toString());
System.out.println("------------------------------------------------------");
});
// Open a URL in the browser to trigger network requests
driver.get("https://example.com");
}
}
2.Capturing Network Responses
Now that we've covered capturing requests, let's extend our knowledge to capturing network responses.
import java.util.Optional;
import org.junit.Test;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v94.network.Network;
public class CaptureResponseSelenium {
// Create a method to capture network responses
public void captureRequestSelenium() {
// Set the path for the ChromeDriver executable
System.setProperty("webdriver.chrome.driver", "path to chromedriver");
// Initialize a ChromeDriver instance
ChromeDriver driver = new ChromeDriver();
// Obtain DevTools instance from the ChromeDriver
DevTools devTool = driver.getDevTools();
// Create a session using DevTools
devTool.createSession();
// Enable network monitoring using Chrome DevTools Protocol (CDP)
devTool.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
// Add a listener for the 'responseReceived' event
devTool.addListener(Network.responseReceived(), responseReceived -> {
// Print the captured response details
System.out.println("Response Url => " + responseReceived.getResponse().getUrl());
System.out.println("Response Status => " + responseReceived.getResponse().getStatus());
System.out.println("Response Headers => " + responseReceived.getResponse().getHeaders().toString());
System.out.println("Response MIME Type => " + responseReceived.getResponse().getMimeType().toString());
System.out.println("------------------------------------------------------");
});
// Open a URL in the browser to trigger network responses
driver.get("https://example.com");
}
}
Conclusion
In conclusion, Selenium 4, integrated with Chrome DevTools Protocols, proves to be a powerful tool for effective localization testing. By harnessing the capabilities of CDP, testers can seamlessly emulate diverse geographical locations, languages, and cultural settings, ensuring a robust web application across the globe. This feature not only facilitates localization testing but also enables efficient capturing of network requests and responses. Congratulations on mastering these valuable techniques in Selenium automation! 🌐🚀