Resolvendo o problema de execução com Selenium no Firefox 47+

Se você usa o Selenium WebDriver e o Firefox para executar os seus testes automatizados deve ter notado que o Firefox 47+ simplesmente não funciona 🙁

Porque o Firefox 47+ não funciona com o Selenium?

Agora o Firefox usa um driver de automação da engine Gekco, o Marionette. Logo as execuções de teste com o Firefox e Selenium devem suportar este novo driver.

Como resolver?

Você precisa seguir três passos básicos:

  1. Baixar o Marionette Driver (gecko driver)
  2. Se você usa Linux ou Mac, deve dar permissão de execução no driver
    • chmod +x <nome_driver>
  3. Atualizar seus scripts de teste (exemplos abaixo)

Fique ligado!

O Marionette driver ainda está em desenvolvimento. Para ver exemplos, dúvidas, saber de atualizações ou submeter um bug acesse:

https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver

18 thoughts to “Resolvendo o problema de execução com Selenium no Firefox 47+”

  1. Olá Elias.

    Estou tendo problema com o código de teste criado na IDE Selenium quando exportado para o Java. Antes de criar o projeto eu adiciono todos os jars do selenium e mesmo assim não consigo rodar o teste usando o netbeans. Observando a IDE Selenium no firefox funciona corretamente.

    Importo as seguintes bibliotecas:
    import org.junit.After;
    import org.junit.AfterClass;
    import org.junit.Before;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import static org.junit.Assert.*;

    import java.util.regex.Pattern;
    import java.util.concurrent.TimeUnit;
    import org.testng.annotations.*;
    import static org.testng.Assert.*;
    import org.openqa.selenium.*;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.Select;

    Ocorre um erro no alwayRun:
    cannot find symbol
    symbol: method alwaysRun()
    location: @interface BeforeClass

    @BeforeClass(alwaysRun = true)
    public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = “http://localhost:8080/”;
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    Além de um erro na referencia verificationErrorString:
    reference to fail is ambiguous both method fail(String) in org.junit.Assert and method fail(String) in org.testng.Assert match

    @AfterClass(alwaysRun = true)
    public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!””.equals(verificationErrorString)) {
    fail(verificationErrorString);
    }
    }

    Já procurei em vários lugares e não encontrei o motivo desses erros, espero que você possa me ajudar. Grato!

  2. Elias, boa tarde
    Segui os passos, mas só consigo abrir o browser e a URL não é acessada. Poderia ajudar?
    Estou com esse erro no console:
    1493141472611 geckodriver::marionette INFO Starting browser \\?\C:\Program Files (x86)\Mozilla Firefox\firefox.exe with args [“-marionette”]
    1493141472959 addons.manager ERROR startup failed: [Exception… “Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIFile.create]” nsresult: “0x80070057 (NS_ERROR_ILLEGAL_VALUE)” location: “JS frame :: resource://gre/modules/FileUtils.jsm :: FileUtils_getDir :: line 70” data: no] Stack trace: FileUtils_getDir()@resource://gre/modules/FileUtils.jsm:70 < FileUtils_getFiJavaSclrei(p)t@ reersroourr:c er:e/s/ogurrec/em:o/d/uglrees//mFoidluelUetsi/lAsd.djosnmM:a4n2a g<e rv.ajlsimd,a tleiBnel 1o6c5k7l:i sNtS(_)E@RrReOsRo_uNrOcTe_:I/N/IgTrIeA/LmIoZdEuDl:e sA/dAddodnoMnaMnaangaegre ri.sj snmo:t6 7i1n i<t isatlairzteud
    p
    ()@resource://gre/modules/AddonManager.jsm:834 < startup()@resource://gre/modules/AddonManager.jsm:3129 < observe()@resource://gre/components/addonManager.js:65
    1493141475586 Marionette INFO Listening on port 58075
    JavaScript error: resource://gre/modules/AddonManager.jsm, line 2570: NS_ERROR_NOT_INITIALIZED: AddonManager is not initialized
    abr 25, 2017 2:31:15 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFORMAÇÕES: Falling back to original OSS JSON Wire Protocol.
    abr 25, 2017 2:31:15 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFORMAÇÕES: Falling back to straight W3C remote end connection

    Versão utilizada: geckodriver-v0.16.0-win64.zip e Firefox 53.0

  3. MUUUUUUUUUUUUUITO OBRIGADO ELIAS NOGUEIRA!
    Eu estava com problemas a dias, tentei de tudo e não resolvia.

    Agora sim, está tudo funcionando perfeitamente.

        1. @BeforeClass(alwaysRun = true)
          public void setUp() throws Exception {
          System.setProperty(“webdriver.gecko.driver”, “C:/Drivers/marionette/geckodriver.exe”);

          DesiredCapabilities dc = DesiredCapabilities.firefox();
          dc.setCapability(“marionette”, true);

          driver = new FirefoxDriver(dc);
          baseUrl = “http://localhost:8084/”;
          driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
          }

          Esse é o setup… faço o teste pra somar dois numeros…
          abre o firefox e aparece uma pagina em branco e uma mensagem:

          O suporte de acessibilidade foi parcialmente desativado devido a problemas de compatibilidade com novos recursos de FIREFOX.

          1. Oi Tathyana,
            Nas novas versões do browser tu podes simplificar o código agora…

            Tu podes remover a linha do DesiredCapabilities e o setCapability, bem como o parâmetro dc no FireFoxDriver…

            System.setProperty(“webdriver.gecko.driver”, “C:/Drivers/marionette/geckodriver.exe”);

            driver = new FirefoxDriver();
            baseUrl = “http://localhost:8084/”;
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

            Me dá um retorno se deu certo ou não?

            Abraço!

  4. Bom dia, Elias!
    Me ajudou muito com esse tutorial!
    Obrigado!

    Dúvida: só consigo executar o driver “geckodriver” se colocar “.exe” ao final do caminho, mesmo fazendo exatamente o que você fez acima. Se isso não for feito, é apresentado “java.lang.IllegalStateException: The driver executable does not exist”. Como executar o referido driver sem inserir o “.exe”, justamente como foi feito por você ?

    Informei exatamente como foi feito por

    1. Olá Gleison,
      No meu exemplo, usando um MacOSX, o geckodriver não tem extensão, logo ele ele é colocado assim mesmo. E o mesmo funciona no Linux.
      No Windows tu precisa realmente colocar o .exe

      Abraço!

  5. Olá.
    Estou começando a estudar o uso do WebDriver. Por favor, poderia dar o passo a passo da instalação e configuração?
    Estou recebendo este erro na execução de scripts e não sei se é relativo a algum erro na configuração.
    The souce attachament doe not contain the source for the file DriverService.class.

    1. Oi Elis, tudo bem?
      Na verdade o Selenium WebDriver não possui instalação e configuração em si. Problemas provenientes dele ou são falta de alguma biblioteca ou na programação do script mesmo. Tu anexou uma classe em .class, onde eu não consigo ler (nem o blog deixa).
      Tu consegue me descrever o que acontece e qual é o erro apresentado pra ti?

      Grande abraço!

  6. Elias, aconteceu algo comigo, esqueci de renomear o nome do arquivo ehhe..

    Então para não acontecer isso com mais alguém segue trecho do Marionette Help:

    Even though the project has been renamed to GeckoDriver, many of the selenium clients look for the old name. You need to rename the binary file to ‘wires’ (the old name) and ensure it is executable.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *