Selenium Chrome Driver provides WebDriver implementation for Google Chrome with Chrome DevTools Protocol support, network conditions simulation, permissions management, media casting capabilities, and Chrome-specific service configuration.
—
Browser permissions management allows control over web API access including camera, microphone, geolocation, notifications, and other browser permissions for comprehensive testing scenarios.
Grant or deny specific browser permissions.
public void setPermission(String name, String value);Parameters:
name (String): Permission name to controlvalue (String): Permission state ("granted", "denied", "prompt")Usage Example:
ChromiumDriver driver = new ChromiumDriver(commandExecutor, capabilities, "chrome");
// Grant camera permission
driver.setPermission("camera", "granted");
// Deny microphone permission
driver.setPermission("microphone", "denied");
// Set geolocation to prompt user
driver.setPermission("geolocation", "prompt");Control access to camera and microphone:
// Grant camera access
driver.setPermission("camera", "granted");
// Grant microphone access
driver.setPermission("microphone", "granted");
// Deny both camera and microphone
driver.setPermission("camera", "denied");
driver.setPermission("microphone", "denied");
// Test media permissions
driver.get("https://webrtc-test-site.com");
// Application can now access camera/microphone based on permissions setControl geolocation API access:
// Grant location access
driver.setPermission("geolocation", "granted");
// Test location-aware application
driver.get("https://maps-application.com");
// Application can access user location
// Deny location access
driver.setPermission("geolocation", "denied");
driver.get("https://maps-application.com");
// Application will be denied location accessControl web notification access:
// Grant notification permission
driver.setPermission("notifications", "granted");
// Test notification functionality
driver.get("https://notification-app.com");
WebElement enableNotificationsBtn = driver.findElement(By.id("enable-notifications"));
enableNotificationsBtn.click();
// Notifications will be allowed without user prompt
// Deny notifications
driver.setPermission("notifications", "denied");Control clipboard API access:
// Grant clipboard read/write access
driver.setPermission("clipboard-read", "granted");
driver.setPermission("clipboard-write", "granted");
// Test clipboard functionality
driver.get("https://clipboard-app.com");
// Application can read from and write to system clipboard
// Deny clipboard access
driver.setPermission("clipboard-read", "denied");
driver.setPermission("clipboard-write", "denied");// Explicit permission granting
driver.setPermission("camera", "granted"); // Always allow
driver.setPermission("microphone", "denied"); // Always deny
driver.setPermission("geolocation", "prompt"); // Ask userpublic void configureMediaTestingPermissions(ChromiumDriver driver) {
// Configure for media testing
driver.setPermission("camera", "granted");
driver.setPermission("microphone", "granted");
driver.setPermission("notifications", "granted");
driver.setPermission("geolocation", "granted");
// Deny potentially disruptive permissions
driver.setPermission("persistent-storage", "denied");
driver.setPermission("background-sync", "denied");
}
public void configureRestrictivePermissions(ChromiumDriver driver) {
// Deny all sensitive permissions
driver.setPermission("camera", "denied");
driver.setPermission("microphone", "denied");
driver.setPermission("geolocation", "denied");
driver.setPermission("notifications", "denied");
driver.setPermission("clipboard-read", "denied");
driver.setPermission("clipboard-write", "denied");
}import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
public class PermissionTesting {
public void testCameraPermissionGranted() {
ChromiumDriver driver = new ChromiumDriver(commandExecutor, capabilities, "chrome");
try {
// Grant camera permission
driver.setPermission("camera", "granted");
// Navigate to video chat application
driver.get("https://videochat-app.com");
// Click button to access camera
WebElement startVideoBtn = driver.findElement(By.id("start-video"));
startVideoBtn.click();
// Verify camera access works (no permission dialog)
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement videoElement = wait.until(
ExpectedConditions.presenceOfElementLocated(By.tagName("video"))
);
// Verify video stream is active
assertTrue(videoElement.isDisplayed());
} finally {
driver.quit();
}
}
public void testCameraPermissionDenied() {
ChromiumDriver driver = new ChromiumDriver(commandExecutor, capabilities, "chrome");
try {
// Deny camera permission
driver.setPermission("camera", "denied");
// Navigate to video chat application
driver.get("https://videochat-app.com");
// Click button to access camera
WebElement startVideoBtn = driver.findElement(By.id("start-video"));
startVideoBtn.click();
// Verify error message is shown
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
WebElement errorMsg = wait.until(
ExpectedConditions.presenceOfElementLocated(By.className("camera-error"))
);
assertTrue(errorMsg.getText().contains("Camera access denied"));
} finally {
driver.quit();
}
}
}The permissions functionality integrates with ChromiumDriverCommandExecutor:
// Command constant from AddHasPermissions
public static final String SET_PERMISSION = "setPermission";"camera" - Camera access"microphone" - Microphone access"geolocation" - Location services access"notifications" - Web notifications"fullscreen" - Fullscreen API access"clipboard-read" - Read from clipboard"clipboard-write" - Write to clipboard"persistent-storage" - Persistent storage quota"background-sync" - Background synchronization"push-messaging" - Push message reception"accelerometer" - Device motion sensors"gyroscope" - Device orientation sensors"magnetometer" - Device compass sensorspublic void testPermissionGrantFlow() {
ChromiumDriver driver = new ChromiumDriver(commandExecutor, capabilities, "chrome");
// Pre-grant permission to avoid user prompts
driver.setPermission("geolocation", "granted");
driver.get("https://location-app.com");
// Click "Get My Location" button
driver.findElement(By.id("get-location")).click();
// Verify location is obtained without permission dialog
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
WebElement locationDisplay = wait.until(
ExpectedConditions.presenceOfElementLocated(By.id("current-location"))
);
assertFalse(locationDisplay.getText().isEmpty());
}public void testPermissionDenyFlow() {
ChromiumDriver driver = new ChromiumDriver(commandExecutor, capabilities, "chrome");
// Pre-deny permission
driver.setPermission("notifications", "denied");
driver.get("https://news-app.com");
// Click "Enable Notifications" button
driver.findElement(By.id("enable-notifications")).click();
// Verify appropriate error handling
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));
WebElement errorMessage = wait.until(
ExpectedConditions.presenceOfElementLocated(By.className("permission-denied"))
);
assertTrue(errorMessage.getText().contains("Notifications are blocked"));
}Permission operations may encounter these exceptions:
try {
driver.setPermission("camera", "granted");
} catch (IllegalArgumentException e) {
System.err.println("Invalid permission parameters: " + e.getMessage());
} catch (WebDriverException e) {
System.err.println("Failed to set permission: " + e.getMessage());
}public void testDynamicPermissionChanges() {
ChromiumDriver driver = new ChromiumDriver(commandExecutor, capabilities, "chrome");
// Start with permission granted
driver.setPermission("camera", "granted");
driver.get("https://video-app.com");
// Verify camera works
driver.findElement(By.id("start-camera")).click();
// ... verify camera functionality
// Dynamically revoke permission
driver.setPermission("camera", "denied");
// Verify application handles permission revocation
driver.findElement(By.id("start-camera")).click();
// ... verify error handling
}public class PermissionUtils {
public static void resetAllPermissions(ChromiumDriver driver) {
String[] permissions = {
"camera", "microphone", "geolocation", "notifications",
"clipboard-read", "clipboard-write", "persistent-storage"
};
for (String permission : permissions) {
try {
driver.setPermission(permission, "prompt");
} catch (Exception e) {
System.err.println("Failed to reset permission: " + permission);
}
}
}
public static void grantMediaPermissions(ChromiumDriver driver) {
driver.setPermission("camera", "granted");
driver.setPermission("microphone", "granted");
}
public static void denyAllPermissions(ChromiumDriver driver) {
driver.setPermission("camera", "denied");
driver.setPermission("microphone", "denied");
driver.setPermission("geolocation", "denied");
driver.setPermission("notifications", "denied");
}
}This comprehensive permissions management system enables thorough testing of web applications under various permission scenarios, ensuring robust handling of user privacy controls.
Install with Tessl CLI
npx tessl i tessl/maven-org-seleniumhq-selenium--selenium-chromium-driver