Funcionalidade específica do Firefox
Por omissão, Selenium 4 é compatível com Firefox 78 ou superior. Recomendamos que use sempre a versão mais recente do geckodriver.
Opções
Capacidades comuns a todos os navegadores estão descritas na página Opções.
Capacidades únicas ao Firefox podem ser encontradas na página da Mozilla para firefoxOptions
Este é um exemplo de como iniciar uma sessão Firefox com um conjunto de opções básicas:
Assertions.assertEquals("Content injected by webextensions-selenium-example", injected.getText());
}
driver = webdriver.Firefox(options=options)
driver.InstallAddOnFromFile(Path.GetFullPath(extensionFilePath));
@driver = Selenium::WebDriver.for :firefox, options: options
end
let options = new firefox.Options();
driver = await env.builder()
.setFirefoxOptions(options)
.build();
Alguns exemplos de uso com capacidades diferentes:
Argumentos
O parametro args
é usado para indicar uma lista de opções ao iniciar o navegador.
Opções mais frequentes incluem -headless
e "-profile", "/path/to/profile"
Adicione uma opção:
driver.uninstallExtension(id);
public void UnInstallAddon()
driver.get 'https://www.selenium.dev/selenium/web/blank.html'
let driver = await env.builder()
.setFirefoxOptions(options.addArguments('--headless'))
.build();
Iniciar navegador numa localização específica
O parametro binary
é usado contendo o caminho para uma localização específica do navegador.
Como exemplo, pode usar este parametro para indicar ao geckodriver a versão Firefox Nightly ao invés da
versão de produção, quando ambas versões estão presentes no seu computador.
Adicionar uma localização:
driver.installExtension(path, true);
Assert.AreEqual(driver.FindElements(By.Id("webextensions-selenium-example")).Count, 0);
driver.uninstall_addon(extension_id)
Perfis
Existem várias formas de trabalhar com perfis Firefox
FirefoxProfile profile = new FirefoxProfile();
FirefoxOptions options = new FirefoxOptions();
options.setProfile(profile);
driver = new RemoteWebDriver(options);
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
var options = new FirefoxOptions();
var profile = new FirefoxProfile();
options.Profile = profile;
var driver = new RemoteWebDriver(options);
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();
val options = FirefoxOptions()
options.profile = FirefoxProfile()
driver = RemoteWebDriver(options)
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:
System.setOut(new PrintStream(getLogLocation()));
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
@driver = Selenium::WebDriver.for :firefox, service: service
Console output
To change the logging output to display in the console:
System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,
getLogLocation().getAbsolutePath());
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
@driver = Selenium::WebDriver.for :firefox, service: service
Log level
There are 7 available log levels: fatal
, error
, warn
, info
, config
, debug
, trace
.
If logging is specified the level defaults to info
.
Note that -v
is equivalent to -log debug
and -vv
is equivalent to log trace
,
so this examples is just for setting the log level generically:
public void stopsTruncatingLogs() throws IOException {
System.setProperty(GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY,
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
Truncated Logs
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:
@Test
public void setProfileLocation() throws IOException {
Note: Java also allows setting log level by System Property:
Property key: GeckoDriverService.GECKO_DRIVER_LOG_NO_TRUNCATE
Property value: "true"
or "false"
Profile Root
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:
@Test
public void installAddon() {
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
Special Features
Extras
Ao invés do Chrome, os extras do Firefos não são adicionados como parte das capacidades, mas sim após iniciar o driver.
Unlike Chrome, Firefox extensions are not added as part of capabilities as mentioned in this issue, they are created after starting the driver.
The following examples are for local webdrivers. For remote webdrivers, please refer to the Remote WebDriver page.
Instalação
Um arquivo xpi que pode ser obtido da página Mozilla Extras
const xpiPath = path.resolve('./test/resources/extensions/selenium-example.xpi')
let driver = await env.builder().build();
let id = await driver.installAddon(xpiPath);
Desinstalação
Desinstalar uma extensão implica saber o seu id que pode ser obtido como valor de retorno durante a instalação.
await driver.uninstallAddon(id);
Instalação de extensões não assinadas
Quando trabalhar em uma extensão não terminada ou não publicada, provavelmente ela não estará assinada. Desta forma, só pode ser instalada como “temporária”. Isto pode ser feito passando uma arquivo ZIP ou uma pasta, este é um exemplo com uma pasta:
const xpiPath = path.resolve('./test/resources/extensions/selenium-example')
let driver = await env.builder().build();
let id = await driver.installAddon(xpiPath, true);
Captura de tela inteira
The following examples are for local webdrivers. For remote webdrivers, please refer to the Remote WebDriver page.
Contexto
The following examples are for local webdrivers. For remote webdrivers, please refer to the Remote WebDriver page.