Tune in for the Selenium Community Live scheduled for April 25th, 2025.
Join us!
Chrome specific functionality
These are capabilities and features specific to Google Chrome browsers.
By default, Selenium 4 is compatible with Chrome v75 and greater. Note that the version of
the Chrome browser and the version of chromedriver must match the major version.
Options
Capabilities common to all browsers are described on the Options page.
Starting a Chrome session with basic defined options looks like this:
3639
Show full example
packagedev.selenium.browsers;importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("--start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(2000*1024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
importreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("–start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['–log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['–append-log','–readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['–disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()network_conditions={"offline":False,"latency":20,# 20 ms of latency"download_throughput":20001024/8,# 2000 kbps"upload_throughput":20001024/8,# 2000 kbps}driver.set_network_conditions(**network_conditions)driver.get("https://www.selenium.dev")# check whether the network conditions are setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("–no-sandbox")returnoptions
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/python/tests/browsers/test_chrome.py#L9-L10" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
2932
Show full example
usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Text.RegularExpressions;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.Chrome;namespaceSeleniumDocs.Browsers{ [TestClass]publicclassChromeTest{privateChromeDriverdriver;privatestring_logLocation; [TestCleanup]publicvoidCleanup(){if(_logLocation!=null&&File.Exists(_logLocation)){File.Delete(_logLocation);}driver.Quit();} [TestMethod]publicvoidBasicOptions(){varoptions=newChromeOptions();driver=newChromeDriver(options);} [TestMethod]publicvoidArguments(){varoptions=newChromeOptions();options.AddArgument("--start-maximized");driver=newChromeDriver(options);} [TestMethod]publicvoidSetBrowserLocation(){varoptions=newChromeOptions();options.BinaryLocation=GetChromeLocation();driver=newChromeDriver(options);} [TestMethod]publicvoidInstallExtension(){varoptions=newChromeOptions();varbaseDir=AppDomain.CurrentDomain.BaseDirectory;varextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.crx");options.AddExtension(extensionFilePath);driver=newChromeDriver(options);driver.Url="https://www.selenium.dev/selenium/web/blank.html";IWebElementinjected=driver.FindElement(By.Id("webextensions-selenium-example"));Assert.AreEqual("Content injected by webextensions-selenium-example",injected.Text);} [TestMethod]publicvoidExcludeSwitch(){varoptions=newChromeOptions();options.AddExcludedArgument("disable-popup-blocking");driver=newChromeDriver(options);} [TestMethod]publicvoidLogsToFile(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("Starting ChromeDriver")));} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToConsole(){varstringWriter=newStringWriter();varoriginalOutput=Console.Out;Console.SetOut(stringWriter);varservice=ChromeDriverService.CreateDefaultService();//service.LogToConsole = true;driver=newChromeDriver(service);Assert.IsTrue(stringWriter.ToString().Contains("Starting ChromeDriver"));Console.SetOut(originalOutput);stringWriter.Dispose();} [TestMethod] [Ignore("Not implemented")]publicvoidLogsLevel(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();// service.LogLevel = ChromiumDriverLogLevel.Debug driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("[DEBUG]:")));} [TestMethod] [Ignore("Not implemented")]publicvoidConfigureDriverLogs(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.EnableAppendLog=true;// service.readableTimeStamp = true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());varregex=newRegex(@"\[\d\d-\d\d-\d\d\d\d");Assert.IsNotNull(lines.FirstOrDefault(line=>regex.Matches("").Count>0));} [TestMethod]publicvoidDisableBuildCheck(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.DisableBuildCheck=true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains(expected)));}privatestringGetLogLocation(){if(_logLocation==null||!File.Exists(_logLocation)){_logLocation=Path.GetTempFileName();}return_logLocation;}privatestaticstringGetChromeLocation(){varoptions=newChromeOptions{BrowserVersion="stable"};returnnewDriverFinder(options).GetBrowserPath();}}}
constChrome=require('selenium-webdriver/chrome');const{Browser,Builder}=require("selenium-webdriver");constoptions=newChrome.Options();describe('Should be able to Test Command line arguments',function(){it('headless',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addArguments('--headless=new')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('exclude switches',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.excludeSwitches('enable-automation')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Keep browser open - set detach to true ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.detachDriver(true)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');// As tests runs in ci, quitting the driver instance to avoid any failures
awaitdriver.quit();});xit('Start browser from specified location ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Basic Chrome test',asyncfunction(){constOptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(Options).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Add Extension',asyncfunction(){constoptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx'])).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});});
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:
4446
Show full example
packagedev.selenium.browsers;importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("--start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(2000*1024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
importreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("–start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['–log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['–append-log','–readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['–disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()network_conditions={"offline":False,"latency":20,# 20 ms of latency"download_throughput":20001024/8,# 2000 kbps"upload_throughput":20001024/8,# 2000 kbps}driver.set_network_conditions(**network_conditions)driver.get("https://www.selenium.dev")# check whether the network conditions are setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("–no-sandbox")returnoptions
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/python/tests/browsers/test_chrome.py#L18" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
3840
Show full example
usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Text.RegularExpressions;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.Chrome;namespaceSeleniumDocs.Browsers{ [TestClass]publicclassChromeTest{privateChromeDriverdriver;privatestring_logLocation; [TestCleanup]publicvoidCleanup(){if(_logLocation!=null&&File.Exists(_logLocation)){File.Delete(_logLocation);}driver.Quit();} [TestMethod]publicvoidBasicOptions(){varoptions=newChromeOptions();driver=newChromeDriver(options);} [TestMethod]publicvoidArguments(){varoptions=newChromeOptions();options.AddArgument("--start-maximized");driver=newChromeDriver(options);} [TestMethod]publicvoidSetBrowserLocation(){varoptions=newChromeOptions();options.BinaryLocation=GetChromeLocation();driver=newChromeDriver(options);} [TestMethod]publicvoidInstallExtension(){varoptions=newChromeOptions();varbaseDir=AppDomain.CurrentDomain.BaseDirectory;varextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.crx");options.AddExtension(extensionFilePath);driver=newChromeDriver(options);driver.Url="https://www.selenium.dev/selenium/web/blank.html";IWebElementinjected=driver.FindElement(By.Id("webextensions-selenium-example"));Assert.AreEqual("Content injected by webextensions-selenium-example",injected.Text);} [TestMethod]publicvoidExcludeSwitch(){varoptions=newChromeOptions();options.AddExcludedArgument("disable-popup-blocking");driver=newChromeDriver(options);} [TestMethod]publicvoidLogsToFile(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("Starting ChromeDriver")));} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToConsole(){varstringWriter=newStringWriter();varoriginalOutput=Console.Out;Console.SetOut(stringWriter);varservice=ChromeDriverService.CreateDefaultService();//service.LogToConsole = true;driver=newChromeDriver(service);Assert.IsTrue(stringWriter.ToString().Contains("Starting ChromeDriver"));Console.SetOut(originalOutput);stringWriter.Dispose();} [TestMethod] [Ignore("Not implemented")]publicvoidLogsLevel(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();// service.LogLevel = ChromiumDriverLogLevel.Debug driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("[DEBUG]:")));} [TestMethod] [Ignore("Not implemented")]publicvoidConfigureDriverLogs(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.EnableAppendLog=true;// service.readableTimeStamp = true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());varregex=newRegex(@"\[\d\d-\d\d-\d\d\d\d");Assert.IsNotNull(lines.FirstOrDefault(line=>regex.Matches("").Count>0));} [TestMethod]publicvoidDisableBuildCheck(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.DisableBuildCheck=true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains(expected)));}privatestringGetLogLocation(){if(_logLocation==null||!File.Exists(_logLocation)){_logLocation=Path.GetTempFileName();}return_logLocation;}privatestaticstringGetChromeLocation(){varoptions=newChromeOptions{BrowserVersion="stable"};returnnewDriverFinder(options).GetBrowserPath();}}}
constChrome=require('selenium-webdriver/chrome');const{Browser,Builder}=require("selenium-webdriver");constoptions=newChrome.Options();describe('Should be able to Test Command line arguments',function(){it('headless',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addArguments('--headless=new')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('exclude switches',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.excludeSwitches('enable-automation')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Keep browser open - set detach to true ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.detachDriver(true)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');// As tests runs in ci, quitting the driver instance to avoid any failures
awaitdriver.quit();});xit('Start browser from specified location ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Basic Chrome test',asyncfunction(){constOptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(Options).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Add Extension',asyncfunction(){constoptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx'])).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});});
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:
5355
Show full example
packagedev.selenium.browsers;importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("--start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(2000*1024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
importreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("–start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['–log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['–append-log','–readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['–disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()network_conditions={"offline":False,"latency":20,# 20 ms of latency"download_throughput":20001024/8,# 2000 kbps"upload_throughput":20001024/8,# 2000 kbps}driver.set_network_conditions(**network_conditions)driver.get("https://www.selenium.dev")# check whether the network conditions are setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("–no-sandbox")returnoptions
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/python/tests/browsers/test_chrome.py#L29" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
4850
Show full example
usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Text.RegularExpressions;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.Chrome;namespaceSeleniumDocs.Browsers{ [TestClass]publicclassChromeTest{privateChromeDriverdriver;privatestring_logLocation; [TestCleanup]publicvoidCleanup(){if(_logLocation!=null&&File.Exists(_logLocation)){File.Delete(_logLocation);}driver.Quit();} [TestMethod]publicvoidBasicOptions(){varoptions=newChromeOptions();driver=newChromeDriver(options);} [TestMethod]publicvoidArguments(){varoptions=newChromeOptions();options.AddArgument("--start-maximized");driver=newChromeDriver(options);} [TestMethod]publicvoidSetBrowserLocation(){varoptions=newChromeOptions();options.BinaryLocation=GetChromeLocation();driver=newChromeDriver(options);} [TestMethod]publicvoidInstallExtension(){varoptions=newChromeOptions();varbaseDir=AppDomain.CurrentDomain.BaseDirectory;varextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.crx");options.AddExtension(extensionFilePath);driver=newChromeDriver(options);driver.Url="https://www.selenium.dev/selenium/web/blank.html";IWebElementinjected=driver.FindElement(By.Id("webextensions-selenium-example"));Assert.AreEqual("Content injected by webextensions-selenium-example",injected.Text);} [TestMethod]publicvoidExcludeSwitch(){varoptions=newChromeOptions();options.AddExcludedArgument("disable-popup-blocking");driver=newChromeDriver(options);} [TestMethod]publicvoidLogsToFile(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("Starting ChromeDriver")));} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToConsole(){varstringWriter=newStringWriter();varoriginalOutput=Console.Out;Console.SetOut(stringWriter);varservice=ChromeDriverService.CreateDefaultService();//service.LogToConsole = true;driver=newChromeDriver(service);Assert.IsTrue(stringWriter.ToString().Contains("Starting ChromeDriver"));Console.SetOut(originalOutput);stringWriter.Dispose();} [TestMethod] [Ignore("Not implemented")]publicvoidLogsLevel(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();// service.LogLevel = ChromiumDriverLogLevel.Debug driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("[DEBUG]:")));} [TestMethod] [Ignore("Not implemented")]publicvoidConfigureDriverLogs(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.EnableAppendLog=true;// service.readableTimeStamp = true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());varregex=newRegex(@"\[\d\d-\d\d-\d\d\d\d");Assert.IsNotNull(lines.FirstOrDefault(line=>regex.Matches("").Count>0));} [TestMethod]publicvoidDisableBuildCheck(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.DisableBuildCheck=true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains(expected)));}privatestringGetLogLocation(){if(_logLocation==null||!File.Exists(_logLocation)){_logLocation=Path.GetTempFileName();}return_logLocation;}privatestaticstringGetChromeLocation(){varoptions=newChromeOptions{BrowserVersion="stable"};returnnewDriverFinder(options).GetBrowserPath();}}}
constChrome=require('selenium-webdriver/chrome');const{Browser,Builder}=require("selenium-webdriver");constoptions=newChrome.Options();describe('Should be able to Test Command line arguments',function(){it('headless',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addArguments('--headless=new')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('exclude switches',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.excludeSwitches('enable-automation')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Keep browser open - set detach to true ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.detachDriver(true)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');// As tests runs in ci, quitting the driver instance to avoid any failures
awaitdriver.quit();});xit('Start browser from specified location ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Basic Chrome test',asyncfunction(){constOptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(Options).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Add Extension',asyncfunction(){constoptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx'])).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});});
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:
6466
Show full example
packagedev.selenium.browsers;importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("--start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(2000*1024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
importreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("–start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['–log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['–append-log','–readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['–disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()network_conditions={"offline":False,"latency":20,# 20 ms of latency"download_throughput":20001024/8,# 2000 kbps"upload_throughput":20001024/8,# 2000 kbps}driver.set_network_conditions(**network_conditions)driver.get("https://www.selenium.dev")# check whether the network conditions are setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("–no-sandbox")returnoptions
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/python/tests/browsers/test_chrome.py#L40" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
6062
Show full example
usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Text.RegularExpressions;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.Chrome;namespaceSeleniumDocs.Browsers{ [TestClass]publicclassChromeTest{privateChromeDriverdriver;privatestring_logLocation; [TestCleanup]publicvoidCleanup(){if(_logLocation!=null&&File.Exists(_logLocation)){File.Delete(_logLocation);}driver.Quit();} [TestMethod]publicvoidBasicOptions(){varoptions=newChromeOptions();driver=newChromeDriver(options);} [TestMethod]publicvoidArguments(){varoptions=newChromeOptions();options.AddArgument("--start-maximized");driver=newChromeDriver(options);} [TestMethod]publicvoidSetBrowserLocation(){varoptions=newChromeOptions();options.BinaryLocation=GetChromeLocation();driver=newChromeDriver(options);} [TestMethod]publicvoidInstallExtension(){varoptions=newChromeOptions();varbaseDir=AppDomain.CurrentDomain.BaseDirectory;varextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.crx");options.AddExtension(extensionFilePath);driver=newChromeDriver(options);driver.Url="https://www.selenium.dev/selenium/web/blank.html";IWebElementinjected=driver.FindElement(By.Id("webextensions-selenium-example"));Assert.AreEqual("Content injected by webextensions-selenium-example",injected.Text);} [TestMethod]publicvoidExcludeSwitch(){varoptions=newChromeOptions();options.AddExcludedArgument("disable-popup-blocking");driver=newChromeDriver(options);} [TestMethod]publicvoidLogsToFile(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("Starting ChromeDriver")));} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToConsole(){varstringWriter=newStringWriter();varoriginalOutput=Console.Out;Console.SetOut(stringWriter);varservice=ChromeDriverService.CreateDefaultService();//service.LogToConsole = true;driver=newChromeDriver(service);Assert.IsTrue(stringWriter.ToString().Contains("Starting ChromeDriver"));Console.SetOut(originalOutput);stringWriter.Dispose();} [TestMethod] [Ignore("Not implemented")]publicvoidLogsLevel(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();// service.LogLevel = ChromiumDriverLogLevel.Debug driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("[DEBUG]:")));} [TestMethod] [Ignore("Not implemented")]publicvoidConfigureDriverLogs(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.EnableAppendLog=true;// service.readableTimeStamp = true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());varregex=newRegex(@"\[\d\d-\d\d-\d\d\d\d");Assert.IsNotNull(lines.FirstOrDefault(line=>regex.Matches("").Count>0));} [TestMethod]publicvoidDisableBuildCheck(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.DisableBuildCheck=true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains(expected)));}privatestringGetLogLocation(){if(_logLocation==null||!File.Exists(_logLocation)){_logLocation=Path.GetTempFileName();}return_logLocation;}privatestaticstringGetChromeLocation(){varoptions=newChromeOptions{BrowserVersion="stable"};returnnewDriverFinder(options).GetBrowserPath();}}}
constChrome=require('selenium-webdriver/chrome');const{Browser,Builder}=require("selenium-webdriver");constoptions=newChrome.Options();describe('Should be able to Test Command line arguments',function(){it('headless',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addArguments('--headless=new')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('exclude switches',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.excludeSwitches('enable-automation')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Keep browser open - set detach to true ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.detachDriver(true)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');// As tests runs in ci, quitting the driver instance to avoid any failures
awaitdriver.quit();});xit('Start browser from specified location ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Basic Chrome test',asyncfunction(){constOptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(Options).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Add Extension',asyncfunction(){constoptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx'])).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});});
importreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("–start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['–log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['–append-log','–readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['–disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()network_conditions={"offline":False,"latency":20,# 20 ms of latency"download_throughput":20001024/8,# 2000 kbps"upload_throughput":20001024/8,# 2000 kbps}driver.set_network_conditions(**network_conditions)driver.get("https://www.selenium.dev")# check whether the network conditions are setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("–no-sandbox")returnoptions
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/python/tests/browsers/test_chrome.py#L51" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
Note: This is already the default behavior in .NET.
constChrome=require('selenium-webdriver/chrome');const{Browser,Builder}=require("selenium-webdriver");constoptions=newChrome.Options();describe('Should be able to Test Command line arguments',function(){it('headless',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addArguments('--headless=new')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('exclude switches',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.excludeSwitches('enable-automation')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Keep browser open - set detach to true ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.detachDriver(true)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');// As tests runs in ci, quitting the driver instance to avoid any failures
awaitdriver.quit();});xit('Start browser from specified location ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Basic Chrome test',asyncfunction(){constOptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(Options).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Add Extension',asyncfunction(){constoptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx'])).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});});
Chromedriver 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:
7779
Show full example
packagedev.selenium.browsers;importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("--start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(2000*1024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
importreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("–start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['–log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['–append-log','–readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['–disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()network_conditions={"offline":False,"latency":20,# 20 ms of latency"download_throughput":20001024/8,# 2000 kbps"upload_throughput":20001024/8,# 2000 kbps}driver.set_network_conditions(**network_conditions)driver.get("https://www.selenium.dev")# check whether the network conditions are setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("–no-sandbox")returnoptions
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full//examples/python/tests/browsers/test_chrome.py#L62" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
7577
Show full example
usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Text.RegularExpressions;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.Chrome;namespaceSeleniumDocs.Browsers{ [TestClass]publicclassChromeTest{privateChromeDriverdriver;privatestring_logLocation; [TestCleanup]publicvoidCleanup(){if(_logLocation!=null&&File.Exists(_logLocation)){File.Delete(_logLocation);}driver.Quit();} [TestMethod]publicvoidBasicOptions(){varoptions=newChromeOptions();driver=newChromeDriver(options);} [TestMethod]publicvoidArguments(){varoptions=newChromeOptions();options.AddArgument("--start-maximized");driver=newChromeDriver(options);} [TestMethod]publicvoidSetBrowserLocation(){varoptions=newChromeOptions();options.BinaryLocation=GetChromeLocation();driver=newChromeDriver(options);} [TestMethod]publicvoidInstallExtension(){varoptions=newChromeOptions();varbaseDir=AppDomain.CurrentDomain.BaseDirectory;varextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.crx");options.AddExtension(extensionFilePath);driver=newChromeDriver(options);driver.Url="https://www.selenium.dev/selenium/web/blank.html";IWebElementinjected=driver.FindElement(By.Id("webextensions-selenium-example"));Assert.AreEqual("Content injected by webextensions-selenium-example",injected.Text);} [TestMethod]publicvoidExcludeSwitch(){varoptions=newChromeOptions();options.AddExcludedArgument("disable-popup-blocking");driver=newChromeDriver(options);} [TestMethod]publicvoidLogsToFile(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("Starting ChromeDriver")));} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToConsole(){varstringWriter=newStringWriter();varoriginalOutput=Console.Out;Console.SetOut(stringWriter);varservice=ChromeDriverService.CreateDefaultService();//service.LogToConsole = true;driver=newChromeDriver(service);Assert.IsTrue(stringWriter.ToString().Contains("Starting ChromeDriver"));Console.SetOut(originalOutput);stringWriter.Dispose();} [TestMethod] [Ignore("Not implemented")]publicvoidLogsLevel(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();// service.LogLevel = ChromiumDriverLogLevel.Debug driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("[DEBUG]:")));} [TestMethod] [Ignore("Not implemented")]publicvoidConfigureDriverLogs(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.EnableAppendLog=true;// service.readableTimeStamp = true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());varregex=newRegex(@"\[\d\d-\d\d-\d\d\d\d");Assert.IsNotNull(lines.FirstOrDefault(line=>regex.Matches("").Count>0));} [TestMethod]publicvoidDisableBuildCheck(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.DisableBuildCheck=true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains(expected)));}privatestringGetLogLocation(){if(_logLocation==null||!File.Exists(_logLocation)){_logLocation=Path.GetTempFileName();}return_logLocation;}privatestaticstringGetChromeLocation(){varoptions=newChromeOptions{BrowserVersion="stable"};returnnewDriverFinder(options).GetBrowserPath();}}}
constChrome=require('selenium-webdriver/chrome');const{Browser,Builder}=require("selenium-webdriver");constoptions=newChrome.Options();describe('Should be able to Test Command line arguments',function(){it('headless',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addArguments('--headless=new')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('exclude switches',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.excludeSwitches('enable-automation')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Keep browser open - set detach to true ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.detachDriver(true)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');// As tests runs in ci, quitting the driver instance to avoid any failures
awaitdriver.quit();});xit('Start browser from specified location ',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`)).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Basic Chrome test',asyncfunction(){constOptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(Options).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Add Extension',asyncfunction(){constoptions=newChrome.Options();letdriver=newBuilder().forBrowser(Browser.CHROME).setChromeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx'])).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});});
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:
importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("–start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\[\d\d-\d\d-\d\d\d\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(20001024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L100-L101" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
Note: Java also allows setting file output by System Property: Property key: ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY Property value: String representing path to log file
importosimportreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("--start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['--log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['--append-log','--readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"\[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['--disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()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 setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("--no-sandbox")returnoptions
usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Text.RegularExpressions;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.Chrome;namespaceSeleniumDocs.Browsers{ [TestClass]publicclassChromeTest{privateChromeDriverdriver;privatestring_logLocation; [TestCleanup]publicvoidCleanup(){if(_logLocation!=null&&File.Exists(_logLocation)){File.Delete(_logLocation);}driver.Quit();} [TestMethod]publicvoidBasicOptions(){varoptions=newChromeOptions();driver=newChromeDriver(options);} [TestMethod]publicvoidArguments(){varoptions=newChromeOptions();options.AddArgument("--start-maximized");driver=newChromeDriver(options);} [TestMethod]publicvoidSetBrowserLocation(){varoptions=newChromeOptions();options.BinaryLocation=GetChromeLocation();driver=newChromeDriver(options);} [TestMethod]publicvoidInstallExtension(){varoptions=newChromeOptions();varbaseDir=AppDomain.CurrentDomain.BaseDirectory;varextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.crx");options.AddExtension(extensionFilePath);driver=newChromeDriver(options);driver.Url="https://www.selenium.dev/selenium/web/blank.html";IWebElementinjected=driver.FindElement(By.Id("webextensions-selenium-example"));Assert.AreEqual("Content injected by webextensions-selenium-example",injected.Text);} [TestMethod]publicvoidExcludeSwitch(){varoptions=newChromeOptions();options.AddExcludedArgument("disable-popup-blocking");driver=newChromeDriver(options);} [TestMethod]publicvoidLogsToFile(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("Starting ChromeDriver")));} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToConsole(){varstringWriter=newStringWriter();varoriginalOutput=Console.Out;Console.SetOut(stringWriter);varservice=ChromeDriverService.CreateDefaultService();//service.LogToConsole = true;driver=newChromeDriver(service);Assert.IsTrue(stringWriter.ToString().Contains("Starting ChromeDriver"));Console.SetOut(originalOutput);stringWriter.Dispose();} [TestMethod] [Ignore("Not implemented")]publicvoidLogsLevel(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();// service.LogLevel = ChromiumDriverLogLevel.Debug driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("[DEBUG]:")));} [TestMethod] [Ignore("Not implemented")]publicvoidConfigureDriverLogs(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.EnableAppendLog=true;// service.readableTimeStamp = true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());varregex=newRegex(@"\[\d\d-\d\d-\d\d\d\d");Assert.IsNotNull(lines.FirstOrDefault(line=>regex.Matches("").Count>0));} [TestMethod]publicvoidDisableBuildCheck(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.DisableBuildCheck=true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains(expected)));}privatestringGetLogLocation(){if(_logLocation==null||!File.Exists(_logLocation)){_logLocation=Path.GetTempFileName();}return_logLocation;}privatestaticstringGetChromeLocation(){varoptions=newChromeOptions{BrowserVersion="stable"};returnnewDriverFinder(options).GetBrowserPath();}}}
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Chrome'dodescribe'Options'dolet(:chrome_location){driver_finder&&ENV.fetch('CHROME_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.chrome@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.chromeoptions.args<<'--start-maximized'@driver=Selenium::WebDriver.for:chrome,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.chromeoptions.binary=chrome_location@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add extensions'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx',__dir__)options=Selenium::WebDriver::Options.chromeoptions.add_extension(extension_file_path)@driver=Selenium::WebDriver.for:chrome,options:options@driver.get('https://www.selenium.dev/selenium/web/blank.html')injected=@driver.find_element(:id,'webextensions-selenium-example')expect(injected.text).toeq'Content injected by webextensions-selenium-example'endit'keeps browser open'dooptions=Selenium::WebDriver::Options.chromeoptions.detach=true@driver=Selenium::WebDriver.for:chrome,options:optionsendit'excludes switches'dooptions=Selenium::WebDriver::Options.chromeoptions.exclude_switches<<'disable-popup-blocking'@driver=Selenium::WebDriver.for:chrome,options:optionsendenddescribe'Service'dolet(:file_name){File.expand_path('chromedriver.log')}after{FileUtils.rm_f(file_name)}it'logs to file'doservice=Selenium::WebDriver::Service.chromeservice.log=file_name@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).first).toinclude('Starting ChromeDriver')endit'logs to console'doservice=Selenium::WebDriver::Service.chromeservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:chrome,service:service}.tooutput(/Starting ChromeDriver/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.chromeservice.log=file_nameservice.args<<'--log-level=DEBUG'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).toeqtrueendit'sets log features'doargs=["--log-path=#{file_name}",'--verbose']service=Selenium::WebDriver::Service.chrome(args:args)service.args<<'--append-log'service.args<<'--readable-timestamp'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).toeqtrueendit'disables build checks'doservice=Selenium::WebDriver::Service.chromelog:file_name,args:['--verbose']service.args<<'--disable-build-check'@driver=Selenium::WebDriver.for:chrome,service:servicewarning=/\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/expect(File.readlines(file_name).grep(warning).any?).toeqtrueendenddescribe'Special Features'doit'casts'do@driver=Selenium::WebDriver.for:chromesinks=@driver.cast_sinksunlesssinks.empty?device_name=sinks.first['name']@driver.start_cast_tab_mirroring(device_name)expect{@driver.stop_casting(device_name)}.not_toraise_exceptionendendit'gets and sets network conditions'do@driver=Selenium::WebDriver.for:chrome@driver.network_conditions={offline:false,latency:100,throughput:200}expect(@driver.network_conditions).toeq('offline'=>false,'latency'=>100,'download_throughput'=>200,'upload_throughput'=>200)endit'gets the browser logs'do@driver=Selenium::WebDriver.for:chrome@driver.navigate.to'https://www.selenium.dev/selenium/web/'sleep1logs=@driver.logs.get(:browser)expect(logs.first.message).toinclude'Failed to load resource'endit'sets permissions'do@driver=Selenium::WebDriver.for:chrome@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')).toeq('denied')expect(permission('clipboard-read')).toeq('denied')expect(permission('clipboard-write')).toeq('prompt')endenddefdriver_finderoptions=Selenium::WebDriver::Options.chrome(browser_version:'stable')service=Selenium::WebDriver::Service.chromefinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['CHROMEDRIVER_BIN']=finder.driver_pathENV['CHROME_BIN']=finder.browser_pathenddefpermission(name)@driver.execute_async_script('callback = arguments[arguments.length - 1];'\'callback(navigator.permissions.query({name: arguments[0]}));',name)['state']endend
importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("–start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\[\d\d-\d\d-\d\d\d\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(20001024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L114-L115" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
Note: Java also allows setting console output by System Property; Property key: ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY Property value: DriverService.LOG_STDOUT or DriverService.LOG_STDERR
importosimportreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("--start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['--log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['--append-log','--readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"\[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['--disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()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 setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("--no-sandbox")returnoptions
require'spec_helper'RSpec.describe'Chrome'dodescribe'Options'dolet(:chrome_location){driver_finder&&ENV.fetch('CHROME_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.chrome@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.chromeoptions.args<<'–start-maximized'@driver=Selenium::WebDriver.for:chrome,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.chromeoptions.binary=chrome_location@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add extensions'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx',dir)options=Selenium::WebDriver::Options.chromeoptions.add_extension(extension_file_path)@driver=Selenium::WebDriver.for:chrome,options:options@driver.get('https://www.selenium.dev/selenium/web/blank.html')injected=@driver.find_element(:id,'webextensions-selenium-example')expect(injected.text).toeq'Content injected by webextensions-selenium-example'endit'keeps browser open'dooptions=Selenium::WebDriver::Options.chromeoptions.detach=true@driver=Selenium::WebDriver.for:chrome,options:optionsendit'excludes switches'dooptions=Selenium::WebDriver::Options.chromeoptions.exclude_switches<<'disable-popup-blocking'@driver=Selenium::WebDriver.for:chrome,options:optionsendenddescribe'Service'dolet(:file_name){File.expand_path('chromedriver.log')}after{FileUtils.rm_f(file_name)}it'logs to file'doservice=Selenium::WebDriver::Service.chromeservice.log=file_name@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).first).toinclude('Starting ChromeDriver')endit'logs to console'doservice=Selenium::WebDriver::Service.chromeservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:chrome,service:service}.tooutput(/Starting ChromeDriver/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.chromeservice.log=file_nameservice.args<<'–log-level=DEBUG'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/[DEBUG]:/).any?).toeqtrueendit'sets log features'doargs=["–log-path=#{file_name}",'–verbose']service=Selenium::WebDriver::Service.chrome(args:args)service.args<<'–append-log'service.args<<'–readable-timestamp'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/[\d\d-\d\d-\d\d\d\d/).any?).toeqtrueendit'disables build checks'doservice=Selenium::WebDriver::Service.chromelog:file_name,args:['–verbose']service.args<<'–disable-build-check'@driver=Selenium::WebDriver.for:chrome,service:servicewarning=/[WARNING]: You are using an unsupported command-line switch: –disable-build-check/expect(File.readlines(file_name).grep(warning).any?).toeqtrueendenddescribe'Special Features'doit'casts'do@driver=Selenium::WebDriver.for:chromesinks=@driver.cast_sinksunlesssinks.empty?device_name=sinks.first['name']@driver.start_cast_tab_mirroring(device_name)expect{@driver.stop_casting(device_name)}.not_toraise_exceptionendendit'gets and sets network conditions'do@driver=Selenium::WebDriver.for:chrome@driver.network_conditions={offline:false,latency:100,throughput:200}expect(@driver.network_conditions).toeq('offline'=>false,'latency'=>100,'download_throughput'=>200,'upload_throughput'=>200)endit'gets the browser logs'do@driver=Selenium::WebDriver.for:chrome@driver.navigate.to'https://www.selenium.dev/selenium/web/'sleep1logs=@driver.logs.get(:browser)expect(logs.first.message).toinclude'Failed to load resource'endit'sets permissions'do@driver=Selenium::WebDriver.for:chrome@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')).toeq('denied')expect(permission('clipboard-read')).toeq('denied')expect(permission('clipboard-write')).toeq('prompt')endenddefdriver_finderoptions=Selenium::WebDriver::Options.chrome(browser_version:'stable')service=Selenium::WebDriver::Service.chromefinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['CHROMEDRIVER_BIN']=finder.driver_pathENV['CHROME_BIN']=finder.browser_pathenddefpermission(name)@driver.execute_async_script('callback = arguments[arguments.length - 1];'</span>
'callback(navigator.permissions.query({name: arguments[0]}));',name)['state']endend
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full/examples/ruby/spec/browsers/chrome_spec.rb#L76" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
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:
importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("–start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\[\d\d-\d\d-\d\d\d\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(20001024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L129-L130" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
Note: Java also allows setting log level by System Property: Property key: ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY Property value: String representation of ChromiumDriverLogLevel enum
importosimportreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("--start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['--log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['--append-log','--readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"\[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['--disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()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 setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("--no-sandbox")returnoptions
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Chrome'dodescribe'Options'dolet(:chrome_location){driver_finder&&ENV.fetch('CHROME_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.chrome@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.chromeoptions.args<<'--start-maximized'@driver=Selenium::WebDriver.for:chrome,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.chromeoptions.binary=chrome_location@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add extensions'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx',__dir__)options=Selenium::WebDriver::Options.chromeoptions.add_extension(extension_file_path)@driver=Selenium::WebDriver.for:chrome,options:options@driver.get('https://www.selenium.dev/selenium/web/blank.html')injected=@driver.find_element(:id,'webextensions-selenium-example')expect(injected.text).toeq'Content injected by webextensions-selenium-example'endit'keeps browser open'dooptions=Selenium::WebDriver::Options.chromeoptions.detach=true@driver=Selenium::WebDriver.for:chrome,options:optionsendit'excludes switches'dooptions=Selenium::WebDriver::Options.chromeoptions.exclude_switches<<'disable-popup-blocking'@driver=Selenium::WebDriver.for:chrome,options:optionsendenddescribe'Service'dolet(:file_name){File.expand_path('chromedriver.log')}after{FileUtils.rm_f(file_name)}it'logs to file'doservice=Selenium::WebDriver::Service.chromeservice.log=file_name@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).first).toinclude('Starting ChromeDriver')endit'logs to console'doservice=Selenium::WebDriver::Service.chromeservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:chrome,service:service}.tooutput(/Starting ChromeDriver/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.chromeservice.log=file_nameservice.args<<'--log-level=DEBUG'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).toeqtrueendit'sets log features'doargs=["--log-path=#{file_name}",'--verbose']service=Selenium::WebDriver::Service.chrome(args:args)service.args<<'--append-log'service.args<<'--readable-timestamp'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).toeqtrueendit'disables build checks'doservice=Selenium::WebDriver::Service.chromelog:file_name,args:['--verbose']service.args<<'--disable-build-check'@driver=Selenium::WebDriver.for:chrome,service:servicewarning=/\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/expect(File.readlines(file_name).grep(warning).any?).toeqtrueendenddescribe'Special Features'doit'casts'do@driver=Selenium::WebDriver.for:chromesinks=@driver.cast_sinksunlesssinks.empty?device_name=sinks.first['name']@driver.start_cast_tab_mirroring(device_name)expect{@driver.stop_casting(device_name)}.not_toraise_exceptionendendit'gets and sets network conditions'do@driver=Selenium::WebDriver.for:chrome@driver.network_conditions={offline:false,latency:100,throughput:200}expect(@driver.network_conditions).toeq('offline'=>false,'latency'=>100,'download_throughput'=>200,'upload_throughput'=>200)endit'gets the browser logs'do@driver=Selenium::WebDriver.for:chrome@driver.navigate.to'https://www.selenium.dev/selenium/web/'sleep1logs=@driver.logs.get(:browser)expect(logs.first.message).toinclude'Failed to load resource'endit'sets permissions'do@driver=Selenium::WebDriver.for:chrome@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')).toeq('denied')expect(permission('clipboard-read')).toeq('denied')expect(permission('clipboard-write')).toeq('prompt')endenddefdriver_finderoptions=Selenium::WebDriver::Options.chrome(browser_version:'stable')service=Selenium::WebDriver::Service.chromefinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['CHROMEDRIVER_BIN']=finder.driver_pathENV['CHROME_BIN']=finder.browser_pathenddefpermission(name)@driver.execute_async_script('callback = arguments[arguments.length - 1];'\'callback(navigator.permissions.query({name: arguments[0]}));',name)['state']endend
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.
importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("–start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\[\d\d-\d\d-\d\d\d\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(20001024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L147-L148" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
Note: Java also allows toggling these features by System Property: Property keys: ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTY and ChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP Property value: "true" or "false"
103105
Show full example
importosimportreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("--start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['--log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['--append-log','--readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"\[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['--disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()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 setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("--no-sandbox")returnoptions
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Chrome'dodescribe'Options'dolet(:chrome_location){driver_finder&&ENV.fetch('CHROME_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.chrome@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.chromeoptions.args<<'--start-maximized'@driver=Selenium::WebDriver.for:chrome,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.chromeoptions.binary=chrome_location@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add extensions'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx',__dir__)options=Selenium::WebDriver::Options.chromeoptions.add_extension(extension_file_path)@driver=Selenium::WebDriver.for:chrome,options:options@driver.get('https://www.selenium.dev/selenium/web/blank.html')injected=@driver.find_element(:id,'webextensions-selenium-example')expect(injected.text).toeq'Content injected by webextensions-selenium-example'endit'keeps browser open'dooptions=Selenium::WebDriver::Options.chromeoptions.detach=true@driver=Selenium::WebDriver.for:chrome,options:optionsendit'excludes switches'dooptions=Selenium::WebDriver::Options.chromeoptions.exclude_switches<<'disable-popup-blocking'@driver=Selenium::WebDriver.for:chrome,options:optionsendenddescribe'Service'dolet(:file_name){File.expand_path('chromedriver.log')}after{FileUtils.rm_f(file_name)}it'logs to file'doservice=Selenium::WebDriver::Service.chromeservice.log=file_name@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).first).toinclude('Starting ChromeDriver')endit'logs to console'doservice=Selenium::WebDriver::Service.chromeservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:chrome,service:service}.tooutput(/Starting ChromeDriver/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.chromeservice.log=file_nameservice.args<<'--log-level=DEBUG'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).toeqtrueendit'sets log features'doargs=["--log-path=#{file_name}",'--verbose']service=Selenium::WebDriver::Service.chrome(args:args)service.args<<'--append-log'service.args<<'--readable-timestamp'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).toeqtrueendit'disables build checks'doservice=Selenium::WebDriver::Service.chromelog:file_name,args:['--verbose']service.args<<'--disable-build-check'@driver=Selenium::WebDriver.for:chrome,service:servicewarning=/\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/expect(File.readlines(file_name).grep(warning).any?).toeqtrueendenddescribe'Special Features'doit'casts'do@driver=Selenium::WebDriver.for:chromesinks=@driver.cast_sinksunlesssinks.empty?device_name=sinks.first['name']@driver.start_cast_tab_mirroring(device_name)expect{@driver.stop_casting(device_name)}.not_toraise_exceptionendendit'gets and sets network conditions'do@driver=Selenium::WebDriver.for:chrome@driver.network_conditions={offline:false,latency:100,throughput:200}expect(@driver.network_conditions).toeq('offline'=>false,'latency'=>100,'download_throughput'=>200,'upload_throughput'=>200)endit'gets the browser logs'do@driver=Selenium::WebDriver.for:chrome@driver.navigate.to'https://www.selenium.dev/selenium/web/'sleep1logs=@driver.logs.get(:browser)expect(logs.first.message).toinclude'Failed to load resource'endit'sets permissions'do@driver=Selenium::WebDriver.for:chrome@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')).toeq('denied')expect(permission('clipboard-read')).toeq('denied')expect(permission('clipboard-write')).toeq('prompt')endenddefdriver_finderoptions=Selenium::WebDriver::Options.chrome(browser_version:'stable')service=Selenium::WebDriver::Service.chromefinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['CHROMEDRIVER_BIN']=finder.driver_pathENV['CHROME_BIN']=finder.browser_pathenddefpermission(name)@driver.execute_async_script('callback = arguments[arguments.length - 1];'\'callback(navigator.permissions.query({name: arguments[0]}));',name)['state']endend
Chromedriver and Chrome browser 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 Chrome.
Note that this is an unsupported feature, and bugs will not be investigated.
importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("–start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\[\d\d-\d\d-\d\d\d\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: –disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(20001024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
<div class="text-end pb-2 mt-2">
<a href="https://github.com/SeleniumHQ/seleniumhq.github.io/blob/display_full/examples/java/src/test/java/dev/selenium/browsers/ChromeTest.java#L166-L167" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
Note: Java also allows disabling build checks by System Property: Property key: ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK Property value: "true" or "false"
importosimportreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("--start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['--log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['--append-log','--readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"\[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['--disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()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 setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("--no-sandbox")returnoptions
usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Text.RegularExpressions;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.Chrome;namespaceSeleniumDocs.Browsers{ [TestClass]publicclassChromeTest{privateChromeDriverdriver;privatestring_logLocation; [TestCleanup]publicvoidCleanup(){if(_logLocation!=null&&File.Exists(_logLocation)){File.Delete(_logLocation);}driver.Quit();} [TestMethod]publicvoidBasicOptions(){varoptions=newChromeOptions();driver=newChromeDriver(options);} [TestMethod]publicvoidArguments(){varoptions=newChromeOptions();options.AddArgument("--start-maximized");driver=newChromeDriver(options);} [TestMethod]publicvoidSetBrowserLocation(){varoptions=newChromeOptions();options.BinaryLocation=GetChromeLocation();driver=newChromeDriver(options);} [TestMethod]publicvoidInstallExtension(){varoptions=newChromeOptions();varbaseDir=AppDomain.CurrentDomain.BaseDirectory;varextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.crx");options.AddExtension(extensionFilePath);driver=newChromeDriver(options);driver.Url="https://www.selenium.dev/selenium/web/blank.html";IWebElementinjected=driver.FindElement(By.Id("webextensions-selenium-example"));Assert.AreEqual("Content injected by webextensions-selenium-example",injected.Text);} [TestMethod]publicvoidExcludeSwitch(){varoptions=newChromeOptions();options.AddExcludedArgument("disable-popup-blocking");driver=newChromeDriver(options);} [TestMethod]publicvoidLogsToFile(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("Starting ChromeDriver")));} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToConsole(){varstringWriter=newStringWriter();varoriginalOutput=Console.Out;Console.SetOut(stringWriter);varservice=ChromeDriverService.CreateDefaultService();//service.LogToConsole = true;driver=newChromeDriver(service);Assert.IsTrue(stringWriter.ToString().Contains("Starting ChromeDriver"));Console.SetOut(originalOutput);stringWriter.Dispose();} [TestMethod] [Ignore("Not implemented")]publicvoidLogsLevel(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();// service.LogLevel = ChromiumDriverLogLevel.Debug driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("[DEBUG]:")));} [TestMethod] [Ignore("Not implemented")]publicvoidConfigureDriverLogs(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.EnableAppendLog=true;// service.readableTimeStamp = true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarlines=File.ReadLines(GetLogLocation());varregex=newRegex(@"\[\d\d-\d\d-\d\d\d\d");Assert.IsNotNull(lines.FirstOrDefault(line=>regex.Matches("").Count>0));} [TestMethod]publicvoidDisableBuildCheck(){varservice=ChromeDriverService.CreateDefaultService();service.LogPath=GetLogLocation();service.EnableVerboseLogging=true;service.DisableBuildCheck=true;driver=newChromeDriver(service);driver.Quit();// Close the Service log file before readingvarexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains(expected)));}privatestringGetLogLocation(){if(_logLocation==null||!File.Exists(_logLocation)){_logLocation=Path.GetTempFileName();}return_logLocation;}privatestaticstringGetChromeLocation(){varoptions=newChromeOptions{BrowserVersion="stable"};returnnewDriverFinder(options).GetBrowserPath();}}}
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Chrome'dodescribe'Options'dolet(:chrome_location){driver_finder&&ENV.fetch('CHROME_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.chrome@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.chromeoptions.args<<'--start-maximized'@driver=Selenium::WebDriver.for:chrome,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.chromeoptions.binary=chrome_location@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add extensions'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx',__dir__)options=Selenium::WebDriver::Options.chromeoptions.add_extension(extension_file_path)@driver=Selenium::WebDriver.for:chrome,options:options@driver.get('https://www.selenium.dev/selenium/web/blank.html')injected=@driver.find_element(:id,'webextensions-selenium-example')expect(injected.text).toeq'Content injected by webextensions-selenium-example'endit'keeps browser open'dooptions=Selenium::WebDriver::Options.chromeoptions.detach=true@driver=Selenium::WebDriver.for:chrome,options:optionsendit'excludes switches'dooptions=Selenium::WebDriver::Options.chromeoptions.exclude_switches<<'disable-popup-blocking'@driver=Selenium::WebDriver.for:chrome,options:optionsendenddescribe'Service'dolet(:file_name){File.expand_path('chromedriver.log')}after{FileUtils.rm_f(file_name)}it'logs to file'doservice=Selenium::WebDriver::Service.chromeservice.log=file_name@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).first).toinclude('Starting ChromeDriver')endit'logs to console'doservice=Selenium::WebDriver::Service.chromeservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:chrome,service:service}.tooutput(/Starting ChromeDriver/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.chromeservice.log=file_nameservice.args<<'--log-level=DEBUG'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).toeqtrueendit'sets log features'doargs=["--log-path=#{file_name}",'--verbose']service=Selenium::WebDriver::Service.chrome(args:args)service.args<<'--append-log'service.args<<'--readable-timestamp'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).toeqtrueendit'disables build checks'doservice=Selenium::WebDriver::Service.chromelog:file_name,args:['--verbose']service.args<<'--disable-build-check'@driver=Selenium::WebDriver.for:chrome,service:servicewarning=/\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/expect(File.readlines(file_name).grep(warning).any?).toeqtrueendenddescribe'Special Features'doit'casts'do@driver=Selenium::WebDriver.for:chromesinks=@driver.cast_sinksunlesssinks.empty?device_name=sinks.first['name']@driver.start_cast_tab_mirroring(device_name)expect{@driver.stop_casting(device_name)}.not_toraise_exceptionendendit'gets and sets network conditions'do@driver=Selenium::WebDriver.for:chrome@driver.network_conditions={offline:false,latency:100,throughput:200}expect(@driver.network_conditions).toeq('offline'=>false,'latency'=>100,'download_throughput'=>200,'upload_throughput'=>200)endit'gets the browser logs'do@driver=Selenium::WebDriver.for:chrome@driver.navigate.to'https://www.selenium.dev/selenium/web/'sleep1logs=@driver.logs.get(:browser)expect(logs.first.message).toinclude'Failed to load resource'endit'sets permissions'do@driver=Selenium::WebDriver.for:chrome@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')).toeq('denied')expect(permission('clipboard-read')).toeq('denied')expect(permission('clipboard-write')).toeq('prompt')endenddefdriver_finderoptions=Selenium::WebDriver::Options.chrome(browser_version:'stable')service=Selenium::WebDriver::Service.chromefinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['CHROMEDRIVER_BIN']=finder.driver_pathENV['CHROME_BIN']=finder.browser_pathenddefpermission(name)@driver.execute_async_script('callback = arguments[arguments.length - 1];'\'callback(navigator.permissions.query({name: arguments[0]}));',name)['state']endend
Some browsers have implemented additional features that are unique to them.
Casting
You can drive Chrome Cast devices, including sharing tabs
229236
Show full example
packagedev.selenium.browsers;importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("--start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(2000*1024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
importosimportreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("--start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['--log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['--append-log','--readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"\[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['--disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()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 setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("--no-sandbox")returnoptions
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Chrome'dodescribe'Options'dolet(:chrome_location){driver_finder&&ENV.fetch('CHROME_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.chrome@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.chromeoptions.args<<'--start-maximized'@driver=Selenium::WebDriver.for:chrome,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.chromeoptions.binary=chrome_location@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add extensions'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx',__dir__)options=Selenium::WebDriver::Options.chromeoptions.add_extension(extension_file_path)@driver=Selenium::WebDriver.for:chrome,options:options@driver.get('https://www.selenium.dev/selenium/web/blank.html')injected=@driver.find_element(:id,'webextensions-selenium-example')expect(injected.text).toeq'Content injected by webextensions-selenium-example'endit'keeps browser open'dooptions=Selenium::WebDriver::Options.chromeoptions.detach=true@driver=Selenium::WebDriver.for:chrome,options:optionsendit'excludes switches'dooptions=Selenium::WebDriver::Options.chromeoptions.exclude_switches<<'disable-popup-blocking'@driver=Selenium::WebDriver.for:chrome,options:optionsendenddescribe'Service'dolet(:file_name){File.expand_path('chromedriver.log')}after{FileUtils.rm_f(file_name)}it'logs to file'doservice=Selenium::WebDriver::Service.chromeservice.log=file_name@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).first).toinclude('Starting ChromeDriver')endit'logs to console'doservice=Selenium::WebDriver::Service.chromeservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:chrome,service:service}.tooutput(/Starting ChromeDriver/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.chromeservice.log=file_nameservice.args<<'--log-level=DEBUG'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).toeqtrueendit'sets log features'doargs=["--log-path=#{file_name}",'--verbose']service=Selenium::WebDriver::Service.chrome(args:args)service.args<<'--append-log'service.args<<'--readable-timestamp'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).toeqtrueendit'disables build checks'doservice=Selenium::WebDriver::Service.chromelog:file_name,args:['--verbose']service.args<<'--disable-build-check'@driver=Selenium::WebDriver.for:chrome,service:servicewarning=/\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/expect(File.readlines(file_name).grep(warning).any?).toeqtrueendenddescribe'Special Features'doit'casts'do@driver=Selenium::WebDriver.for:chromesinks=@driver.cast_sinksunlesssinks.empty?device_name=sinks.first['name']@driver.start_cast_tab_mirroring(device_name)expect{@driver.stop_casting(device_name)}.not_toraise_exceptionendendit'gets and sets network conditions'do@driver=Selenium::WebDriver.for:chrome@driver.network_conditions={offline:false,latency:100,throughput:200}expect(@driver.network_conditions).toeq('offline'=>false,'latency'=>100,'download_throughput'=>200,'upload_throughput'=>200)endit'gets the browser logs'do@driver=Selenium::WebDriver.for:chrome@driver.navigate.to'https://www.selenium.dev/selenium/web/'sleep1logs=@driver.logs.get(:browser)expect(logs.first.message).toinclude'Failed to load resource'endit'sets permissions'do@driver=Selenium::WebDriver.for:chrome@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')).toeq('denied')expect(permission('clipboard-read')).toeq('denied')expect(permission('clipboard-write')).toeq('prompt')endenddefdriver_finderoptions=Selenium::WebDriver::Options.chrome(browser_version:'stable')service=Selenium::WebDriver::Service.chromefinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['CHROMEDRIVER_BIN']=finder.driver_pathENV['CHROME_BIN']=finder.browser_pathenddefpermission(name)@driver.execute_async_script('callback = arguments[arguments.length - 1];'\'callback(navigator.permissions.query({name: arguments[0]}));',name)['state']endend
packagedev.selenium.browsers;importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("--start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(2000*1024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
importosimportreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("--start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['--log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['--append-log','--readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"\[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['--disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()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 setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("--no-sandbox")returnoptions
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Chrome'dodescribe'Options'dolet(:chrome_location){driver_finder&&ENV.fetch('CHROME_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.chrome@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.chromeoptions.args<<'--start-maximized'@driver=Selenium::WebDriver.for:chrome,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.chromeoptions.binary=chrome_location@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add extensions'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx',__dir__)options=Selenium::WebDriver::Options.chromeoptions.add_extension(extension_file_path)@driver=Selenium::WebDriver.for:chrome,options:options@driver.get('https://www.selenium.dev/selenium/web/blank.html')injected=@driver.find_element(:id,'webextensions-selenium-example')expect(injected.text).toeq'Content injected by webextensions-selenium-example'endit'keeps browser open'dooptions=Selenium::WebDriver::Options.chromeoptions.detach=true@driver=Selenium::WebDriver.for:chrome,options:optionsendit'excludes switches'dooptions=Selenium::WebDriver::Options.chromeoptions.exclude_switches<<'disable-popup-blocking'@driver=Selenium::WebDriver.for:chrome,options:optionsendenddescribe'Service'dolet(:file_name){File.expand_path('chromedriver.log')}after{FileUtils.rm_f(file_name)}it'logs to file'doservice=Selenium::WebDriver::Service.chromeservice.log=file_name@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).first).toinclude('Starting ChromeDriver')endit'logs to console'doservice=Selenium::WebDriver::Service.chromeservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:chrome,service:service}.tooutput(/Starting ChromeDriver/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.chromeservice.log=file_nameservice.args<<'--log-level=DEBUG'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).toeqtrueendit'sets log features'doargs=["--log-path=#{file_name}",'--verbose']service=Selenium::WebDriver::Service.chrome(args:args)service.args<<'--append-log'service.args<<'--readable-timestamp'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).toeqtrueendit'disables build checks'doservice=Selenium::WebDriver::Service.chromelog:file_name,args:['--verbose']service.args<<'--disable-build-check'@driver=Selenium::WebDriver.for:chrome,service:servicewarning=/\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/expect(File.readlines(file_name).grep(warning).any?).toeqtrueendenddescribe'Special Features'doit'casts'do@driver=Selenium::WebDriver.for:chromesinks=@driver.cast_sinksunlesssinks.empty?device_name=sinks.first['name']@driver.start_cast_tab_mirroring(device_name)expect{@driver.stop_casting(device_name)}.not_toraise_exceptionendendit'gets and sets network conditions'do@driver=Selenium::WebDriver.for:chrome@driver.network_conditions={offline:false,latency:100,throughput:200}expect(@driver.network_conditions).toeq('offline'=>false,'latency'=>100,'download_throughput'=>200,'upload_throughput'=>200)endit'gets the browser logs'do@driver=Selenium::WebDriver.for:chrome@driver.navigate.to'https://www.selenium.dev/selenium/web/'sleep1logs=@driver.logs.get(:browser)expect(logs.first.message).toinclude'Failed to load resource'endit'sets permissions'do@driver=Selenium::WebDriver.for:chrome@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')).toeq('denied')expect(permission('clipboard-read')).toeq('denied')expect(permission('clipboard-write')).toeq('prompt')endenddefdriver_finderoptions=Selenium::WebDriver::Options.chrome(browser_version:'stable')service=Selenium::WebDriver::Service.chromefinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['CHROMEDRIVER_BIN']=finder.driver_pathENV['CHROME_BIN']=finder.browser_pathenddefpermission(name)@driver.execute_async_script('callback = arguments[arguments.length - 1];'\'callback(navigator.permissions.query({name: arguments[0]}));',name)['state']endend
packagedev.selenium.browsers;importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("--start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(2000*1024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
importosimportreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("--start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['--log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['--append-log','--readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"\[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['--disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()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 setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("--no-sandbox")returnoptions
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Chrome'dodescribe'Options'dolet(:chrome_location){driver_finder&&ENV.fetch('CHROME_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.chrome@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.chromeoptions.args<<'--start-maximized'@driver=Selenium::WebDriver.for:chrome,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.chromeoptions.binary=chrome_location@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add extensions'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx',__dir__)options=Selenium::WebDriver::Options.chromeoptions.add_extension(extension_file_path)@driver=Selenium::WebDriver.for:chrome,options:options@driver.get('https://www.selenium.dev/selenium/web/blank.html')injected=@driver.find_element(:id,'webextensions-selenium-example')expect(injected.text).toeq'Content injected by webextensions-selenium-example'endit'keeps browser open'dooptions=Selenium::WebDriver::Options.chromeoptions.detach=true@driver=Selenium::WebDriver.for:chrome,options:optionsendit'excludes switches'dooptions=Selenium::WebDriver::Options.chromeoptions.exclude_switches<<'disable-popup-blocking'@driver=Selenium::WebDriver.for:chrome,options:optionsendenddescribe'Service'dolet(:file_name){File.expand_path('chromedriver.log')}after{FileUtils.rm_f(file_name)}it'logs to file'doservice=Selenium::WebDriver::Service.chromeservice.log=file_name@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).first).toinclude('Starting ChromeDriver')endit'logs to console'doservice=Selenium::WebDriver::Service.chromeservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:chrome,service:service}.tooutput(/Starting ChromeDriver/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.chromeservice.log=file_nameservice.args<<'--log-level=DEBUG'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).toeqtrueendit'sets log features'doargs=["--log-path=#{file_name}",'--verbose']service=Selenium::WebDriver::Service.chrome(args:args)service.args<<'--append-log'service.args<<'--readable-timestamp'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).toeqtrueendit'disables build checks'doservice=Selenium::WebDriver::Service.chromelog:file_name,args:['--verbose']service.args<<'--disable-build-check'@driver=Selenium::WebDriver.for:chrome,service:servicewarning=/\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/expect(File.readlines(file_name).grep(warning).any?).toeqtrueendenddescribe'Special Features'doit'casts'do@driver=Selenium::WebDriver.for:chromesinks=@driver.cast_sinksunlesssinks.empty?device_name=sinks.first['name']@driver.start_cast_tab_mirroring(device_name)expect{@driver.stop_casting(device_name)}.not_toraise_exceptionendendit'gets and sets network conditions'do@driver=Selenium::WebDriver.for:chrome@driver.network_conditions={offline:false,latency:100,throughput:200}expect(@driver.network_conditions).toeq('offline'=>false,'latency'=>100,'download_throughput'=>200,'upload_throughput'=>200)endit'gets the browser logs'do@driver=Selenium::WebDriver.for:chrome@driver.navigate.to'https://www.selenium.dev/selenium/web/'sleep1logs=@driver.logs.get(:browser)expect(logs.first.message).toinclude'Failed to load resource'endit'sets permissions'do@driver=Selenium::WebDriver.for:chrome@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')).toeq('denied')expect(permission('clipboard-read')).toeq('denied')expect(permission('clipboard-write')).toeq('prompt')endenddefdriver_finderoptions=Selenium::WebDriver::Options.chrome(browser_version:'stable')service=Selenium::WebDriver::Service.chromefinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['CHROMEDRIVER_BIN']=finder.driver_pathENV['CHROME_BIN']=finder.browser_pathenddefpermission(name)@driver.execute_async_script('callback = arguments[arguments.length - 1];'\'callback(navigator.permissions.query({name: arguments[0]}));',name)['state']endend
packagedev.selenium.browsers;importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;importjava.util.logging.Level;importjava.util.regex.Pattern;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.chrome.ChromeDriverService;importorg.openqa.selenium.chrome.ChromeOptions;importorg.openqa.selenium.chromium.ChromiumDriverLogLevel;importorg.openqa.selenium.chromium.ChromiumNetworkConditions;importorg.openqa.selenium.logging.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassChromeTestextendsBaseTest{@AfterEachpublicvoidclearProperties(){System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY);System.clearProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY);}@TestpublicvoidbasicOptions(){ChromeOptionsoptions=getDefaultChromeOptions();driver=newChromeDriver(options);}@Testpublicvoidarguments(){ChromeOptionsoptions=getDefaultChromeOptions();options.addArguments("--start-maximized");driver=newChromeDriver(options);}@TestpublicvoidsetBrowserLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBinary(getChromeLocation());driver=newChromeDriver(options);}@TestpublicvoidextensionOptions(){ChromeOptionsoptions=getDefaultChromeOptions();Pathpath=Paths.get("src/test/resources/extensions/webextensions-selenium-example.crx");FileextensionFilePath=newFile(path.toUri());options.addExtensions(extensionFilePath);driver=newChromeDriver(options);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=driver.findElement(By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}@TestpublicvoidexcludeSwitches(){ChromeOptionsoptions=getDefaultChromeOptions();options.setExperimentalOption("excludeSwitches",List.of("disable-popup-blocking"));driver=newChromeDriver(options);}@TestpublicvoidloggingPreferences(){ChromeOptionsoptions=getDefaultChromeOptions();LoggingPreferenceslogPrefs=newLoggingPreferences();logPrefs.enable(LogType.PERFORMANCE,Level.ALL);options.setCapability(ChromeOptions.LOGGING_PREFS,logPrefs);driver=newChromeDriver(options);driver.get("https://www.selenium.dev");LogEntrieslogEntries=driver.manage().logs().get(LogType.PERFORMANCE);Assertions.assertFalse(logEntries.getAll().isEmpty());}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");ChromeDriverServiceservice=newChromeDriverService.Builder().withLogFile(logLocation).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));ChromeDriverServiceservice=newChromeDriverService.Builder().withLogOutput(System.out).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Starting ChromeDriver"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());ChromeDriverServiceservice=newChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("[DEBUG]:"));}@TestpublicvoidconfigureDriverLogs()throwsIOException{FilelogLocation=getTempFile("configureDriverLogs",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.DEBUG.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Patternpattern=Pattern.compile("\\[\\d\\d-\\d\\d-\\d\\d\\d\\d",Pattern.CASE_INSENSITIVE);Assertions.assertTrue(pattern.matcher(fileContent).find());}@TestpublicvoiddisableBuildChecks()throwsIOException{FilelogLocation=getTempFile("disableBuildChecks",".log");System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY,ChromiumDriverLogLevel.WARNING.toString());ChromeDriverServiceservice=newChromeDriverService.Builder().withBuildCheckDisabled(true).build();driver=newChromeDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Stringexpected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check";Assertions.assertTrue(fileContent.contains(expected));}privateFilegetChromeLocation(){ChromeOptionsoptions=getDefaultChromeOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(ChromeDriverService.createDefaultService(),options);returnnewFile(finder.getBrowserPath());}@TestpublicvoidsetPermission(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev");driver.setPermission("camera","denied");// Verify the permission state is 'denied'Stringscript="return navigator.permissions.query({ name: 'camera' })"+" .then(permissionStatus => permissionStatus.state);";StringpermissionState=(String)driver.executeScript(script);Assertions.assertEquals("denied",permissionState);driver.quit();}@TestpublicvoidsetNetworkConditions(){driver=newChromeDriver();ChromiumNetworkConditionsnetworkConditions=newChromiumNetworkConditions();networkConditions.setOffline(false);networkConditions.setLatency(java.time.Duration.ofMillis(20));// 20 ms of latencynetworkConditions.setDownloadThroughput(2000*1024/8);// 2000 kbpsnetworkConditions.setUploadThroughput(2000*1024/8);// 2000 kbps((ChromeDriver)driver).setNetworkConditions(networkConditions);driver.get("https://www.selenium.dev");// Assert the network conditions are set as expectedChromiumNetworkConditionsactualConditions=((ChromeDriver)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()));((ChromeDriver)driver).deleteNetworkConditions();driver.quit();}@TestpublicvoidcastFeatures(){ChromeDriverdriver=newChromeDriver();List<Map<String,String>>sinks=driver.getCastSinks();if(!sinks.isEmpty()){StringsinkName=sinks.get(0).get("name");driver.startTabMirroring(sinkName);driver.stopCasting(sinkName);}driver.quit();}@TestpublicvoidgetBrowserLogs(){ChromeDriverdriver=newChromeDriver();driver.get("https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html");WebElementconsoleLogButton=driver.findElement(By.id("consoleError"));consoleLogButton.click();LogEntrieslogs=driver.manage().logs().get(LogType.BROWSER);// Assert that at least one log contains the expected messagebooleanlogFound=false;for(LogEntrylog:logs){if(log.getMessage().contains("I am console error")){logFound=true;break;}}Assertions.assertTrue(logFound,"No matching log message found.");driver.quit();}}
importosimportreimportsubprocessimportpytestfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydeftest_basic_options():options=get_default_chrome_options()driver=webdriver.Chrome(options=options)driver.quit()deftest_args():options=get_default_chrome_options()options.add_argument("--start-maximized")driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_set_browser_location(chrome_bin):options=get_default_chrome_options()options.binary_location=chrome_bindriver=webdriver.Chrome(options=options)driver.quit()deftest_add_extension():options=get_default_chrome_options()extension_file_path=os.path.abspath("tests/extensions/webextensions-selenium-example.crx")options.add_extension(extension_file_path)driver=webdriver.Chrome(options=options)driver.get("https://www.selenium.dev/selenium/web/blank.html")driver.quit()deftest_keep_browser_open():options=get_default_chrome_options()options.add_experimental_option("detach",True)driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_exclude_switches():options=get_default_chrome_options()options.add_experimental_option('excludeSwitches',['disable-popup-blocking'])driver=webdriver.Chrome(options=options)driver.get('http://selenium.dev')driver.quit()deftest_log_to_file(log_path):service=webdriver.ChromeService(log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asfp:assert"Starting ChromeDriver"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.ChromeService(log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert"Starting ChromeDriver"inoutdriver.quit()deftest_log_level(capfd):service=webdriver.ChromeService(service_args=['--log-level=DEBUG'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)out,err=capfd.readouterr()assert'[DEBUG]'inerrdriver.quit()deftest_log_features(log_path):service=webdriver.ChromeService(service_args=['--append-log','--readable-timestamp'],log_output=log_path)driver=webdriver.Chrome(service=service)withopen(log_path,'r')asf:assertre.match(r"\[\d\d-\d\d-\d\d\d\d",f.read())driver.quit()deftest_build_checks(capfd):service=webdriver.ChromeService(service_args=['--disable-build-check'],log_output=subprocess.STDOUT)driver=webdriver.Chrome(service=service)expected="[WARNING]: You are using an unsupported command-line switch: --disable-build-check"out,err=capfd.readouterr()assertexpectedinerrdriver.quit()deftest_set_network_conditions():driver=webdriver.Chrome()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 setassertdriver.get_network_conditions()==network_conditionsdriver.quit()deftest_set_permissions():driver=webdriver.Chrome()driver.get('https://www.selenium.dev')driver.set_permissions('camera','denied')assertget_permission_state(driver,'camera')=='denied'driver.quit()defget_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);
});
"""returndriver.execute_async_script(script,name)deftest_cast_features():driver=webdriver.Chrome()try:sinks=driver.get_sinks()ifsinks: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()deftest_get_browser_logs():driver=webdriver.Chrome()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 messageassertany("I am console error"inlog['message']forloginlogs),"No matching log message found."driver.quit()defget_default_chrome_options():options=webdriver.ChromeOptions()options.add_argument("--no-sandbox")returnoptions
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Chrome'dodescribe'Options'dolet(:chrome_location){driver_finder&&ENV.fetch('CHROME_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.chrome@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.chromeoptions.args<<'--start-maximized'@driver=Selenium::WebDriver.for:chrome,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.chromeoptions.binary=chrome_location@driver=Selenium::WebDriver.for:chrome,options:optionsendit'add extensions'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.crx',__dir__)options=Selenium::WebDriver::Options.chromeoptions.add_extension(extension_file_path)@driver=Selenium::WebDriver.for:chrome,options:options@driver.get('https://www.selenium.dev/selenium/web/blank.html')injected=@driver.find_element(:id,'webextensions-selenium-example')expect(injected.text).toeq'Content injected by webextensions-selenium-example'endit'keeps browser open'dooptions=Selenium::WebDriver::Options.chromeoptions.detach=true@driver=Selenium::WebDriver.for:chrome,options:optionsendit'excludes switches'dooptions=Selenium::WebDriver::Options.chromeoptions.exclude_switches<<'disable-popup-blocking'@driver=Selenium::WebDriver.for:chrome,options:optionsendenddescribe'Service'dolet(:file_name){File.expand_path('chromedriver.log')}after{FileUtils.rm_f(file_name)}it'logs to file'doservice=Selenium::WebDriver::Service.chromeservice.log=file_name@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).first).toinclude('Starting ChromeDriver')endit'logs to console'doservice=Selenium::WebDriver::Service.chromeservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:chrome,service:service}.tooutput(/Starting ChromeDriver/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.chromeservice.log=file_nameservice.args<<'--log-level=DEBUG'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[DEBUG\]:/).any?).toeqtrueendit'sets log features'doargs=["--log-path=#{file_name}",'--verbose']service=Selenium::WebDriver::Service.chrome(args:args)service.args<<'--append-log'service.args<<'--readable-timestamp'@driver=Selenium::WebDriver.for:chrome,service:serviceexpect(File.readlines(file_name).grep(/\[\d\d-\d\d-\d\d\d\d/).any?).toeqtrueendit'disables build checks'doservice=Selenium::WebDriver::Service.chromelog:file_name,args:['--verbose']service.args<<'--disable-build-check'@driver=Selenium::WebDriver.for:chrome,service:servicewarning=/\[WARNING\]: You are using an unsupported command-line switch: --disable-build-check/expect(File.readlines(file_name).grep(warning).any?).toeqtrueendenddescribe'Special Features'doit'casts'do@driver=Selenium::WebDriver.for:chromesinks=@driver.cast_sinksunlesssinks.empty?device_name=sinks.first['name']@driver.start_cast_tab_mirroring(device_name)expect{@driver.stop_casting(device_name)}.not_toraise_exceptionendendit'gets and sets network conditions'do@driver=Selenium::WebDriver.for:chrome@driver.network_conditions={offline:false,latency:100,throughput:200}expect(@driver.network_conditions).toeq('offline'=>false,'latency'=>100,'download_throughput'=>200,'upload_throughput'=>200)endit'gets the browser logs'do@driver=Selenium::WebDriver.for:chrome@driver.navigate.to'https://www.selenium.dev/selenium/web/'sleep1logs=@driver.logs.get(:browser)expect(logs.first.message).toinclude'Failed to load resource'endit'sets permissions'do@driver=Selenium::WebDriver.for:chrome@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')).toeq('denied')expect(permission('clipboard-read')).toeq('denied')expect(permission('clipboard-write')).toeq('prompt')endenddefdriver_finderoptions=Selenium::WebDriver::Options.chrome(browser_version:'stable')service=Selenium::WebDriver::Service.chromefinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['CHROMEDRIVER_BIN']=finder.driver_pathENV['CHROME_BIN']=finder.browser_pathenddefpermission(name)@driver.execute_async_script('callback = arguments[arguments.length - 1];'\'callback(navigator.permissions.query({name: arguments[0]}));',name)['state']endend