Java or Javascript? or maybe another language?
Please help me choose the programming language I should learn for Selenium automation and its benefit over other. Any pro's and con's?
Java or Javascript? or maybe another language?
Please help me choose the programming language I should learn for Selenium automation and its benefit over other. Any pro's and con's?
See, you can learn Selenium with any language, whether it is C#, Java, Ruby, Python etc. It doesn't matter whether the application you are going to test has been developed in the same language that you would use to write your test scripts, you can test an application developed using C# in Selenium with test scripts written in Java.
In addition to that, you don't need to learn any of these languages completely for working with automation. You should know the basic stuff and as you go on with testing and creating test cases you will keep on searching about the issues being faced and how they can be resolved, which in turn will enhance your programming skills as well. Selenium with Java is more easy and much better to use and learn, you will get lots of examples, training material, forums and communities for the same. Don't need to learn complete Java for this, only basics are enough.
But above all if you are more comfortable with other options, then they are not bad, if you don't have any past experience in programming and are starting from scratch Java is good option.
import pdb
magic.
Commented
Aug 7, 2015 at 21:01
I am assuming that you:
Python is widely considered as best language for beginners (MIT among others). It works much harder for programmer (to make programmer life easier). Because is not as object obsessed as Java is, beginner programmer can write simpler procedural code using existing objects without the need to dive deeply to object design. There are many excellent free online books and courses to learn Python.
One important feature why learning Python is simpler than Java is Python console/interpreter. It allows learner to learn Python one line at a time, experimenting and playing with language, instead of writing complete page of code like with Java (and trying to debug it as a whole).
Another important reason why Python beats Java is flexibility to create data structures in Python. Lists, dictionaries, returning multiple values from a function is trivial in Python. Python is excellent language to parse and manipulate data in text files, you would want to learn it for that reason anyway (Java sucks in this task).
Java or Javascript might be good as second language (if you feel the need), when you understand basics of programming. Yes, Java is bit faster - but speed of execution is irrelevant for a beginner, or for automating Selenium. Javascript is a must for web front end developer - but Javascript is more quirky, confusing and less forgiving than Python.
I know Python, Java, Javascript (and I learned many other languages before these three), so IMHO my opinion is based on more experience than people who know only one or two languages. First language you learn is very important, it forms base to understanding other languages, and bad habits of thinking from first language could be hard to overcome later.
Python is excellent glue language which will allow you to write tools helping your other QA tasks. Recent example from our experience: get log messages from last 100 SVN logins, parse bug numbers and comitters, get bug status from bugzilla database, and print report (to make sure that bugs with commits are in proper status). Python is excellent for this, Java, C# or JS - less so. So you likely want to learn Python anyway, to write such little custom tools.
Yes, Python is bit a niche language (people often learn it as 4th or later language, or not at all) - you have the opportunity to learn it as your first. Check one hour Python intro and you will get idea what Python can do, and how easy it is.
Go with Python, and when you learn those other languages, you will see why Python was the best choice for a beginner.
As I said, first language is very important because it will affects how you think about programming. This type of cognitive bias has name Blub paradox - a term coined by famous programmer and founder of Y-combinator seed fund Paul Graham in article Beating Averages - where he explained how he become millionaire by using Lisp (even more dynamic language than Python) instead of Java in his startup. We may safely assume that he knows about using programming languages which make programmer productive :-)
This type of cognitive bias can explain why people who know only static languages like Java or C# do not "trust" Python and rarely recommend it to others, and @Kyralessa comments are perfect example of such blub programmer. I did not asked him, he volunteered, honest! :-)
Two free online edX courses to learn Python for beginners:
There are two sides of your question which I am interpreting (and may be I am wrong), but this is how I see it :
Let's talk about first- I have used both Python and Java implementations and I agree with Peter, that Python is a lot easier and simpler to learn compared to Java, and as such, if you are a complete novice, I would suggest you go with Python.
Also it is fairly easy to install and use, and hence I would prefer it over Java implementation any day.
But, here comes the second point, which both Dhiman and wmarchewka have outlined is the support for Java implementation of Selenium. You will find a lot of support for Java with Selenium, since most of the online guides and tutorials, you'd find will help you with Java and Selenium, and not Python.
That being said, I don't mean to imply that you wouldn't find any Python plus Selenium resource, but it is not at the level of Java.
I, personally haven't used the Javascript version, but I know that as Node.JS and other such JS libraries get popular, eventually JS would be the language of choice for many.
So, I would say it's up to you to decide, which one is better suited for you.
If you want to learn from scratch I think that Java will be good, because there is a huge amount of support from the community in this language (I think most of the people use Java with WebDriver). I've started with Java and for any question or trouble there always was somebody that could help me.
Now I'm using Python with Selenium, and experience that there is a very big difference in support from the community.
I think that with Javascript you will have little support because this language is used with WebDriver less often.
According to the TIOBE Index Java is still the number one language for programming. Java will also net you the most online support because of this on for example Stack Overflow.
JavaScript is becoming more popular though, certainly with the rising of NodeJS.
I would bet on JavaScript more then Java or C#, since its the language of the web. For a decent JavaScript starting training have a look at the JS Codecademy track course.
Have a look at WebDriver.IO or WebDriverJS for JavaScript versions of Selenium.
Very broad question and as a python fanboy I can only say Peter Masiars answer is very good but let me try to make a case for the other big ones.
Java
It's the big one. You'll find tons of examples, it's strict enough to punish you for making beginner mistakes and forces you to understand data types before it starts working with you. Hard teacher but if you get it you have a language that wants you to write reliable, maintainable code. I mostly work with students or new graduates (since the other branches in our company tend to steal away my guys after I trained them) and it is the language everyone learned at university which helps with getting into it.
Javascript
It's the "Candy van guy" of programming languages. At first it baits you with loose typing, nice functions for everything and hey, at some point you need to understand it since it's the backbone of the internet but then it strikes you down from behind by treating a null value as a 0 and has you debugging for hours. The benefit is clear, there is no style break, if you need something more complex. In any other language you need to pass something into the AUT via the JavascriptExecutor and at that point you need to know js. It also helps with manual testing since you get a better grasp of what happens in your application. It's a horrible first language, imo, since it gives you too much freedom and tends to do weird things which are hard to handle if you don't have a good understand of programming languages and how things work internally. The concept of nested functions also lends itself to unreadable code which is really bad if a feature changes down the line and you have 12 layers of anonymous functions because it seemed a good idea at the time.
It's a must have at some point but as a first it might do more harm than good. Also, the same as Python, an IDE doesn't help as much as it does with languages that force you to declare a type.
C#
.NETs Java. Almost anything I said about Java is also true for C# with the exception that some guy thought introducing a generic var type was a good idea and allowed for millions of anti patterns to take hold. It's a solid language and definitely a good recommendation for beginners. It can also handle JSON quite well which puts it miles before java the second you need anything from an API. The problem is that it pretty much only works on Windows. I know there are ways to run it under linux but I, personally, do not like any of it and remember, if your tests ever need to run within a dockerized environment (think CI strategy e.g.) you run into problems.
PHP
Well, there are many people that will tell you PHP is the worst language out there and that you shouldn't touch it with a five feet pole if you can avoid it and I get why. PHP lends itself to writing bad code since, similar to JS, it offers a lot of freedom. If you have the discipline to adhere to good design even though that one hack might get you a solution you can go for it but if that applies to you I'd recommend JS over it. It's a nice, loosely typed allrounder but not really good at anything but being a HTML preprocessor.
I can't say anything about Ruby since I never really got into it.
Personal recommendation
You start with Software testing which isn't something I would do with a beginner. Hell, I don't do that with a fresh hire. Software testing is, by it's nature, multi process code without native synchronisation interfaces. That's a hard thing to manage for a seasoned programmer but it's really bad if you start with it. Since the fact that determining the state of your AUT might be an already quite challenging thing to do you do really not want your language to make you any problems so all those loosely typed languages (JS, PHP, probably also python) might not be the best choice since your IDE doesn't help you as much and some errors might be harder to trace back. From the remaining ones I'd definitely recommend Java over C# since it works on all systems and tends to be the tutorial language. You'll google for a lot of things in the beginning and many examples, especially in the WebDriver context, tend to be in Java. If you need to read JSON from some source it's suboptimal but it's just the language that holds your hand the most. Just a warning: Once you get better at it you'll hate the boiler plate and enforcements that in the beginning help you and you'll curse your system for needing 5 lines for something python would do in one.
Also, look at what the other guys in your company use. Having a mentor while learning something is invaluable and might even be worth to choose a less optimal language.
If you are starting out and not sure which language to learn first, let Stack Overflow help! Stack Overflow does a developer survey every year that might be helpful. Javascript is the most popular and Go pays the best in the US. I haven't seen a Go Selenium setup, but I haven't looked... So if you want to skills you pick up to apply to a broader set of work, try javascript/nodejs with Selenium.