Execute o Selenium com as versões mais recentes do Firefox

Parece que para rodar os últimos testes com o Firefox precisamos usar marionette porque eles não assinaram a extensão do driver Selenium Firefox (webdriver.xpi) e é necessária de acordo com lukeis. Você pode encontrar mais sobre isso aqui https://github.com/SeleniumHQ/selenium/issues/2559

Com o passar do tempo, este é um exemplo de como consegui resolver o problema.

Em primeiro lugar, estou usando:

  • MacOS Sierra
  • Python 3.5
  • Selênio 3 beta 3
  • Presumo que você esteja familiarizado com Python e Selenium

Estou usando o Selenium 3 beta porque preciso testar o Safari. Safari 10 fornece o webdriver para usar selênio, mas devemos usar a versão 3 https://webkit.org/blog/6900/webdriver-support-in-safari-10

  • Passo 1:
    • Fiz uma pesquisa rápida sobre Python 3.5, Selenium 3 e Firefox e encontrei um bug no Selenium que você pode corrigir facilmente fazendo o que dizem aqui: http://www.vardump.pw/sc?id=is39527858
    • Em uma breve descrição, você precisa ir para a linha 133 do arquivo webelement.pye mudar de raw = pkgutil.get_data(__package__, 'getAttribute.js')para raw = pkgutil.get_data(__package__, 'getAttribute.js').decode('utf8'). O meu estava localizado em/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium-3.0.0b3-py3.5.egg/selenium/webdriver/remote/webelement.py
  • Passo 2:
  • Etapa 3:
    • Este é um pedaço de código como um exemplo do que você precisa testar e certificar-se de que pode usar o Firefox com Selenium
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps
= DesiredCapabilities.FIREFOX

# Tell the Python bindings to use Marionette.
# This will not be necessary in the future,
# when Selenium will auto-detect what remote end
# it is talking to.
caps
["marionette"] = True

# Path to Firefox DevEdition or Nightly.
# Firefox 47 (stable) is currently not supported,
# and may give you a suboptimal experience.
#
# On Mac OS you must point to the binary executable
# inside the application package, such as
# /Applications/FirefoxNightly.app/Contents/MacOS/firefox-bin
caps
["binary"] = "/Applications/Firefox.app/Contents/MacOS/firefox-bin"
geckodriver
="/Users/pmarques/Test/geckodriver"

driver
= webdriver.Firefox(capabilities=caps, executable_path="/Users/pmarques/Test/geckodriver")
driver
.get("http://www.google.com")