It is useful to be able to run Selenium tests on different types of networks, having different download and upload throughput.
This was not possible until recently when the needed support was added to the ChromeDriver class.
See below the code that opens the Google home page on multiple download and upload speeds:
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.Command;
import org.openqa.selenium.remote.CommandExecutor;
import org.openqa.selenium.remote.Response;
import org.testng.annotations.DataProvider;
public class TestClass {
//data provider for the connection's download and upload throughput
@DataProvider(name = "test1")
public Object[][] networkConditions() {
return new Object[][] {
{ 5000 , 5000 },
{ 10000, 7000 },
{ 15000, 9000 },
{ 20000, 10000 },
{ 23000, 11000 },
{ 30000, 15000 },
{ 40000, 20000 },
{ 50000, 20000 },
{ 75000, 20000 },
{ 100000, 20000 },
{ 0, 0 },
};
}
@Test(dataProvider = "networkConditions")
public void test(int downloadThroughput, int uploadThroughput)
throws IOException {
System.setProperty("webdriver.chrome.driver",
"c:/selenium/chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
if (downloadThroughput > 0 && uploadThroughput > 0) {
CommandExecutor executor = driver.getCommandExecutor();
Map map = new HashMap();
map.put("offline", false);
map.put("latency", 5);
map.put("download_throughput", downloadThroughput);
map.put("upload_throughput", uploadThroughput);
Response response = executor.execute(
new Command(driver.getSessionId(),
"setNetworkConditions",
ImmutableMap.of("network_conditions",
ImmutableMap.copyOf(map))));
}
driver.get("http://google.com");
driver.quit();
}
}
The code should be easy to follow.
A hashmap is created with the network conditions to be used for the browser.
The driver gets a command executor and uses it to execute a command on the current session to set the network conditions based on the hash map.
These are the results of executing the code:
download: 5000 , upload: 5000 , finished in 87221 ms
download: 10000 , upload: 7000 , finished in 46126 ms
download: 15000 , upload: 9000 , finished in 32165 ms
download: 20000 , upload: 10000 , finished in 25703 ms
download: 23000 , upload: 11000 , finished in 22966 ms
download: 30000 , upload: 15000 , finished in 19065 ms
download: 40000 , upload: 20000 , finished in 15008 ms
download: 50000 , upload: 20000 , finished in 13116 ms
download: 75000 , upload: 20000 , finished in 11031 ms
download: 100000 , upload: 20000 , finished in 9463 ms
download: 0 , upload: 0 , finished in 5874 ms
If the download and upload are 0, the code is executed with no network conditions specified.
In all other cases, a download and upload throughput is being used.
Very Informative
LikeLike
Hi,
Nice article. I am running into an issue where the error I am getting is “org.openqa.selenium.UnsupportedCommandException:
setNetworkConditions”. Any idea how to resolve this?.
LikeLike
I guess one of the. You are
not using ChromeDriver / old version of Chrome or Driver / just some typo
LikeLike
Hey, did you manage to figure it our? am getting the same exception.
LikeLike
A nice example of how to use this undocumented Chrome stuff. Thanks a lot 🙂
LikeLike