I think I recall seeing (in online Selenium Google Group, etc. discussions) some people interested in contributing to Selenium project and learning from it.
Obviously, one can supply patches for bugs fixes or implement new features for Selenium (the server or any of the supported official language bindings, Selenium Grid, etc.).
However, I think one area that is a ripe candidate for contribution and learning from it with respect to Selenium are the 3rd party unofficial language bindings, like the ones in PHP, Perl, VBScript, etc.
Some of the 3rd party bindings get no love compared to the official bindings and fall behind in support of WebDriver API functionality offered by the official bindings (it’s not that they can’t do it, work’s just not been done on them).
There are several benefits of contributing to these 3rd party bindings:
- you learn more about the JSONWireProtocol that is at the heart of the WebDriver API. All the official language binding clients actually communicate to the “server” part of Selenium through that protocol. For local (not remote) WebDrivers in the official bindings, it’s just that the “server” part is all packaged together that you don’t need to start up a Selenium server JAR unless you are using RemoteWebDriver, Selenium Grid, or a 3rd party binding (which doesn’t have it integrated). So in essence you learn more about the internals of Selenium.
- you might learn a new language, if those 3rd party bindings aren’t what you normally use.
- you get to improve the 3rd party bindings for the language you like that was not deemed official (e.g. PHP, Perl, VBScript, etc.). Making it better means you can use it and others can too, making it more on par with the official languages. Such that one can’t say no more that they can’t use the 3rd party bindings because they’re incomplete, unofficial, or don’t have support for them.
- you help promote awareness of these third party bindings, and the fact that you don’t have to use Selenium strictly in Java, C#/.NET, Python, or Ruby.
I myself am a contributor to the PHP WebDriver bindings on Google Code, and have also forked it on GitHub with some additions not merged back to main project. I will continue to contribute to that project when I have time, as it still has a lot of work remaining to make it a full fledged binding that matches what the full WebDriver API offers. FYI, I picked this PHP binding to contribute to (and use) because at the time I evaluated the PHP bindings, this one offered the best PHP API to WebDriver that most closely matched the WebDriver API as an API. The Facebook PHP bindings are not bad either, but it’s API veers too close towards the JSONWireProtocol requiring to know specifics of the protocol to use it well (not user friendly to the average user). I welcome you to do the same and maybe contribute the PHP project I am a member of, should you be thinking of contributing to Selenium open source project(s).
Update 07/20/2013: I forgot to mention earlier, another option for contribution is to use the WebDriver JSONWireProtocol to implement an interface to other test tools so that you can have a single language interface (WebDriver API) to automate with different tools. Currently, the WebDriver API is only implemented for Selenium on the web application side, and Appium & ios-driver on the mobile web/native applications side. There may be one or two others not so well known on the mobile side. Image if we extend that to other areas like desktop GUI automation, like how about using WebDriver API to control AutoIt or Sikuli rather than using their native scripting, API, and/or supported language interfaces. If you built a WebDriver API client/wrapper to them, you could use a single code Selenium codebase/language to control both AutoIt/Sikuli and Selenium, if you had a need to run tests that involved AutoIt or Sikuli. And that’s just mentioning two of the most popular desktop UI tools, there are others as well. Doing such contributions here will offer people more choice in tools and languages used beyond just web application testing, and you’ll also learn JSONWireProtocol, WebDriver API, how Selenium Grid works (if implementing Grid support like for AutoIt/Sikuli via WebDriver API), and how to integrate with other tools working with their APIs and languages.