Edge specific functionality
Microsoft Edge is implemented with Chromium, with the earliest supported version of v79. Similar to Chrome, the major version number of edgedriver must match the major version of the Edge browser.
Options
Capabilities common to all browsers are described on the Options page.
Capabilities unique to Chromium are documented at Google’s page for Capabilities & ChromeOptions
Starting an Edge session with basic defined options looks like this:
EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options);
/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
options = get_default_edge_options() driver = webdriver.Edge(options=options)
/examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
var options = new EdgeOptions(); driver = new EdgeDriver(options);
/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs
using System; using System.IO; using System.Linq; using System.Text.RegularExpressions; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Edge; namespace SeleniumDocs.Browsers { [TestClass] public class EdgeTest { private EdgeDriver driver; private string _logLocation; [TestCleanup] public void Cleanup() { if (_logLocation != null && File.Exists(_logLocation)) { File.Delete(_logLocation); } driver.Quit(); } [TestMethod] public void BasicOptions() { var options = new EdgeOptions(); driver = new EdgeDriver(options); } [TestMethod] public void Arguments() { var options = new EdgeOptions(); options.AddArgument("--start-maximized"); driver = new EdgeDriver(options); } [TestMethod] public void SetBrowserLocation() { var options = new EdgeOptions(); options.BinaryLocation = GetEdgeLocation(); driver = new EdgeDriver(options); } [TestMethod] public void InstallExtension() { var options = new EdgeOptions(); var baseDir = AppDomain.CurrentDomain.BaseDirectory; var extensionFilePath = Path.Combine(baseDir, "../../../Extensions/webextensions-selenium-example.crx"); options.AddExtension(extensionFilePath); driver = new EdgeDriver(options); driver.Url = "https://www.selenium.dev/selenium/web/blank.html"; IWebElement injected = driver.FindElement(By.Id("webextensions-selenium-example")); Assert.AreEqual("Content injected by webextensions-selenium-example", injected.Text); } [TestMethod] public void ExcludeSwitch() { var options = new EdgeOptions(); options.AddExcludedArgument("disable-popup-blocking"); driver = new EdgeDriver(options); } [TestMethod] public void LogsToFile() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("Starting Microsoft Edge WebDriver"))); } [TestMethod] [Ignore("Not implemented")] public void LogsToConsole() { var stringWriter = new StringWriter(); var originalOutput = Console.Out; Console.SetOut(stringWriter); var service = EdgeDriverService.CreateDefaultService(); //service.LogToConsole = true; driver = new EdgeDriver(service); Assert.IsTrue(stringWriter.ToString().Contains("Starting Microsoft Edge WebDriver")); Console.SetOut(originalOutput); stringWriter.Dispose(); } [TestMethod] [Ignore("Not implemented")] public void LogsLevel() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); // service.LogLevel = ChromiumDriverLogLevel.Debug driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("[DEBUG]:"))); } [TestMethod] [Ignore("Not implemented")] public void ConfigureDriverLogs() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.EnableAppendLog = true; // service.readableTimeStamp = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d"); Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches("").Count > 0)); } [TestMethod] public void DisableBuildCheck() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.DisableBuildCheck = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains(expected))); } private string GetLogLocation() { if (_logLocation == null || !File.Exists(_logLocation)) { _logLocation = Path.GetTempFileName(); } return _logLocation; } private static string GetEdgeLocation() { var options = new EdgeOptions { BrowserVersion = "stable" }; return new DriverFinder(options).GetBrowserPath(); } } }
options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options
/examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
let options = new edge.Options(); driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options) .build();
/examples/javascript/test/getting_started/openEdgeTest.spec.js
const {Browser, Builder} = require('selenium-webdriver'); const edge = require('selenium-webdriver/edge'); describe('Open Edge', function () { let driver; before(async function () { let options = new edge.Options(); driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options) .build(); }); after(async () => await driver.quit()); it('Basic Edge test', async function () { await driver.get('https://www.selenium.dev/selenium/web/blank.html'); }); });
Arguments
The args
parameter is for a list of command line switches to be used when starting the browser. There are two excellent resources for investigating these arguments:
Commonly used args include --start-maximized
, --headless=new
and --user-data-dir=...
Add an argument to options:
options.addArguments("--start-maximized");
/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
options.add_argument("--start-maximized")
/examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
options.AddArgument("--start-maximized");
/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs
using System; using System.IO; using System.Linq; using System.Text.RegularExpressions; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Edge; namespace SeleniumDocs.Browsers { [TestClass] public class EdgeTest { private EdgeDriver driver; private string _logLocation; [TestCleanup] public void Cleanup() { if (_logLocation != null && File.Exists(_logLocation)) { File.Delete(_logLocation); } driver.Quit(); } [TestMethod] public void BasicOptions() { var options = new EdgeOptions(); driver = new EdgeDriver(options); } [TestMethod] public void Arguments() { var options = new EdgeOptions(); options.AddArgument("--start-maximized"); driver = new EdgeDriver(options); } [TestMethod] public void SetBrowserLocation() { var options = new EdgeOptions(); options.BinaryLocation = GetEdgeLocation(); driver = new EdgeDriver(options); } [TestMethod] public void InstallExtension() { var options = new EdgeOptions(); var baseDir = AppDomain.CurrentDomain.BaseDirectory; var extensionFilePath = Path.Combine(baseDir, "../../../Extensions/webextensions-selenium-example.crx"); options.AddExtension(extensionFilePath); driver = new EdgeDriver(options); driver.Url = "https://www.selenium.dev/selenium/web/blank.html"; IWebElement injected = driver.FindElement(By.Id("webextensions-selenium-example")); Assert.AreEqual("Content injected by webextensions-selenium-example", injected.Text); } [TestMethod] public void ExcludeSwitch() { var options = new EdgeOptions(); options.AddExcludedArgument("disable-popup-blocking"); driver = new EdgeDriver(options); } [TestMethod] public void LogsToFile() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("Starting Microsoft Edge WebDriver"))); } [TestMethod] [Ignore("Not implemented")] public void LogsToConsole() { var stringWriter = new StringWriter(); var originalOutput = Console.Out; Console.SetOut(stringWriter); var service = EdgeDriverService.CreateDefaultService(); //service.LogToConsole = true; driver = new EdgeDriver(service); Assert.IsTrue(stringWriter.ToString().Contains("Starting Microsoft Edge WebDriver")); Console.SetOut(originalOutput); stringWriter.Dispose(); } [TestMethod] [Ignore("Not implemented")] public void LogsLevel() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); // service.LogLevel = ChromiumDriverLogLevel.Debug driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("[DEBUG]:"))); } [TestMethod] [Ignore("Not implemented")] public void ConfigureDriverLogs() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.EnableAppendLog = true; // service.readableTimeStamp = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d"); Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches("").Count > 0)); } [TestMethod] public void DisableBuildCheck() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.DisableBuildCheck = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains(expected))); } private string GetLogLocation() { if (_logLocation == null || !File.Exists(_logLocation)) { _logLocation = Path.GetTempFileName(); } return _logLocation; } private static string GetEdgeLocation() { var options = new EdgeOptions { BrowserVersion = "stable" }; return new DriverFinder(options).GetBrowserPath(); } } }
options.args << '--start-maximized'
/examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
.setEdgeOptions(options.addArguments('--headless=new'))
/examples/javascript/test/browser/edgeSpecificCaps.spec.js
const {Browser, By, Builder } = require('selenium-webdriver'); const edge = require('selenium-webdriver/edge'); const options = new edge.Options(); const assert = require("assert"); describe('Should be able to Test Command line arguments', function () { it('headless', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.addArguments('--headless=new')) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('exclude switches', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.excludeSwitches('enable-automation')) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('Keep browser open - set detach to true ', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.detachDriver(true)) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); // As tests runs in ci, quitting the driver instance to avoid any failures await driver.quit(); }); it('Basic edge test', async function () { const Options = new edge.Options(); let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(Options) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('Add Extension', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx'])) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); let injected = await driver.findElement(By.id('webextensions-selenium-example')); assert.equal(await injected.getText(), `Content injected by webextensions-selenium-example`) await driver.quit(); }); });
Start browser in a specified location
The binary
parameter takes the path of an alternate location of browser to use. With this parameter you can use chromedriver to drive various Chromium based browsers.
Add a browser location to options:
options.setBinary(getEdgeLocation());
/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
options.binary_location = edge_bin
/examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
options.BinaryLocation = GetEdgeLocation();
/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs
using System; using System.IO; using System.Linq; using System.Text.RegularExpressions; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Edge; namespace SeleniumDocs.Browsers { [TestClass] public class EdgeTest { private EdgeDriver driver; private string _logLocation; [TestCleanup] public void Cleanup() { if (_logLocation != null && File.Exists(_logLocation)) { File.Delete(_logLocation); } driver.Quit(); } [TestMethod] public void BasicOptions() { var options = new EdgeOptions(); driver = new EdgeDriver(options); } [TestMethod] public void Arguments() { var options = new EdgeOptions(); options.AddArgument("--start-maximized"); driver = new EdgeDriver(options); } [TestMethod] public void SetBrowserLocation() { var options = new EdgeOptions(); options.BinaryLocation = GetEdgeLocation(); driver = new EdgeDriver(options); } [TestMethod] public void InstallExtension() { var options = new EdgeOptions(); var baseDir = AppDomain.CurrentDomain.BaseDirectory; var extensionFilePath = Path.Combine(baseDir, "../../../Extensions/webextensions-selenium-example.crx"); options.AddExtension(extensionFilePath); driver = new EdgeDriver(options); driver.Url = "https://www.selenium.dev/selenium/web/blank.html"; IWebElement injected = driver.FindElement(By.Id("webextensions-selenium-example")); Assert.AreEqual("Content injected by webextensions-selenium-example", injected.Text); } [TestMethod] public void ExcludeSwitch() { var options = new EdgeOptions(); options.AddExcludedArgument("disable-popup-blocking"); driver = new EdgeDriver(options); } [TestMethod] public void LogsToFile() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("Starting Microsoft Edge WebDriver"))); } [TestMethod] [Ignore("Not implemented")] public void LogsToConsole() { var stringWriter = new StringWriter(); var originalOutput = Console.Out; Console.SetOut(stringWriter); var service = EdgeDriverService.CreateDefaultService(); //service.LogToConsole = true; driver = new EdgeDriver(service); Assert.IsTrue(stringWriter.ToString().Contains("Starting Microsoft Edge WebDriver")); Console.SetOut(originalOutput); stringWriter.Dispose(); } [TestMethod] [Ignore("Not implemented")] public void LogsLevel() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); // service.LogLevel = ChromiumDriverLogLevel.Debug driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("[DEBUG]:"))); } [TestMethod] [Ignore("Not implemented")] public void ConfigureDriverLogs() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.EnableAppendLog = true; // service.readableTimeStamp = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d"); Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches("").Count > 0)); } [TestMethod] public void DisableBuildCheck() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.DisableBuildCheck = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains(expected))); } private string GetLogLocation() { if (_logLocation == null || !File.Exists(_logLocation)) { _logLocation = Path.GetTempFileName(); } return _logLocation; } private static string GetEdgeLocation() { var options = new EdgeOptions { BrowserVersion = "stable" }; return new DriverFinder(options).GetBrowserPath(); } } }
options.binary = edge_location
/examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
Add extensions
The extensions
parameter accepts crx files. As for unpacked directories, please use the load-extension
argument instead, as mentioned in this post.
Add an extension to options:
options.addExtensions(extensionFilePath);
/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
options.add_extension(extension_file_path)
/examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
options.AddExtension(extensionFilePath);
/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs
using System; using System.IO; using System.Linq; using System.Text.RegularExpressions; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Edge; namespace SeleniumDocs.Browsers { [TestClass] public class EdgeTest { private EdgeDriver driver; private string _logLocation; [TestCleanup] public void Cleanup() { if (_logLocation != null && File.Exists(_logLocation)) { File.Delete(_logLocation); } driver.Quit(); } [TestMethod] public void BasicOptions() { var options = new EdgeOptions(); driver = new EdgeDriver(options); } [TestMethod] public void Arguments() { var options = new EdgeOptions(); options.AddArgument("--start-maximized"); driver = new EdgeDriver(options); } [TestMethod] public void SetBrowserLocation() { var options = new EdgeOptions(); options.BinaryLocation = GetEdgeLocation(); driver = new EdgeDriver(options); } [TestMethod] public void InstallExtension() { var options = new EdgeOptions(); var baseDir = AppDomain.CurrentDomain.BaseDirectory; var extensionFilePath = Path.Combine(baseDir, "../../../Extensions/webextensions-selenium-example.crx"); options.AddExtension(extensionFilePath); driver = new EdgeDriver(options); driver.Url = "https://www.selenium.dev/selenium/web/blank.html"; IWebElement injected = driver.FindElement(By.Id("webextensions-selenium-example")); Assert.AreEqual("Content injected by webextensions-selenium-example", injected.Text); } [TestMethod] public void ExcludeSwitch() { var options = new EdgeOptions(); options.AddExcludedArgument("disable-popup-blocking"); driver = new EdgeDriver(options); } [TestMethod] public void LogsToFile() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("Starting Microsoft Edge WebDriver"))); } [TestMethod] [Ignore("Not implemented")] public void LogsToConsole() { var stringWriter = new StringWriter(); var originalOutput = Console.Out; Console.SetOut(stringWriter); var service = EdgeDriverService.CreateDefaultService(); //service.LogToConsole = true; driver = new EdgeDriver(service); Assert.IsTrue(stringWriter.ToString().Contains("Starting Microsoft Edge WebDriver")); Console.SetOut(originalOutput); stringWriter.Dispose(); } [TestMethod] [Ignore("Not implemented")] public void LogsLevel() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); // service.LogLevel = ChromiumDriverLogLevel.Debug driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("[DEBUG]:"))); } [TestMethod] [Ignore("Not implemented")] public void ConfigureDriverLogs() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.EnableAppendLog = true; // service.readableTimeStamp = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d"); Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches("").Count > 0)); } [TestMethod] public void DisableBuildCheck() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.DisableBuildCheck = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains(expected))); } private string GetLogLocation() { if (_logLocation == null || !File.Exists(_logLocation)) { _logLocation = Path.GetTempFileName(); } return _logLocation; } private static string GetEdgeLocation() { var options = new EdgeOptions { BrowserVersion = "stable" }; return new DriverFinder(options).GetBrowserPath(); } } }
options.add_extension(extension_file_path)
/examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
.setEdgeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx']))
/examples/javascript/test/browser/edgeSpecificCaps.spec.js
const {Browser, By, Builder } = require('selenium-webdriver'); const edge = require('selenium-webdriver/edge'); const options = new edge.Options(); const assert = require("assert"); describe('Should be able to Test Command line arguments', function () { it('headless', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.addArguments('--headless=new')) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('exclude switches', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.excludeSwitches('enable-automation')) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('Keep browser open - set detach to true ', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.detachDriver(true)) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); // As tests runs in ci, quitting the driver instance to avoid any failures await driver.quit(); }); it('Basic edge test', async function () { const Options = new edge.Options(); let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(Options) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('Add Extension', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx'])) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); let injected = await driver.findElement(By.id('webextensions-selenium-example')); assert.equal(await injected.getText(), `Content injected by webextensions-selenium-example`) await driver.quit(); }); });
Keeping browser open
Setting the detach
parameter to true will keep the browser open after the process has ended, so long as the quit command is not sent to the driver.
Note: This is already the default behavior in Java.
options.add_experimental_option("detach", True)
/examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
Note: This is already the default behavior in .NET.
options.detach = true
/examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
.setEdgeOptions(options.detachDriver(true))
/examples/javascript/test/browser/edgeSpecificCaps.spec.js
const {Browser, By, Builder } = require('selenium-webdriver'); const edge = require('selenium-webdriver/edge'); const options = new edge.Options(); const assert = require("assert"); describe('Should be able to Test Command line arguments', function () { it('headless', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.addArguments('--headless=new')) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('exclude switches', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.excludeSwitches('enable-automation')) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('Keep browser open - set detach to true ', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.detachDriver(true)) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); // As tests runs in ci, quitting the driver instance to avoid any failures await driver.quit(); }); it('Basic edge test', async function () { const Options = new edge.Options(); let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(Options) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('Add Extension', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx'])) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); let injected = await driver.findElement(By.id('webextensions-selenium-example')); assert.equal(await injected.getText(), `Content injected by webextensions-selenium-example`) await driver.quit(); }); });
Excluding arguments
MSEdgedriver has several default arguments it uses to start the browser. If you do not want those arguments added, pass them into excludeSwitches
. A common example is to turn the popup blocker back on. A full list of default arguments can be parsed from the Chromium Source Code
Set excluded arguments on options:
options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking"));
/examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
options.add_experimental_option('excludeSwitches', ['disable-popup-blocking'])
/examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
options.AddExcludedArgument("disable-popup-blocking");
/examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs
using System; using System.IO; using System.Linq; using System.Text.RegularExpressions; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Edge; namespace SeleniumDocs.Browsers { [TestClass] public class EdgeTest { private EdgeDriver driver; private string _logLocation; [TestCleanup] public void Cleanup() { if (_logLocation != null && File.Exists(_logLocation)) { File.Delete(_logLocation); } driver.Quit(); } [TestMethod] public void BasicOptions() { var options = new EdgeOptions(); driver = new EdgeDriver(options); } [TestMethod] public void Arguments() { var options = new EdgeOptions(); options.AddArgument("--start-maximized"); driver = new EdgeDriver(options); } [TestMethod] public void SetBrowserLocation() { var options = new EdgeOptions(); options.BinaryLocation = GetEdgeLocation(); driver = new EdgeDriver(options); } [TestMethod] public void InstallExtension() { var options = new EdgeOptions(); var baseDir = AppDomain.CurrentDomain.BaseDirectory; var extensionFilePath = Path.Combine(baseDir, "../../../Extensions/webextensions-selenium-example.crx"); options.AddExtension(extensionFilePath); driver = new EdgeDriver(options); driver.Url = "https://www.selenium.dev/selenium/web/blank.html"; IWebElement injected = driver.FindElement(By.Id("webextensions-selenium-example")); Assert.AreEqual("Content injected by webextensions-selenium-example", injected.Text); } [TestMethod] public void ExcludeSwitch() { var options = new EdgeOptions(); options.AddExcludedArgument("disable-popup-blocking"); driver = new EdgeDriver(options); } [TestMethod] public void LogsToFile() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("Starting Microsoft Edge WebDriver"))); } [TestMethod] [Ignore("Not implemented")] public void LogsToConsole() { var stringWriter = new StringWriter(); var originalOutput = Console.Out; Console.SetOut(stringWriter); var service = EdgeDriverService.CreateDefaultService(); //service.LogToConsole = true; driver = new EdgeDriver(service); Assert.IsTrue(stringWriter.ToString().Contains("Starting Microsoft Edge WebDriver")); Console.SetOut(originalOutput); stringWriter.Dispose(); } [TestMethod] [Ignore("Not implemented")] public void LogsLevel() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); // service.LogLevel = ChromiumDriverLogLevel.Debug driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("[DEBUG]:"))); } [TestMethod] [Ignore("Not implemented")] public void ConfigureDriverLogs() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.EnableAppendLog = true; // service.readableTimeStamp = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d"); Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches("").Count > 0)); } [TestMethod] public void DisableBuildCheck() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.DisableBuildCheck = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains(expected))); } private string GetLogLocation() { if (_logLocation == null || !File.Exists(_logLocation)) { _logLocation = Path.GetTempFileName(); } return _logLocation; } private static string GetEdgeLocation() { var options = new EdgeOptions { BrowserVersion = "stable" }; return new DriverFinder(options).GetBrowserPath(); } } }
options.exclude_switches << 'disable-popup-blocking'
/examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
.setEdgeOptions(options.excludeSwitches('enable-automation'))
/examples/javascript/test/browser/edgeSpecificCaps.spec.js
const {Browser, By, Builder } = require('selenium-webdriver'); const edge = require('selenium-webdriver/edge'); const options = new edge.Options(); const assert = require("assert"); describe('Should be able to Test Command line arguments', function () { it('headless', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.addArguments('--headless=new')) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('exclude switches', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.excludeSwitches('enable-automation')) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('Keep browser open - set detach to true ', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.detachDriver(true)) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); // As tests runs in ci, quitting the driver instance to avoid any failures await driver.quit(); }); it('Basic edge test', async function () { const Options = new edge.Options(); let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(Options) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); await driver.quit(); }); it('Add Extension', async function () { let driver = new Builder() .forBrowser(Browser.EDGE) .setEdgeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx'])) .build(); await driver.get('https://www.selenium.dev/selenium/web/blank.html'); let injected = await driver.findElement(By.id('webextensions-selenium-example')); assert.equal(await injected.getText(), `Content injected by webextensions-selenium-example`) await driver.quit(); }); });
Service
Examples for creating a default Service object, and for setting driver location and port can be found on the Driver Service page.
Log output
Getting driver logs can be helpful for debugging issues. The Service class lets you direct where the logs will go. Logging output is ignored unless the user directs it somewhere.
File output
To change the logging output to save to a specific file:
EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build();
examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
Note: Java also allows setting file output by System Property:
Property key: EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY
Property value: String representing path to log file
service = webdriver.EdgeService(log_output=log_path)
examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
service.LogPath = GetLogLocation();
examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs
using System; using System.IO; using System.Linq; using System.Text.RegularExpressions; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Edge; namespace SeleniumDocs.Browsers { [TestClass] public class EdgeTest { private EdgeDriver driver; private string _logLocation; [TestCleanup] public void Cleanup() { if (_logLocation != null && File.Exists(_logLocation)) { File.Delete(_logLocation); } driver.Quit(); } [TestMethod] public void BasicOptions() { var options = new EdgeOptions(); driver = new EdgeDriver(options); } [TestMethod] public void Arguments() { var options = new EdgeOptions(); options.AddArgument("--start-maximized"); driver = new EdgeDriver(options); } [TestMethod] public void SetBrowserLocation() { var options = new EdgeOptions(); options.BinaryLocation = GetEdgeLocation(); driver = new EdgeDriver(options); } [TestMethod] public void InstallExtension() { var options = new EdgeOptions(); var baseDir = AppDomain.CurrentDomain.BaseDirectory; var extensionFilePath = Path.Combine(baseDir, "../../../Extensions/webextensions-selenium-example.crx"); options.AddExtension(extensionFilePath); driver = new EdgeDriver(options); driver.Url = "https://www.selenium.dev/selenium/web/blank.html"; IWebElement injected = driver.FindElement(By.Id("webextensions-selenium-example")); Assert.AreEqual("Content injected by webextensions-selenium-example", injected.Text); } [TestMethod] public void ExcludeSwitch() { var options = new EdgeOptions(); options.AddExcludedArgument("disable-popup-blocking"); driver = new EdgeDriver(options); } [TestMethod] public void LogsToFile() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("Starting Microsoft Edge WebDriver"))); } [TestMethod] [Ignore("Not implemented")] public void LogsToConsole() { var stringWriter = new StringWriter(); var originalOutput = Console.Out; Console.SetOut(stringWriter); var service = EdgeDriverService.CreateDefaultService(); //service.LogToConsole = true; driver = new EdgeDriver(service); Assert.IsTrue(stringWriter.ToString().Contains("Starting Microsoft Edge WebDriver")); Console.SetOut(originalOutput); stringWriter.Dispose(); } [TestMethod] [Ignore("Not implemented")] public void LogsLevel() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); // service.LogLevel = ChromiumDriverLogLevel.Debug driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("[DEBUG]:"))); } [TestMethod] [Ignore("Not implemented")] public void ConfigureDriverLogs() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.EnableAppendLog = true; // service.readableTimeStamp = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d"); Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches("").Count > 0)); } [TestMethod] public void DisableBuildCheck() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.DisableBuildCheck = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains(expected))); } private string GetLogLocation() { if (_logLocation == null || !File.Exists(_logLocation)) { _logLocation = Path.GetTempFileName(); } return _logLocation; } private static string GetEdgeLocation() { var options = new EdgeOptions { BrowserVersion = "stable" }; return new DriverFinder(options).GetBrowserPath(); } } }
service.log = file_name
examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
Console output
To change the logging output to display in the console as STDOUT:
EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build();
examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
Note: Java also allows setting console output by System Property;
Property key: EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY
Property value: DriverService.LOG_STDOUT
or DriverService.LOG_STDERR
service = webdriver.EdgeService(log_output=subprocess.STDOUT)
examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
$stdout
and $stderr
are both valid values
service.log = $stdout
examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
Log level
There are 6 available log levels: ALL
, DEBUG
, INFO
, WARNING
, SEVERE
, and OFF
. Note that --verbose
is equivalent to --log-level=ALL
and --silent
is equivalent to --log-level=OFF
, so this example is just setting the log level generically:
EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build();
examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
Note: Java also allows setting log level by System Property:
Property key: EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY
Property value: String representation of ChromiumDriverLogLevel
enum
service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path)
examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
service.args << '--log-level=DEBUG'
examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
Log file features
There are 2 features that are only available when logging to a file:
- append log
- readable timestamps
To use them, you need to also explicitly specify the log path and log level. The log output will be managed by the driver, not the process, so minor differences may be seen.
EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();
examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
Note: Java also allows toggling these features by System Property:
Property keys: EdgeDriverService.EDGE_DRIVER_APPEND_LOG_PROPERTY
and EdgeDriverService.EDGE_DRIVER_READABLE_TIMESTAMP
Property value: "true"
or "false"
service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path)
examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
service.args << '--append-log' service.args << '--readable-timestamp'
examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
Disabling build check
Edge browser and msedgedriver versions should match, and if they don’t the driver will error. If you disable the build check, you can force the driver to be used with any version of Edge. Note that this is an unsupported feature, and bugs will not be investigated.
EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build();
examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
Note: Java also allows disabling build checks by System Property:
Property key: EdgeDriverService.EDGE_DRIVER_DISABLE_BUILD_CHECK
Property value: "true"
or "false"
service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path)
examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
service.DisableBuildCheck = true;
examples/dotnet/SeleniumDocs/Browsers/EdgeTest.cs
using System; using System.IO; using System.Linq; using System.Text.RegularExpressions; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Edge; namespace SeleniumDocs.Browsers { [TestClass] public class EdgeTest { private EdgeDriver driver; private string _logLocation; [TestCleanup] public void Cleanup() { if (_logLocation != null && File.Exists(_logLocation)) { File.Delete(_logLocation); } driver.Quit(); } [TestMethod] public void BasicOptions() { var options = new EdgeOptions(); driver = new EdgeDriver(options); } [TestMethod] public void Arguments() { var options = new EdgeOptions(); options.AddArgument("--start-maximized"); driver = new EdgeDriver(options); } [TestMethod] public void SetBrowserLocation() { var options = new EdgeOptions(); options.BinaryLocation = GetEdgeLocation(); driver = new EdgeDriver(options); } [TestMethod] public void InstallExtension() { var options = new EdgeOptions(); var baseDir = AppDomain.CurrentDomain.BaseDirectory; var extensionFilePath = Path.Combine(baseDir, "../../../Extensions/webextensions-selenium-example.crx"); options.AddExtension(extensionFilePath); driver = new EdgeDriver(options); driver.Url = "https://www.selenium.dev/selenium/web/blank.html"; IWebElement injected = driver.FindElement(By.Id("webextensions-selenium-example")); Assert.AreEqual("Content injected by webextensions-selenium-example", injected.Text); } [TestMethod] public void ExcludeSwitch() { var options = new EdgeOptions(); options.AddExcludedArgument("disable-popup-blocking"); driver = new EdgeDriver(options); } [TestMethod] public void LogsToFile() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("Starting Microsoft Edge WebDriver"))); } [TestMethod] [Ignore("Not implemented")] public void LogsToConsole() { var stringWriter = new StringWriter(); var originalOutput = Console.Out; Console.SetOut(stringWriter); var service = EdgeDriverService.CreateDefaultService(); //service.LogToConsole = true; driver = new EdgeDriver(service); Assert.IsTrue(stringWriter.ToString().Contains("Starting Microsoft Edge WebDriver")); Console.SetOut(originalOutput); stringWriter.Dispose(); } [TestMethod] [Ignore("Not implemented")] public void LogsLevel() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); // service.LogLevel = ChromiumDriverLogLevel.Debug driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains("[DEBUG]:"))); } [TestMethod] [Ignore("Not implemented")] public void ConfigureDriverLogs() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.EnableAppendLog = true; // service.readableTimeStamp = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var lines = File.ReadLines(GetLogLocation()); var regex = new Regex(@"\[\d\d-\d\d-\d\d\d\d"); Assert.IsNotNull(lines.FirstOrDefault(line => regex.Matches("").Count > 0)); } [TestMethod] public void DisableBuildCheck() { var service = EdgeDriverService.CreateDefaultService(); service.LogPath = GetLogLocation(); service.EnableVerboseLogging = true; service.DisableBuildCheck = true; driver = new EdgeDriver(service); driver.Quit(); // Close the Service log file before reading var expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; var lines = File.ReadLines(GetLogLocation()); Assert.IsNotNull(lines.FirstOrDefault(line => line.Contains(expected))); } private string GetLogLocation() { if (_logLocation == null || !File.Exists(_logLocation)) { _logLocation = Path.GetTempFileName(); } return _logLocation; } private static string GetEdgeLocation() { var options = new EdgeOptions { BrowserVersion = "stable" }; return new DriverFinder(options).GetBrowserPath(); } } }
service.args << '--disable-build-check'
examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
Internet Explorer Mode
Microsoft Edge can be driven in “Internet Explorer Compatibility Mode”, which uses the Internet Explorer Driver classes in conjunction with Microsoft Edge. Read the Internet Explorer page for more details.
Special Features
Some browsers have implemented additional features that are unique to them.
Casting
You can drive Chrome Cast devices with Edge, including sharing tabs
List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); }
examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name)
/examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception
/examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
Network conditions
You can simulate various network conditions.
ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps
examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions)
/examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
@driver.network_conditions = {offline: false, latency: 100, throughput: 200}
/examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
Logs
LogEntries logs = driver.manage().logs().get(LogType.BROWSER);
examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
logs = driver.get_log("browser")
/examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
sleep 1
/examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
Permissions
driver.setPermission("camera", "denied");
examples/java/src/test/java/dev/selenium/browsers/EdgeTest.java
package dev.selenium.browsers; import dev.selenium.BaseTest; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.regex.Pattern; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.chromium.ChromiumDriverLogLevel; import org.openqa.selenium.chromium.ChromiumNetworkConditions; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.edge.EdgeDriverService; import org.openqa.selenium.edge.EdgeOptions; import org.openqa.selenium.logging.*; import org.openqa.selenium.remote.service.DriverFinder; public class EdgeTest extends BaseTest { @AfterEach public void clearProperties() { System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY); System.clearProperty(EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY); } @Test public void basicOptions() { EdgeOptions options = getDefaultEdgeOptions(); driver = new EdgeDriver(options); } @Test public void arguments() { EdgeOptions options = getDefaultEdgeOptions(); options.addArguments("--start-maximized"); driver = new EdgeDriver(options); } @Test public void setBrowserLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBinary(getEdgeLocation()); driver = new EdgeDriver(options); } @Test public void extensionOptions() { EdgeOptions options = getDefaultEdgeOptions(); Path path = Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx"); File extensionFilePath = new File(path.toUri()); options.addExtensions(extensionFilePath); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev/selenium/web/blank.html"); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); Assertions.assertEquals( "Content injected by webextensions-selenium-example", injected.getText()); } @Test public void excludeSwitches() { EdgeOptions options = getDefaultEdgeOptions(); options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking")); driver = new EdgeDriver(options); } @Test public void loggingPreferences() { EdgeOptions options = getDefaultEdgeOptions(); LoggingPreferences logPrefs = new LoggingPreferences(); logPrefs.enable(LogType.PERFORMANCE, Level.ALL); options.setCapability(EdgeOptions.LOGGING_PREFS, logPrefs); driver = new EdgeDriver(options); driver.get("https://www.selenium.dev"); LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE); Assertions.assertFalse(logEntries.getAll().isEmpty()); } @Test public void logsToFile() throws IOException { File logLocation = getTempFile("logsToFile", ".log"); EdgeDriverService service = new EdgeDriverService.Builder().withLogFile(logLocation).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsToConsole() throws IOException { File logLocation = getTempFile("logsToConsole", ".log"); System.setOut(new PrintStream(logLocation)); EdgeDriverService service = new EdgeDriverService.Builder().withLogOutput(System.out).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("Starting Microsoft Edge WebDriver")); } @Test public void logsWithLevel() throws IOException { File logLocation = getTempFile("logsWithLevel", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); EdgeDriverService service = new EdgeDriverService.Builder().withLoglevel(ChromiumDriverLogLevel.DEBUG).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Assertions.assertTrue(fileContent.contains("[DEBUG]:")); } @Test public void configureDriverLogs() throws IOException { File logLocation = getTempFile("configureDriverLogs", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.DEBUG.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); Pattern pattern = Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d", Pattern.CASE_INSENSITIVE); Assertions.assertTrue(pattern.matcher(fileContent).find()); } @Test public void disableBuildChecks() throws IOException { File logLocation = getTempFile("disableBuildChecks", ".log"); System.setProperty(EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY, logLocation.getAbsolutePath()); System.setProperty( EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY, ChromiumDriverLogLevel.WARNING.toString()); EdgeDriverService service = new EdgeDriverService.Builder().withBuildCheckDisabled(true).build(); driver = new EdgeDriver(service); String fileContent = new String(Files.readAllBytes(logLocation.toPath())); String expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check"; Assertions.assertTrue(fileContent.contains(expected)); } private File getEdgeLocation() { EdgeOptions options = getDefaultEdgeOptions(); options.setBrowserVersion("stable"); DriverFinder finder = new DriverFinder(EdgeDriverService.createDefaultService(), options); return new File(finder.getBrowserPath()); } @Test public void setPermissions() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev"); driver.setPermission("camera", "denied"); // Verify the permission state is 'denied' String script = "return navigator.permissions.query({ name: 'camera' })" + " .then(permissionStatus => permissionStatus.state);"; String permissionState = (String) driver.executeScript(script); Assertions.assertEquals("denied", permissionState); driver.quit(); } @Test public void setNetworkConditions() { driver = new EdgeDriver(); ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions(); networkConditions.setOffline(false); networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps networkConditions.setUploadThroughput(2000 * 1024 / 8); // 2000 kbps ((EdgeDriver) driver).setNetworkConditions(networkConditions); driver.get("https://www.selenium.dev"); // Assert the network conditions are set as expected ChromiumNetworkConditions actualConditions = ((EdgeDriver) driver).getNetworkConditions(); Assertions.assertAll( () -> Assertions.assertEquals(networkConditions.getOffline(), actualConditions.getOffline()), () -> Assertions.assertEquals(networkConditions.getLatency(), actualConditions.getLatency()), () -> Assertions.assertEquals(networkConditions.getDownloadThroughput(), actualConditions.getDownloadThroughput()), () -> Assertions.assertEquals(networkConditions.getUploadThroughput(), actualConditions.getUploadThroughput()) ); ((EdgeDriver) driver).deleteNetworkConditions(); driver.quit(); } @Test public void castFeatures() { EdgeDriver driver = new EdgeDriver(); List<Map<String, String>> sinks = driver.getCastSinks(); if (!sinks.isEmpty()) { String sinkName = sinks.get(0).get("name"); driver.startTabMirroring(sinkName); driver.stopCasting(sinkName); } driver.quit(); } @Test public void getBrowserLogs() { EdgeDriver driver = new EdgeDriver(); driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html"); WebElement consoleLogButton = driver.findElement(By.id("consoleError")); consoleLogButton.click(); LogEntries logs = driver.manage().logs().get(LogType.BROWSER); // Assert that at least one log contains the expected message boolean logFound = false; for (LogEntry log : logs) { if (log.getMessage().contains("I am console error")) { logFound = true; break; } } Assertions.assertTrue(logFound, "No matching log message found."); driver.quit(); } }
driver.set_permissions('camera', 'denied')
/examples/python/tests/browsers/test_edge.py
import os import re import subprocess import pytest from selenium import webdriver from selenium.webdriver.common.by import By def test_basic_options(): options = get_default_edge_options() driver = webdriver.Edge(options=options) driver.quit() def test_args(): options = get_default_edge_options() options.add_argument("--start-maximized") driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_set_browser_location(edge_bin): options = get_default_edge_options() options.binary_location = edge_bin driver = webdriver.Edge(options=options) driver.quit() def test_add_extension(): options = get_default_edge_options() extension_file_path = os.path.abspath("tests/extensions/webextensions-selenium-example.crx") options.add_extension(extension_file_path) driver = webdriver.Edge(options=options) driver.get("https://www.selenium.dev/selenium/web/blank.html") driver.quit() def test_keep_browser_open(): options = get_default_edge_options() options.add_experimental_option("detach", True) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_exclude_switches(): options = get_default_edge_options() options.add_experimental_option('excludeSwitches', ['disable-popup-blocking']) driver = webdriver.Edge(options=options) driver.get('http://selenium.dev') driver.quit() def test_log_to_file(log_path): service = webdriver.EdgeService(log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as fp: assert "Starting Microsoft Edge WebDriver" in fp.readline() driver.quit() def test_log_to_stdout(capfd): service = webdriver.EdgeService(log_output=subprocess.STDOUT) driver = webdriver.Edge(service=service) out, err = capfd.readouterr() assert "Starting Microsoft Edge WebDriver" in out driver.quit() def test_log_level(log_path): service = webdriver.EdgeService(service_args=['--log-level=DEBUG'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert '[DEBUG]' in f.read() driver.quit() def test_log_features(log_path): service = webdriver.EdgeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path) driver = webdriver.Edge(service=service) with open(log_path, 'r') as f: assert re.match(r"\[\d\d-\d\d-\d\d\d\d", f.read()) driver.quit() def test_build_checks(log_path): service = webdriver.EdgeService(service_args=['--disable-build-check'], log_output=log_path) driver = webdriver.Edge(service=service) expected = "[WARNING]: You are using an unsupported command-line switch: --disable-build-check" with open(log_path, 'r') as f: assert expected in f.read() driver.quit() def test_set_network_conditions(): driver = webdriver.Edge() network_conditions = { "offline": False, "latency": 20, # 20 ms of latency "download_throughput": 2000 * 1024 / 8, # 2000 kbps "upload_throughput": 2000 * 1024 / 8, # 2000 kbps } driver.set_network_conditions(**network_conditions) driver.get("https://www.selenium.dev") # check whether the network conditions are set assert driver.get_network_conditions() == network_conditions driver.quit() def test_set_permissions(): driver = webdriver.Edge() driver.get('https://www.selenium.dev') driver.set_permissions('camera', 'denied') assert get_permission_state(driver, 'camera') == 'denied' driver.quit() def get_permission_state(driver, name): """Helper function to query the permission state.""" script = """ const callback = arguments[arguments.length - 1]; navigator.permissions.query({name: arguments[0]}).then(permissionStatus => { callback(permissionStatus.state); }); """ return driver.execute_async_script(script, name) def test_cast_features(): driver = webdriver.Edge() try: sinks = driver.get_sinks() if sinks: sink_name = sinks[0]['name'] driver.start_tab_mirroring(sink_name) driver.stop_casting(sink_name) else: pytest.skip("No available Cast sinks to test with.") finally: driver.quit() def test_get_browser_logs(): driver = webdriver.Edge() driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html") driver.find_element(By.ID, "consoleError").click() logs = driver.get_log("browser") # Assert that at least one log contains the expected message assert any("I am console error" in log['message'] for log in logs), "No matching log message found." driver.quit() def get_default_edge_options(): options = webdriver.EdgeOptions() options.add_argument("--no-sandbox") return options
@driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied')
/examples/ruby/spec/browsers/edge_spec.rb
# frozen_string_literal: true require 'spec_helper' RSpec.describe 'Edge' do describe 'Options' do let(:edge_location) { driver_finder && ENV.fetch('EDGE_BIN', nil) } it 'basic options' do options = Selenium::WebDriver::Options.edge @driver = Selenium::WebDriver.for :edge, options: options end it 'add arguments' do options = Selenium::WebDriver::Options.edge options.args << '--start-maximized' @driver = Selenium::WebDriver.for :edge, options: options end it 'sets location of binary' do options = Selenium::WebDriver::Options.edge options.binary = edge_location @driver = Selenium::WebDriver.for :edge, options: options end it 'add extensions' do extension_file_path = File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx', __dir__) options = Selenium::WebDriver::Options.edge options.add_extension(extension_file_path) @driver = Selenium::WebDriver.for :edge, options: options @driver.get('https://www.selenium.dev/selenium/web/blank.html') injected = @driver.find_element(:id, 'webextensions-selenium-example') expect(injected.text).to eq 'Content injected by webextensions-selenium-example' end it 'keeps browser open' do options = Selenium::WebDriver::Options.edge options.detach = true @driver = Selenium::WebDriver.for :edge, options: options end it 'excludes switches' do options = Selenium::WebDriver::Options.edge options.exclude_switches << 'disable-popup-blocking' @driver = Selenium::WebDriver.for :edge, options: options end end describe 'Service' do let(:file_name) { File.expand_path('msedgedriver.log') } after { FileUtils.rm_f(file_name) } it 'logs to file' do service = Selenium::WebDriver::Service.edge service.log = file_name @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).first).to include('Starting Microsoft Edge WebDriver') end it 'logs to console' do service = Selenium::WebDriver::Service.edge service.log = $stdout expect { @driver = Selenium::WebDriver.for :edge, service: service }.to output(/Starting Microsoft Edge WebDriver/).to_stdout_from_any_process end it 'sets log level' do service = Selenium::WebDriver::Service.edge service.log = file_name service.args << '--log-level=DEBUG' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).to eq true end it 'sets log features' do args = ["--log-path=#{file_name}", '--verbose'] service = Selenium::WebDriver::Service.edge(args: args) service.args << '--append-log' service.args << '--readable-timestamp' @driver = Selenium::WebDriver.for :edge, service: service expect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).to eq true end it 'disables build checks' do service = Selenium::WebDriver::Service.edge log: file_name, args: ['--verbose'] service.args << '--disable-build-check' @driver = Selenium::WebDriver.for :edge, service: service warning = /\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/ expect(File.readlines(file_name).grep(warning).any?).to eq true end end describe 'Special Features' do it 'casts' do @driver = Selenium::WebDriver.for :edge sinks = @driver.cast_sinks unless sinks.empty? device_name = sinks.first['name'] @driver.start_cast_tab_mirroring(device_name) expect { @driver.stop_casting(device_name) }.not_to raise_exception end end it 'gets and sets network conditions' do @driver = Selenium::WebDriver.for :edge @driver.network_conditions = {offline: false, latency: 100, throughput: 200} expect(@driver.network_conditions).to eq( 'offline' => false, 'latency' => 100, 'download_throughput' => 200, 'upload_throughput' => 200 ) end it 'gets the browser logs' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' sleep 1 logs = @driver.logs.get(:browser) expect(logs.first.message).to include 'Failed to load resource' end it 'sets permissions' do @driver = Selenium::WebDriver.for :edge @driver.navigate.to 'https://www.selenium.dev/selenium/web/' @driver.add_permission('camera', 'denied') @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt') expect(permission('camera')).to eq('denied') expect(permission('clipboard-read')).to eq('denied') expect(permission('clipboard-write')).to eq('prompt') end end def driver_finder options = Selenium::WebDriver::Options.edge(browser_version: 'stable') service = Selenium::WebDriver::Service.edge finder = Selenium::WebDriver::DriverFinder.new(options, service) ENV['EDGEDRIVER_BIN'] = finder.driver_path ENV['EDGE_BIN'] = finder.browser_path end def permission(name) @driver.execute_async_script('callback = arguments[arguments.length - 1];' \ 'callback(navigator.permissions.query({name: arguments[0]}));', name)['state'] end end
DevTools
See the Chrome DevTools section for more information about using DevTools in Edge