Tune in for the Selenium Community Live scheduled for April 25th, 2025.
Join us!
Firefox specific functionality
These are capabilities and features specific to Mozilla Firefox browsers.
Selenium 4 requires Firefox 78 or greater. It is recommended to always use the latest version of geckodriver.
Options
Capabilities common to all browsers are described on the Options page.
Capabilities unique to Firefox can be found at Mozilla’s page for firefoxOptions
Starting a Firefox session with basic defined options looks like this:
3538
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;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" ... "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);driver.quit();}}
importsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['–log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['–log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['–log-no-truncate','–log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' … 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['–profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
<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_firefox.py#L10-L11" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
3336
Show full example
usingSystem;usingSystem.IO;usingSystem.Linq;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.Firefox;namespaceSeleniumDocs.Browsers{ [TestClass]publicclassFirefoxTest{privateFirefoxDriverdriver;privatestring_logLocation;privatestring_tempPath; [TestCleanup]publicvoidCleanup(){if(_logLocation!=null&&File.Exists(_logLocation)){File.Delete(_logLocation);}if(_tempPath!=null&&File.Exists(_tempPath)){File.Delete(_tempPath);}driver.Quit();} [TestMethod]publicvoidBasicOptions(){varoptions=newFirefoxOptions();driver=newFirefoxDriver(options);} [TestMethod]publicvoidArguments(){varoptions=newFirefoxOptions();options.AddArgument("-headless");driver=newFirefoxDriver(options);} [TestMethod]publicvoidSetBinary(){varoptions=newFirefoxOptions();options.BinaryLocation=GetFirefoxLocation();driver=newFirefoxDriver(options);} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToFile(){varservice=FirefoxDriverService.CreateDefaultService();//service.LogFile = _logLocationdriver=newFirefoxDriver(service);varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("geckodriver INFO Listening on")));} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToConsole(){varstringWriter=newStringWriter();varoriginalOutput=Console.Out;Console.SetOut(stringWriter);varservice=FirefoxDriverService.CreateDefaultService();//service.LogToConsole = true;driver=newFirefoxDriver(service);Assert.IsTrue(stringWriter.ToString().Contains("geckodriver INFO Listening on"));Console.SetOut(originalOutput);stringWriter.Dispose();} [TestMethod] [Ignore("You can set it, just can't see it")]publicvoidLogsLevel(){varservice=FirefoxDriverService.CreateDefaultService();//service.LogFile = _logLocationservice.LogLevel=FirefoxDriverLogLevel.Debug;driver=newFirefoxDriver(service);varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("Marionette\tDEBUG")));} [TestMethod] [Ignore("Not implemented")]publicvoidStopsTruncatingLogs(){varservice=FirefoxDriverService.CreateDefaultService();//service.TruncateLogs = false;service.LogLevel=FirefoxDriverLogLevel.Debug;driver=newFirefoxDriver(service);varlines=File.ReadLines(GetLogLocation());Assert.IsNull(lines.FirstOrDefault(line=>line.Contains(" ... ")));} [TestMethod] [Ignore("Not implemented")]publicvoidSetProfileLocation(){varservice=FirefoxDriverService.CreateDefaultService();// service.ProfileRoot = GetTempDirectory();driver=newFirefoxDriver(service);stringprofile=(string)driver.Capabilities.GetCapability("moz:profile");string[]directories=profile.Split("/");vardirName=directories.Last();Assert.AreEqual(GetTempDirectory()+"/"+dirName,profile);} [TestMethod]publicvoidInstallAddon(){SetWaitingDriver();stringbaseDir=AppDomain.CurrentDomain.BaseDirectory;stringextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.xpi");driver.InstallAddOnFromFile(Path.GetFullPath(extensionFilePath));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]publicvoidUnInstallAddon(){driver=newFirefoxDriver();stringbaseDir=AppDomain.CurrentDomain.BaseDirectory;stringextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.xpi");stringextensionId=driver.InstallAddOnFromFile(Path.GetFullPath(extensionFilePath));driver.UninstallAddOn(extensionId);driver.Url="https://www.selenium.dev/selenium/web/blank.html";Assert.AreEqual(driver.FindElements(By.Id("webextensions-selenium-example")).Count,0);} [TestMethod]publicvoidInstallUnsignedAddon(){SetWaitingDriver();stringbaseDir=AppDomain.CurrentDomain.BaseDirectory;stringextensionDirPath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example/");driver.InstallAddOnFromDirectory(Path.GetFullPath(extensionDirPath),true);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);}privatestringGetLogLocation(){if(_logLocation!=null&&!File.Exists(_logLocation)){_logLocation=Path.GetTempFileName();}return_logLocation;}privatestringGetTempDirectory(){if(_tempPath!=null&&!File.Exists(_tempPath)){_tempPath=Path.GetTempPath();}return_tempPath;}privatevoidSetWaitingDriver(){driver=newFirefoxDriver();driver.Manage().Timeouts().ImplicitWait=TimeSpan.FromSeconds(2);}privatestaticstringGetFirefoxLocation(){varoptions=newFirefoxOptions(){BrowserVersion="stable"};returnnewDriverFinder(options).GetBrowserPath();}}}
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
The args parameter is for a list of Command line switches used when starting the browser. Commonly used args include -headless and "-profile", "/path/to/profile"
Add an argument to options:
4345
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;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" ... "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);driver.quit();}}
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
const{Browser,By,Builder}=require('selenium-webdriver');constFirefox=require('selenium-webdriver/firefox');constoptions=newFirefox.Options();constpath=require('path');constassert=require("assert");describe('Should be able to Test Command line arguments',function(){it('headless',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.FIREFOX).setFirefoxOptions(options.addArguments('--headless')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Should be able to add extension',asyncfunction(){constxpiPath=path.resolve('./test/resources/extensions/selenium-example.xpi')letdriver=newBuilder().forBrowser(Browser.FIREFOX).build()letid=awaitdriver.installAddon(xpiPath);awaitdriver.uninstallAddon(id);awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');constele=awaitdriver.findElements(By.id("webextensions-selenium-example"));assert.equal(ele.length,0);awaitdriver.quit();});it('Should be able to install unsigned addon',asyncfunction(){constxpiPath=path.resolve('./test/resources/extensions/selenium-example')letdriver=newBuilder().forBrowser(Browser.FIREFOX).build()letid=awaitdriver.installAddon(xpiPath,true);awaitdriver.uninstallAddon(id);awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');constele=awaitdriver.findElements(By.id("webextensions-selenium-example"));assert.equal(ele.length,0);awaitdriver.quit();});});
The binary parameter takes the path of an alternate location of browser to use. For example, with this parameter you can
use geckodriver to drive Firefox Nightly instead of the production version when both are present on your computer.
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;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" ... "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);driver.quit();}}
importsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['–log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['–log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['–log-no-truncate','–log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' … 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['–profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
<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_firefox.py#L28" target="_blank">
<i class="fas fa-external-link-alt pl-2"></i>
<strong>View full example on GitHub</strong>
</a>
</div>
5254
Show full example
usingSystem;usingSystem.IO;usingSystem.Linq;usingMicrosoft.VisualStudio.TestTools.UnitTesting;usingOpenQA.Selenium;usingOpenQA.Selenium.Firefox;namespaceSeleniumDocs.Browsers{ [TestClass]publicclassFirefoxTest{privateFirefoxDriverdriver;privatestring_logLocation;privatestring_tempPath; [TestCleanup]publicvoidCleanup(){if(_logLocation!=null&&File.Exists(_logLocation)){File.Delete(_logLocation);}if(_tempPath!=null&&File.Exists(_tempPath)){File.Delete(_tempPath);}driver.Quit();} [TestMethod]publicvoidBasicOptions(){varoptions=newFirefoxOptions();driver=newFirefoxDriver(options);} [TestMethod]publicvoidArguments(){varoptions=newFirefoxOptions();options.AddArgument("-headless");driver=newFirefoxDriver(options);} [TestMethod]publicvoidSetBinary(){varoptions=newFirefoxOptions();options.BinaryLocation=GetFirefoxLocation();driver=newFirefoxDriver(options);} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToFile(){varservice=FirefoxDriverService.CreateDefaultService();//service.LogFile = _logLocationdriver=newFirefoxDriver(service);varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("geckodriver INFO Listening on")));} [TestMethod] [Ignore("Not implemented")]publicvoidLogsToConsole(){varstringWriter=newStringWriter();varoriginalOutput=Console.Out;Console.SetOut(stringWriter);varservice=FirefoxDriverService.CreateDefaultService();//service.LogToConsole = true;driver=newFirefoxDriver(service);Assert.IsTrue(stringWriter.ToString().Contains("geckodriver INFO Listening on"));Console.SetOut(originalOutput);stringWriter.Dispose();} [TestMethod] [Ignore("You can set it, just can't see it")]publicvoidLogsLevel(){varservice=FirefoxDriverService.CreateDefaultService();//service.LogFile = _logLocationservice.LogLevel=FirefoxDriverLogLevel.Debug;driver=newFirefoxDriver(service);varlines=File.ReadLines(GetLogLocation());Assert.IsNotNull(lines.FirstOrDefault(line=>line.Contains("Marionette\tDEBUG")));} [TestMethod] [Ignore("Not implemented")]publicvoidStopsTruncatingLogs(){varservice=FirefoxDriverService.CreateDefaultService();//service.TruncateLogs = false;service.LogLevel=FirefoxDriverLogLevel.Debug;driver=newFirefoxDriver(service);varlines=File.ReadLines(GetLogLocation());Assert.IsNull(lines.FirstOrDefault(line=>line.Contains(" ... ")));} [TestMethod] [Ignore("Not implemented")]publicvoidSetProfileLocation(){varservice=FirefoxDriverService.CreateDefaultService();// service.ProfileRoot = GetTempDirectory();driver=newFirefoxDriver(service);stringprofile=(string)driver.Capabilities.GetCapability("moz:profile");string[]directories=profile.Split("/");vardirName=directories.Last();Assert.AreEqual(GetTempDirectory()+"/"+dirName,profile);} [TestMethod]publicvoidInstallAddon(){SetWaitingDriver();stringbaseDir=AppDomain.CurrentDomain.BaseDirectory;stringextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.xpi");driver.InstallAddOnFromFile(Path.GetFullPath(extensionFilePath));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]publicvoidUnInstallAddon(){driver=newFirefoxDriver();stringbaseDir=AppDomain.CurrentDomain.BaseDirectory;stringextensionFilePath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example.xpi");stringextensionId=driver.InstallAddOnFromFile(Path.GetFullPath(extensionFilePath));driver.UninstallAddOn(extensionId);driver.Url="https://www.selenium.dev/selenium/web/blank.html";Assert.AreEqual(driver.FindElements(By.Id("webextensions-selenium-example")).Count,0);} [TestMethod]publicvoidInstallUnsignedAddon(){SetWaitingDriver();stringbaseDir=AppDomain.CurrentDomain.BaseDirectory;stringextensionDirPath=Path.Combine(baseDir,"../../../Extensions/webextensions-selenium-example/");driver.InstallAddOnFromDirectory(Path.GetFullPath(extensionDirPath),true);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);}privatestringGetLogLocation(){if(_logLocation!=null&&!File.Exists(_logLocation)){_logLocation=Path.GetTempFileName();}return_logLocation;}privatestringGetTempDirectory(){if(_tempPath!=null&&!File.Exists(_tempPath)){_tempPath=Path.GetTempPath();}return_tempPath;}privatevoidSetWaitingDriver(){driver=newFirefoxDriver();driver.Manage().Timeouts().ImplicitWait=TimeSpan.FromSeconds(2);}privatestaticstringGetFirefoxLocation(){varoptions=newFirefoxOptions(){BrowserVersion="stable"};returnnewDriverFinder(options).GetBrowserPath();}}}
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
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;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" ... "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);driver.quit();}}
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
const{Builder}=require("selenium-webdriver");constfirefox=require('selenium-webdriver/firefox');constoptions=newfirefox.Options();letprofile='/path to custom profile';options.setProfile(profile);constdriver=newBuilder().forBrowser('firefox').setFirefoxOptions(options).build();
Note: Whether you create an empty FirefoxProfile or point it to the directory of your own profile, Selenium
will create a temporary directory to store either the data of the new profile or a copy of your existing one. Every
time you run your program, a different temporary directory will be created. These directories are not cleaned up
explicitly by Selenium, they should eventually get removed by the operating system. However, if you want to remove
the copy manually (e.g. if your profile is large in size), the path of the copy is exposed by the FirefoxProfile
object. Check the language specific implementation to see how to retrieve that location.
If you want to use an existing Firefox profile, you can pass in the path to that profile. Please refer to the official
Firefox documentation
for instructions on how to find the directory of your profile.
Service
Service settings common to all browsers are described on the Service page.
Log output
Getting driver logs can be helpful for debugging various 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;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" … "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);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/FirefoxTest.java#L62-L63" 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: GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY Property value: String representing path to log file
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" … "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);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/FirefoxTest.java#L76-L77" 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: GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY Property value: DriverService.LOG_STDOUT or DriverService.LOG_STDERR
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" … "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);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/FirefoxTest.java#L90-L91" 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: GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY Property value: String representation of FirefoxDriverLogLevel enum
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
The driver logs everything that gets sent to it, including string representations of large binaries, so
Firefox truncates lines by default. To turn off truncation:
importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" … "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);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/FirefoxTest.java#L106-L107" 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: GeckoDriverService.GECKO_DRIVER_LOG_NO_TRUNCATE Property value: "true" or "false"
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
The default directory for profiles is the system temporary directory. If you do not have access to that directory,
or want profiles to be created some place specific, you can change the profile root directory:
importdev.selenium.BaseTest;importjava.io.File;importjava.io.IOException;importjava.io.PrintStream;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" … "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);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/FirefoxTest.java#L118-L119" 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: GeckoDriverService.GECKO_DRIVER_PROFILE_ROOT Property value: String representing path to profile root directory
8082
Show full example
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
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;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" ... "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);driver.quit();}}
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
const{Browser,By,Builder}=require('selenium-webdriver');constFirefox=require('selenium-webdriver/firefox');constoptions=newFirefox.Options();constpath=require('path');constassert=require("assert");describe('Should be able to Test Command line arguments',function(){it('headless',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.FIREFOX).setFirefoxOptions(options.addArguments('--headless')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Should be able to add extension',asyncfunction(){constxpiPath=path.resolve('./test/resources/extensions/selenium-example.xpi')letdriver=newBuilder().forBrowser(Browser.FIREFOX).build()letid=awaitdriver.installAddon(xpiPath);awaitdriver.uninstallAddon(id);awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');constele=awaitdriver.findElements(By.id("webextensions-selenium-example"));assert.equal(ele.length,0);awaitdriver.quit();});it('Should be able to install unsigned addon',asyncfunction(){constxpiPath=path.resolve('./test/resources/extensions/selenium-example')letdriver=newBuilder().forBrowser(Browser.FIREFOX).build()letid=awaitdriver.installAddon(xpiPath,true);awaitdriver.uninstallAddon(id);awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');constele=awaitdriver.findElements(By.id("webextensions-selenium-example"));assert.equal(ele.length,0);awaitdriver.quit();});});
Uninstalling an addon requires knowing its id. The id can be obtained from the return value when installing the add-on.
147149
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;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" ... "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);driver.quit();}}
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
const{Browser,By,Builder}=require('selenium-webdriver');constFirefox=require('selenium-webdriver/firefox');constoptions=newFirefox.Options();constpath=require('path');constassert=require("assert");describe('Should be able to Test Command line arguments',function(){it('headless',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.FIREFOX).setFirefoxOptions(options.addArguments('--headless')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Should be able to add extension',asyncfunction(){constxpiPath=path.resolve('./test/resources/extensions/selenium-example.xpi')letdriver=newBuilder().forBrowser(Browser.FIREFOX).build()letid=awaitdriver.installAddon(xpiPath);awaitdriver.uninstallAddon(id);awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');constele=awaitdriver.findElements(By.id("webextensions-selenium-example"));assert.equal(ele.length,0);awaitdriver.quit();});it('Should be able to install unsigned addon',asyncfunction(){constxpiPath=path.resolve('./test/resources/extensions/selenium-example')letdriver=newBuilder().forBrowser(Browser.FIREFOX).build()letid=awaitdriver.installAddon(xpiPath,true);awaitdriver.uninstallAddon(id);awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');constele=awaitdriver.findElements(By.id("webextensions-selenium-example"));assert.equal(ele.length,0);awaitdriver.quit();});});
When working with an unfinished or unpublished extension, it will likely not be signed. As such, it can only
be installed as “temporary.” This can be done by passing in either a zip file or a directory, here’s an
example with a directory:
159161
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;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" ... "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);driver.quit();}}
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
const{Browser,By,Builder}=require('selenium-webdriver');constFirefox=require('selenium-webdriver/firefox');constoptions=newFirefox.Options();constpath=require('path');constassert=require("assert");describe('Should be able to Test Command line arguments',function(){it('headless',asyncfunction(){letdriver=newBuilder().forBrowser(Browser.FIREFOX).setFirefoxOptions(options.addArguments('--headless')).build();awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');awaitdriver.quit();});it('Should be able to add extension',asyncfunction(){constxpiPath=path.resolve('./test/resources/extensions/selenium-example.xpi')letdriver=newBuilder().forBrowser(Browser.FIREFOX).build()letid=awaitdriver.installAddon(xpiPath);awaitdriver.uninstallAddon(id);awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');constele=awaitdriver.findElements(By.id("webextensions-selenium-example"));assert.equal(ele.length,0);awaitdriver.quit();});it('Should be able to install unsigned addon',asyncfunction(){constxpiPath=path.resolve('./test/resources/extensions/selenium-example')letdriver=newBuilder().forBrowser(Browser.FIREFOX).build()letid=awaitdriver.installAddon(xpiPath,true);awaitdriver.uninstallAddon(id);awaitdriver.get('https://www.selenium.dev/selenium/web/blank.html');constele=awaitdriver.findElements(By.id("webextensions-selenium-example"));assert.equal(ele.length,0);awaitdriver.quit();});});
The following examples are for local webdrivers. For remote webdrivers,
please refer to the
Remote WebDriver page.
180182
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;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" ... "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);driver.quit();}}
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend
The following examples are for local webdrivers. For remote webdrivers,
please refer to the
Remote WebDriver page.
196199
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;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.condition.DisabledOnOs;importorg.junit.jupiter.api.condition.OS;importorg.openqa.selenium.By;importorg.openqa.selenium.OutputType;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.firefox.*;importorg.openqa.selenium.remote.service.DriverFinder;publicclassFirefoxTestextendsBaseTest{privateFirefoxDriverdriver;@AfterEachpublicvoidclearProperties(){System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY);System.clearProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY);driver.quit();}@TestpublicvoidbasicOptions(){FirefoxOptionsoptions=newFirefoxOptions();driver=newFirefoxDriver(options);}@Testpublicvoidarguments(){FirefoxOptionsoptions=newFirefoxOptions();options.addArguments("-headless");driver=newFirefoxDriver(options);}@Test@DisabledOnOs(OS.WINDOWS)publicvoidsetBrowserLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBinary(getFirefoxLocation());driver=newFirefoxDriver(options);}@TestpublicvoidlogsToFile()throwsIOException{FilelogLocation=getTempFile("logsToFile",".log");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogFile(logLocation).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsToConsole()throwsIOException{FilelogLocation=getTempFile("logsToConsole",".log");System.setOut(newPrintStream(logLocation));FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogOutput(System.out).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("geckodriver INFO Listening on"));}@TestpublicvoidlogsWithLevel()throwsIOException{FilelogLocation=getTempFile("logsWithLevel",".log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withLogLevel(FirefoxDriverLogLevel.DEBUG).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertTrue(fileContent.contains("Marionette\tDEBUG"));}@TestpublicvoidstopsTruncatingLogs()throwsIOException{FilelogLocation=getTempFile("geckodriver-","log");System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,logLocation.getAbsolutePath());System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY,FirefoxDriverLogLevel.DEBUG.toString());FirefoxDriverServiceservice=newGeckoDriverService.Builder().withTruncatedLogs(false).build();driver=newFirefoxDriver(service);StringfileContent=newString(Files.readAllBytes(logLocation.toPath()));Assertions.assertFalse(fileContent.contains(" ... "));}@TestpublicvoidsetProfileLocation(){FileprofileDirectory=getTempDirectory("profile-");FirefoxDriverServiceservice=newGeckoDriverService.Builder().withProfileRoot(profileDirectory).build();driver=newFirefoxDriver(service);Stringlocation=(String)driver.getCapabilities().getCapability("moz:profile");Assertions.assertTrue(location.contains(profileDirectory.getAbsolutePath()));}@TestpublicvoidinstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");driver.installExtension(xpiPath);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());}@TestpublicvoiduninstallAddon(){driver=startFirefoxDriver();PathxpiPath=Paths.get("src/test/resources/extensions/selenium-example.xpi");Stringid=driver.installExtension(xpiPath);driver.uninstallExtension(id);driver.get("https://www.selenium.dev/selenium/web/blank.html");Assertions.assertEquals(driver.findElements(By.id("webextensions-selenium-example")).size(),0);}@TestpublicvoidinstallUnsignedAddonPath(){driver=startFirefoxDriver();Pathpath=Paths.get("src/test/resources/extensions/selenium-example");driver.installExtension(path,true);driver.get("https://www.selenium.dev/selenium/web/blank.html");WebElementinjected=getLocatedElement(driver,By.id("webextensions-selenium-example"));Assertions.assertEquals("Content injected by webextensions-selenium-example",injected.getText());}privatePathgetFirefoxLocation(){FirefoxOptionsoptions=newFirefoxOptions();options.setBrowserVersion("stable");DriverFinderfinder=newDriverFinder(GeckoDriverService.createDefaultService(),options);returnPath.of(finder.getBrowserPath());}@TestpublicvoidfullPageScreenshot()throwsException{driver=startFirefoxDriver();driver.get("https://www.selenium.dev");Filescreenshot=driver.getFullPageScreenshotAs(OutputType.FILE);FiletargetFile=newFile("full_page_screenshot.png");Files.move(screenshot.toPath(),targetFile.toPath());// Verify the screenshot file existsAssertions.assertTrue(targetFile.exists(),"The full page screenshot file should exist");Files.deleteIfExists(targetFile.toPath());driver.quit();}@TestpublicvoidsetContext(){driver=startFirefoxDriver();((HasContext)driver).setContext(FirefoxCommandContext.CHROME);driver.executeScript("console.log('Inside Chrome context');");// Verify the context is back to "content"Assertions.assertEquals(FirefoxCommandContext.CHROME,((HasContext)driver).getContext(),"The context should be 'chrome'");driver.quit();}@TestpublicvoidfirefoxProfile(){FirefoxProfileprofile=newFirefoxProfile();FirefoxOptionsoptions=newFirefoxOptions();profile.setPreference("javascript.enabled","False");options.setProfile(profile);driver=newFirefoxDriver(options);driver.quit();}}
importosimportsubprocessimportsysimportpytestfromseleniumimportwebdriverdeftest_basic_options():options=webdriver.FirefoxOptions()driver=webdriver.Firefox(options=options)driver.quit()deftest_arguments():options=webdriver.FirefoxOptions()options.add_argument("-headless")driver=webdriver.Firefox(options=options)driver.quit()deftest_set_browser_location(firefox_bin):options=webdriver.FirefoxOptions()options.binary_location=firefox_bindriver=webdriver.Firefox(options=options)driver.quit()deftest_log_to_file(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)driver.get("https://www.selenium.dev")withopen(log_path,'r')asfp:assert"geckodriver INFO Listening on"infp.readline()driver.quit()deftest_log_to_stdout(capfd):service=webdriver.FirefoxService(log_output=subprocess.STDOUT)driver=webdriver.Firefox(service=service)out,err=capfd.readouterr()assert"geckodriver INFO Listening on"inoutdriver.quit()deftest_log_level(log_path):service=webdriver.FirefoxService(log_output=log_path,service_args=['--log','debug'])driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert'\tDEBUG'inf.read()driver.quit()deftest_log_truncation(log_path):service=webdriver.FirefoxService(service_args=['--log-no-truncate','--log','debug'],log_output=log_path)driver=webdriver.Firefox(service=service)withopen(log_path,'r')asf:assert' ... 'notinf.read()driver.quit()deftest_profile_location(temp_dir):service=webdriver.FirefoxService(service_args=['--profile-root',temp_dir])driver=webdriver.Firefox(service=service)profile_name=driver.capabilities.get('moz:profile').replace('\\','/').split('/')[-1]assertprofile_nameinos.listdir(temp_dir)driver.quit()deftest_install_addon(firefox_driver,addon_path_xpi):driver=firefox_driverdriver.install_addon(addon_path_xpi)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_uninstall_addon(firefox_driver,addon_path_xpi):driver=firefox_driverid=driver.install_addon(addon_path_xpi)driver.uninstall_addon(id)driver.get("https://www.selenium.dev/selenium/web/blank.html")assertlen(driver.find_elements(webdriver.common.by.By.ID,"webextensions-selenium-example"))==0deftest_install_unsigned_addon_directory(firefox_driver,addon_path_dir):driver=firefox_driverdriver.install_addon(addon_path_dir,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_install_unsigned_addon_directory_slash(firefox_driver,addon_path_dir_slash):driver=firefox_driverdriver.install_addon(addon_path_dir_slash,temporary=True)driver.get("https://www.selenium.dev/selenium/web/blank.html")injected=driver.find_element(webdriver.common.by.By.ID,"webextensions-selenium-example")assertinjected.text=="Content injected by webextensions-selenium-example"deftest_full_page_screenshot(firefox_driver):driver=firefox_driverdriver.get("https://www.selenium.dev")driver.save_full_page_screenshot("full_page_screenshot.png")assertos.path.exists("full_page_screenshot.png")driver.quit()deftest_set_context(firefox_driver):driver=firefox_driverwithdriver.context(driver.CONTEXT_CHROME):driver.execute_script("console.log('Inside Chrome context');")# Check if the context is back to contentassertdriver.execute("GET_CONTEXT")["value"]=="content"deftest_firefox_profile():fromselenium.webdriver.firefox.optionsimportOptionsfromselenium.webdriver.firefox.firefox_profileimportFirefoxProfileoptions=Options()firefox_profile=FirefoxProfile()firefox_profile.set_preference("javascript.enabled",False)options.profile=firefox_profiledriver=webdriver.Firefox(options=options)driver.quit()
# frozen_string_literal: truerequire'spec_helper'RSpec.describe'Firefox'dodescribe'Options'dolet(:firefox_location){driver_finder&&ENV.fetch('FIREFOX_BIN',nil)}it'basic options'dooptions=Selenium::WebDriver::Options.firefox@driver=Selenium::WebDriver.for:firefox,options:optionsendit'add arguments'dooptions=Selenium::WebDriver::Options.firefoxoptions.args<<'-headless'@driver=Selenium::WebDriver.for:firefox,options:optionsendit'sets location of binary'dooptions=Selenium::WebDriver::Options.firefoxoptions.binary=firefox_location@driver=Selenium::WebDriver.for:firefox,options:optionsendenddescribe'Service'dolet(:file_name){Tempfile.new('geckodriver').path}let(:root_directory){Dir.mktmpdir}afterdoFileUtils.rm_f(file_name)FileUtils.rm_rf(root_directory)endit'logs to file'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_name@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).first).toinclude("geckodriver\tINFO\tListening on")endit'logs to console'doservice=Selenium::WebDriver::Service.firefoxservice.log=$stdoutexpect{@driver=Selenium::WebDriver.for:firefox,service:service}.tooutput(/geckodriver INFO Listening on/).to_stdout_from_any_processendit'sets log level'doservice=Selenium::WebDriver::Service.firefoxservice.log=file_nameservice.args+=%w[--log debug]@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/Marionette DEBUG/).any?).toeqtrueendit'stops truncating log lines'doservice=Selenium::WebDriver::Service.firefox(log:file_name,args:%w[--log debug])service.args<<'--log-no-truncate'@driver=Selenium::WebDriver.for:firefox,service:serviceexpect(File.readlines(file_name).grep(/ \.\.\. /).any?).toeqfalseendit'sets default profile location'doservice=Selenium::WebDriver::Service.firefoxservice.args+=['--profile-root',root_directory]@driver=Selenium::WebDriver.for:firefox,service:serviceprofile_location=Dir.new(@driver.capabilities['moz:profile'])expect(profile_location.path.gsub('\\','/')).toinclude(root_directory)endenddescribe'Features'dolet(:driver){start_firefox}it'installs addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)driver.install_addon(extension_file_path)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'uninstalls addon'doextension_file_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example.xpi',__dir__)extension_id=driver.install_addon(extension_file_path)driver.uninstall_addon(extension_id)driver.get'https://www.selenium.dev/selenium/web/blank.html'expect(driver.find_elements(id:'webextensions-selenium-example')).tobe_emptyendit'installs unsigned addon'doextension_dir_path=File.expand_path('../spec_support/extensions/webextensions-selenium-example/',__dir__)driver.install_addon(extension_dir_path,true)driver.navigate.to'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'takes full page screenshot'dodriver.navigate.to'https://www.selenium.dev/selenium/web/blank.html'Dir.mktmpdir('screenshot_test')do|dir|screenshot=driver.save_full_page_screenshot(File.join(dir,'screenshot.png'))expect(screenshot).tobe_aFileendendit'sets the context'dodriver.context='content'expect(driver.context).toeq'content'endenddescribe'Profile'doit'creates a new profile'doprofile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir']='/tmp/webdriver-downloads'options=Selenium::WebDriver::Firefox::Options.new(profile:profile)expect(options.profile).toeq(profile)endenddefdriver_finderoptions=Selenium::WebDriver::Options.firefox(browser_version:'stable')service=Selenium::WebDriver::Service.firefoxfinder=Selenium::WebDriver::DriverFinder.new(options,service)ENV['GECKODRIVER_BIN']=finder.driver_pathENV['FIREFOX_BIN']=finder.browser_pathendend