2

I've been using Selenium WebDriver for a long. Not so a long time ago I locked my version of Firefox to 45.3.0 ESR on my test environments and WebDriver version to 2.53.0. The reason is simple: it was too much hassle to switch to newer versions of Firefox or WebDriver when they got released. In other words, things started to be not reliable as they were before. Then versions of WebDriver were labeled more and more with "beta" suffix:

  • v3.0.0-beta1
  • v3.0.0-beta2
  • v3.0.0-beta3
  • v3.0.0.beta4

I was patiently waiting while people in blogs and posts on StackOverflow were describing hacks about how to run newer Firefox releases with this beta-WebDrivers and new Marionette Firefox driver. But it all smelled like a gross hacks and did not trigger desire to risk upgrading a large production project. Now finally I noticed v3.0.0 released. But when I check release notes I see in the "IMPORTANT CHANGES" section following:

* Firefox is only fully supported at version 47.0.1 or earlier. Support
  for later versions of firefox is provided by geckodriver, which is
  based on the evolving W3C WebDriver spec, and uses the wire protocol
  in that spec, which is liable to change without notice.
* You may wish to choose an ESR release such as 45.4.0esr or earlier.
* Firefox 47.0.0 is not supported at all.

I am not paying any money for this, I know this is free software, but still, I am thinking seriously now if I have made a proper choice when I had selected the Firefox driver for my project. I can't much longer cling to the 45.3.0 ESR version of the Firefox when my clients are much ahead.

Can someone with better understanding help and describe what is the roadmap of Selenium support for Firefox and how should it be accounted for in big projects?

bad_coder
  • 11,289
  • 20
  • 44
  • 72
Alexander Arendar
  • 3,365
  • 2
  • 26
  • 38
  • 1
    I don't know anything about the Selenium roadmap for firefox but in our company we are using the PhantomJS webdriver (we are also testing webpages with AJAX, JavaScript and stuff... no problems so far). In this case you are not dependet on any browser at all. PhantomJS is also headless so you can run the test on any unix based server without a GUI (and its way faster in this case). So if you have the choice (and you don't have to guarantee that your page runs especially with firefox) it is probably worth a try – spcial Oct 17 '16 at 11:46
  • @spcial, unfortunately or fortunately I need to guarantee that our product runs on Firefox and other major web-browsers. But anyway thanks for a good reference for PhantomJS, will know that it is reliable in case need to use it. – Alexander Arendar Oct 17 '16 at 11:50
  • 1
    Have you seen [this answer](http://stackoverflow.com/a/38917100/374693) regarding Selenium, Firefox, and Marionette? Part of that answer is dedicated to explaining why the Selenium project's driver for Firefox no longer works, and why the Mozilla-maintained Marionette solution is the way forward. Mozilla's solution may have issues, but it's the only one that has a prayer of continuing to work in the future. – JimEvans Oct 17 '16 at 13:36
  • @JimEvans, thank you, that's a helpful answer. Could you clarify also why in release notes for v.3.0.0 the Selenium team is explicitly stating `provided by geckodriver, which is based on the evolving W3C WebDriver spec, and uses the wire protocol in that spec, which is liable to change without notice`? If gecko driver is just a transactor as you described in your answer then everything should be transparent and we testers should not care. But this statement in the release notes hints otherwise. – Alexander Arendar Oct 17 '16 at 14:00
  • Selenium WebDriver's language bindings drive browsers by communicating with a remote end, using a JSON-over-HTTP wire protocol. This protocol has two dialects. The first, originated in the open-source project, has been in use for years. The second is being standardized by the W3C, and isn't entirely finalized yet. It's this latter used by Marionette. From the perspective of your WebDriver API code, the dialects should be transparent, but there's a chance for changes to the W3C spec dialect needing to propagate to the language bindings. – JimEvans Oct 17 '16 at 15:59
  • It should be further noted that the OSS dialect is intended to be eventually replaced by the W3C dialect by all drivers. Again, modulo differences like requiring an external executable for Firefox (just like what's required for Chrome today), there should be little-to-no change in your actual WebDriver code. – JimEvans Oct 17 '16 at 16:03
  • Thanks for explanation. I switched. What I see from scratch with Firefox 49 and Ubuntu :) is that it works but driver.close() is not working. Will dig the net for suggestions and post to their issue system if cannot find anything. But after your explanation I think I will switch and just try to make majority of my tests working and for those which will not run will wait for fixes/upgrades. Arrange your comments to an answer so I can accept it and thank you in a proper way. – Alexander Arendar Oct 17 '16 at 18:31

1 Answers1

0

It is amazing, but sometimes really valuable answers are hiding in comments, like this one by JimEvans. Comments can be deleted at any time.

I extracted it to answer, because it really helped me to understand: Marionette may behave differently, because it tries to use new emerging standard W3C dialect, instead of the old non-standard which other browsers are using.

Jim Evan says:

Selenium WebDriver's language bindings drive browsers by communicating with a remote end, using a JSON-over-HTTP wire protocol. This protocol has two dialects. The first, originated in the open-source project, has been in use for years. The second is being standardized by the W3C, and isn't entirely finalized yet. It's this latter used by Marionette. From the perspective of your WebDriver API code, the dialects should be transparent, but there's a chance for changes to the W3C spec dialect needing to propagate to the language bindings.

It should be further noted that the OSS dialect is intended to be eventually replaced by the W3C dialect by all drivers. Again, modulo differences like requiring an external executable for Firefox (just like what's required for Chrome today), there should be little-to-no change in your actual WebDriver code