title: “Driver specific capabilities”
weight: 2
Firefox
Define Capabilities using FirefoxOptions
FirefoxOptions
is the new way to define capabilities for the Firefox
browser and should generally be used in preference to DesiredCapabilities.
{{< code-tab >}}
{{< code-panel language=“java” >}}
FirefoxOptions options = new FirefoxOptions();
options.addPreference(“network.proxy.type”, 0);
driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“python” >}}
from selenium.webdriver.firefox.options import Options
options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)
{{< / code-panel >}}
{{< code-panel language=“csharp” >}}
var options = new FirefoxOptions();
options.Proxy.Kind = ProxyKind.Direct;
var driver = new FirefoxDriver(options);
{{< / code-panel >}}
{{< code-panel language=“ruby” >}}
require ‘selenium-webdriver’
opts = Selenium::WebDriver::Firefox::Options.new(args: [‘-headless’])
driver = Selenium::WebDriver.for(:firefox, options: opts)
{{< / code-panel >}}
{{< code-panel language=“javascript” >}}
const { Builder } = require(“selenium-webdriver”);
const firefox = require(‘selenium-webdriver/firefox’);
const options = new firefox.Options();
options.headless();
const driver = new Builder()
.forBrowser(‘firefox’)
.setFirefoxOptions(options)
.build();
{{< / code-panel >}}
{{< code-panel language=“kotlin” >}}
val options = new FirefoxOptions()
options.addPreference(“network.proxy.type”, 0)
driver = RemoteWebDriver(options)
{{< / code-panel >}}
{{< / code-tab >}}
Setting a custom profile
It is possible to create a custom profile for Firefox as demonstrated below.
{{< code-tab >}}
{{< code-panel language=“java” >}}
FirefoxProfile profile = new FirefoxProfile();
FirefoxOptions options = new FirefoxOptions();
options.setProfile(profile);
driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“python” >}}
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
options=Options()
firefox_profile = FirefoxProfile()
firefox_profile.set_preference(“javascript.enabled”, False)
options.profile = firefox_profile
{{< / code-panel >}}
{{< code-panel language=“csharp” >}}
var options = new FirefoxOptions();
var profile = new FirefoxProfile();
options.Profile = profile;
var driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“ruby” >}}
profile = Selenium::WebDriver::Firefox::Profile.new
profile[‘browser.download.dir’] = “/tmp/webdriver-downloads”
options = Selenium::WebDriver::Firefox::Options.new(profile: profile)
driver = Selenium::WebDriver.for :firefox, options: options
{{< / code-panel >}}
{{< code-panel language=“javascript” >}}
const { Builder } = require(“selenium-webdriver”);
const firefox = require(‘selenium-webdriver/firefox’);
const options = new firefox.Options();
let profile = ‘/path to custom profile’;
options.setProfile(profile);
const driver = new Builder()
.forBrowser(‘firefox’)
.setFirefoxOptions(options)
.build();
{{< / code-panel >}}
{{< code-panel language=“kotlin” >}}
val options = FirefoxOptions()
options.profile = FirefoxProfile()
driver = RemoteWebDriver(options)
{{< / code-panel >}}
{{< / code-tab >}}
Internet Explorer
fileUploadDialogTimeout
In some environments, Internet Explorer may timeout when opening the
File Upload dialog. IEDriver has a default timeout of 1000ms, but you
can increase the timeout using the fileUploadDialogTimeout capability.
{{< code-tab >}}
{{< code-panel language=“java” >}}
InternetExplorerOptions options = new InternetExplorerOptions();
options.waitForUploadDialogUpTo(Duration.ofSeconds(2));
WebDriver driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“python” >}}
from selenium import webdriver
options = webdriver.IeOptions()
options.file_upload_dialog_timeout = 2000
driver = webdriver.Ie(options=options)
Navigate to url
driver.get(“http://www.google.com”)
driver.quit()
{{< / code-panel >}}
{{< code-panel language=“csharp” >}}
var options = new InternetExplorerOptions();
options.FileUploadDialogTimeout = TimeSpan.FromMilliseconds(2000);
var driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“ruby” >}}
options = Selenium::WebDriver::IE::Options.new
options.file_upload_dialog_timeout = 2000
driver = Selenium::WebDriver.for(:ie, options: options)
{{< / code-panel >}}
{{< code-panel language=“javascript” >}}
const ie = require(‘selenium-webdriver/ie’);
let options = new ie.Options().fileUploadDialogTimeout(2000);
let driver = await Builder()
.setIeOptions(options)
.build();
{{< / code-panel >}}
{{< code-panel language=“kotlin” >}}
val options = InternetExplorerOptions()
options.waitForUploadDialogUpTo(Duration.ofSeconds(2))
val driver = RemoteWebDriver(options)
{{< / code-panel >}}
{{< / code-tab >}}
ensureCleanSession
When set to true
, this capability clears the Cache,
Browser History and Cookies for all running instances
of InternetExplorer including those started manually
or by the driver. By default, it is set to false
.
Using this capability will cause performance drop while
launching the browser, as the driver will wait until the cache
gets cleared before launching the IE browser.
This capability accepts a Boolean value as parameter.
{{< code-tab >}}
{{< code-panel language=“java” >}}
InternetExplorerOptions options = new InternetExplorerOptions();
options.destructivelyEnsureCleanSession();
WebDriver driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“python” >}}
from selenium import webdriver
options = webdriver.IeOptions()
options.ensure_clean_session = True
driver = webdriver.Ie(options=options)
Navigate to url
driver.get(“http://www.google.com”)
driver.quit()
{{< / code-panel >}}
{{< code-panel language=“csharp” >}}
var options = new InternetExplorerOptions();
options.EnsureCleanSession = true;
var driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“ruby” >}}
options = Selenium::WebDriver::IE::Options.new
options.ensure_clean_session = true
driver = Selenium::WebDriver.for(:ie, options: options)
{{< / code-panel >}}
{{< code-panel language=“javascript” >}}
const ie = require(‘selenium-webdriver/ie’);
let options = new ie.Options().ensureCleanSession(true);
let driver = await Builder()
.setIeOptions(options)
.build();
{{< / code-panel >}}
{{< code-panel language=“kotlin” >}}
val options = InternetExplorerOptions()
options.destructivelyEnsureCleanSession()
val driver = RemoteWebDriver(options)
{{< / code-panel >}}
{{< / code-tab >}}
ignoreZoomSetting
InternetExplorer driver expects the browser zoom level to be 100%,
else the driver will throw an exception. This default behaviour
can be disabled by setting the ignoreZoomSetting to true.
This capability accepts a Boolean value as parameter.
{{< code-tab >}}
{{< code-panel language=“java” >}}
InternetExplorerOptions options = new InternetExplorerOptions();
options.ignoreZoomSettings();
WebDriver driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“python” >}}
from selenium import webdriver
options = webdriver.IeOptions()
options.ignore_zoom_level = True
driver = webdriver.Ie(options=options)
Navigate to url
driver.get(“http://www.google.com”)
driver.quit()
{{< / code-panel >}}
{{< code-panel language=“csharp” >}}
var options = new InternetExplorerOptions();
options.IgnoreZoomLevel = true;
var driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“ruby” >}}
options = Selenium::WebDriver::IE::Options.new
options.ignore_zoom_level = true
driver = Selenium::WebDriver.for(:ie, options: options)
{{< / code-panel >}}
{{< code-panel language=“javascript” >}}
const ie = require(‘selenium-webdriver/ie’);
let options = new ie.Options().ignoreZoomSetting(true);
let driver = await Builder()
.setIeOptions(options)
.build();
{{< / code-panel >}}
{{< code-panel language=“kotlin” >}}
val options = InternetExplorerOptions()
options.ignoreZoomSettings()
val driver = RemoteWebDriver(options)
{{< / code-panel >}}
{{< / code-tab >}}
ignoreProtectedModeSettings
Whether to skip the Protected Mode check while launching
a new IE session.
If not set and Protected Mode settings are not same for
all zones, an exception will be thrown by the driver.
If capability is set to true
, tests may
become flaky, unresponsive, or browsers may hang.
However, this is still by far a second-best choice,
and the first choice should always be to actually
set the Protected Mode settings of each zone manually.
If a user is using this property,
only a “best effort” at support will be given.
This capability accepts a Boolean value as parameter.
{{< code-tab >}}
{{< code-panel language=“java” >}}
InternetExplorerOptions options = new InternetExplorerOptions();
options.introduceFlakinessByIgnoringSecurityDomains();
WebDriver driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“python” >}}
from selenium import webdriver
options = webdriver.IeOptions()
options.ignore_protected_mode_settings = True
driver = webdriver.Ie(options=options)
Navigate to url
driver.get(“http://www.google.com”)
driver.quit()
{{< / code-panel >}}
{{< code-panel language=“csharp” >}}
var options = new InternetExplorerOptions();
options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
var driver = new RemoteWebDriver(options);
{{< / code-panel >}}
{{< code-panel language=“ruby” >}}
options = Selenium::WebDriver::IE::Options.new
options.ignore_protected_mode_settings = true
driver = Selenium::WebDriver.for(:ie, options: options)
{{< / code-panel >}}
{{< code-panel language=“javascript” >}}
const ie = require(‘selenium-webdriver/ie’);
let options = new ie.Options().introduceFlakinessByIgnoringProtectedModeSettings(true);
let driver = await Builder()
.setIeOptions(options)
.build();
{{< / code-panel >}}
{{< code-panel language=“kotlin” >}}
val options = InternetExplorerOptions()
options.introduceFlakinessByIgnoringSecurityDomains()
val driver = RemoteWebDriver(options)
{{< / code-panel >}}
{{< / code-tab >}}
silent
When set to true
, this capability suppresses the
diagnostic output of the IEDriverServer.
This capability accepts a Boolean value as parameter.
{{< code-tab >}}
{{< code-panel language=“java” >}}
InternetExplorerOptions options = new InternetExplorerOptions();
options.setCapability(“silent”, true);
WebDriver driver = new InternetExplorerDriver(options);
{{< / code-panel >}}
{{< code-panel language=“python” >}}
from selenium import webdriver
options = webdriver.IeOptions()
options.set_capability(“silent”, True)
driver = webdriver.Ie(options=options)
Navigate to url
driver.get(“http://www.google.com”)
driver.quit()
{{< / code-panel >}}
{{< code-panel language=“csharp” >}}
InternetExplorerOptions options = new InternetExplorerOptions();
options.AddAdditionalInternetExplorerOption(“silent”, true);
IWebDriver driver = new InternetExplorerDriver(options);
{{< / code-panel >}}
{{< code-panel language=“ruby” >}}
Please raise a PR to add code sample
{{< / code-panel >}}
{{< code-panel language=“javascript” >}}
const {Builder,By, Capabilities} = require(‘selenium-webdriver’);
let caps = Capabilities.ie();
caps.set(‘silent’, true);
(async function example() {
let driver = await new Builder()
.forBrowser(‘internet explorer’)
.withCapabilities(caps)
.build();
try {
await driver.get(‘http://www.google.com/ncr’);
}
finally {
await driver.quit();
}
})();
{{< / code-panel >}}
{{< code-panel language=“kotlin” >}}
import org.openqa.selenium.Capabilities
import org.openqa.selenium.ie.InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerOptions
fun main() {
val options = InternetExplorerOptions()
options.setCapability(“silent”, true)
val driver = InternetExplorerDriver(options)
try {
driver.get(“https://google.com/ncr”)
val caps = driver.getCapabilities()
println(caps)
} finally {
driver.quit()
}
}
{{< / code-panel >}}
{{< / code-tab >}}
IE Command-Line Options
Internet Explorer includes several command-line options
that enable you to troubleshoot and configure the browser.
The following describes few supported command-line options
-
-private : Used to start IE in private browsing mode. This works for IE 8 and later versions.
-
-k : Starts Internet Explorer in kiosk mode.
The browser opens in a maximized window that does not display the address bar, the navigation buttons, or the status bar. -
-extoff : Starts IE in no add-on mode.
This option specifically used to troubleshoot problems with browser add-ons. Works in IE 7 and later versions.
Note: forceCreateProcessApi should to enabled in-order for command line arguments to work.
{{< code-tab >}}
{{< code-panel language=“java” >}}
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerOptions;
public class ieTest {
public static void main(String args) {
InternetExplorerOptions options = new InternetExplorerOptions();
options.useCreateProcessApiToLaunchIe();
options.addCommandSwitches(“-k”);
InternetExplorerDriver driver = new InternetExplorerDriver(options);
try {
driver.get(“https://google.com/ncr”);
Capabilities caps = driver.getCapabilities();
System.out.println(caps);
} finally {
driver.quit();
}
}
}
{{< / code-panel >}}
{{< code-panel language=“python” >}}
from selenium import webdriver
options = webdriver.IeOptions()
options.add_argument(‘-private’)
options.force_create_process_api = True
driver = webdriver.Ie(options=options)
Navigate to url
driver.get(“http://www.google.com”)
driver.quit()
{{< / code-panel >}}
{{< code-panel language=“csharp” >}}
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
namespace ieTest {
class Program {
static void Main(string args) {
InternetExplorerOptions options = new InternetExplorerOptions();
options.ForceCreateProcessApi = true;
options.BrowserCommandLineArguments = “-k”;
IWebDriver driver = new InternetExplorerDriver(options);
driver.Url = “https://google.com/ncr”;
}
}
}
{{< / code-panel >}}
{{< code-panel language=“ruby” >}}
require ‘selenium-webdriver’
options = Selenium::WebDriver::IE::Options.new
options.force_create_process_api = true
options.add_argument(‘-k’)
driver = Selenium::WebDriver.for(:ie, options: options)
begin
Navigate to URL
driver.get ‘https://google.com’
puts(driver.capabilities.to_json)
ensure
driver.quit
end
{{< / code-panel >}}
{{< code-panel language=“javascript” >}}
const ie = require(‘selenium-webdriver/ie’);
let options = new ie.Options();
options.addBrowserCommandSwitches(‘-k’);
options.addBrowserCommandSwitches(‘-private’);
options.forceCreateProcessApi(true);
driver = await env.builder()
.setIeOptions(options)
.build();
{{< / code-panel >}}
{{< code-panel language=“kotlin” >}}
import org.openqa.selenium.Capabilities
import org.openqa.selenium.ie.InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerOptions
fun main() {
val options = InternetExplorerOptions()
options.useCreateProcessApiToLaunchIe()
options.addCommandSwitches(“-k”)
val driver = InternetExplorerDriver(options)
try {
driver.get(“https://google.com/ncr”)
val caps = driver.getCapabilities()
println(caps)
} finally {
driver.quit()
}
}
{{< / code-panel >}}
{{< / code-tab >}}
forceCreateProcessApi
Forces launching Internet Explorer
using the CreateProcess API. The default value is false.
For IE 8 and above, this option requires the
“TabProcGrowth” registry value to be set to 0.
{{< code-tab >}}
{{< code-panel language=“java” >}}
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerOptions;
public class ieTest {
public static void main(String args) {
InternetExplorerOptions options = new InternetExplorerOptions();
options.useCreateProcessApiToLaunchIe();
InternetExplorerDriver driver = new InternetExplorerDriver(options);
try {
driver.get(“https://google.com/ncr”);
Capabilities caps = driver.getCapabilities();
System.out.println(caps);
} finally {
driver.quit();
}
}
}
{{< / code-panel >}}
{{< code-panel language=“python” >}}
from selenium import webdriver
options = webdriver.IeOptions()
options.force_create_process_api = True
driver = webdriver.Ie(options=options)
Navigate to url
driver.get(“http://www.google.com”)
driver.quit()
{{< / code-panel >}}
{{< code-panel language=“csharp” >}}
using System;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
namespace ieTest {
class Program {
static void Main(string args) {
InternetExplorerOptions options = new InternetExplorerOptions();
options.ForceCreateProcessApi = true;
IWebDriver driver = new InternetExplorerDriver(options);
driver.Url = “https://google.com/ncr”;
}
}
}
{{< / code-panel >}}
{{< code-panel language=“ruby” >}}
require ‘selenium-webdriver’
options = Selenium::WebDriver::IE::Options.new
options.force_create_process_api = true
driver = Selenium::WebDriver.for(:ie, options: options)
begin
Navigate to URL
driver.get ‘https://google.com’
puts(driver.capabilities.to_json)
ensure
driver.quit
end
{{< / code-panel >}}
{{< code-panel language=“javascript” >}}
const ie = require(‘selenium-webdriver/ie’);
let options = new ie.Options();
options.forceCreateProcessApi(true);
driver = await env.builder()
.setIeOptions(options)
.build();
{{< / code-panel >}}
{{< code-panel language=“kotlin” >}}
import org.openqa.selenium.Capabilities
import org.openqa.selenium.ie.InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerOptions
fun main() {
val options = InternetExplorerOptions()
options.useCreateProcessApiToLaunchIe()
val driver = InternetExplorerDriver(options)
try {
driver.get(“https://google.com/ncr”)
val caps = driver.getCapabilities()
println(caps)
} finally {
driver.quit()
}
}
{{< / code-panel >}}
{{< / code-tab >}}