# Selecting an End to End Testing Framework - Selenium or Selenide?


![SeleniumVsSelenide.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1643271592878/wnUEsCj1m.png)

Selenium or Selenide?
**Choosing UI automation framework** is not an easy task. You have to **consider many factors** based on your company's needs:

- Skillset available in the company
- Learning curve
- Ease of use
- Cross-browser and platform support
- Integration with cloud testing services
- CI/CD integration
- License cost
- Detailed reports

Back then my fellow colleagues evaluated multiple frameworks and they narrowed down the choice to Selenium and Selenide. So the question is **which framework to use?**

I won't waste your time, so I quickly answer the question: **both**. Thanks for reading. 😊

Joking aside, if you are interested in the whys, please continue reading. In this first article let's look at both one by one so I can give a little bit more detailed answer to our question.

## What is Selenium?
Selenium is an [open-source](https://github.com/SeleniumHQ/selenium) project consisting of different **tools for automating web browsers supporting many browsers across many platforms.** It is widely used in test automation, but it is not limited only to testing. Its main components are **Selenium WebDriver**, Selenium RC, Selenium IDE (record and playback), and **Selenium Grid**. I won't talk about Selenium RC which is the predecessor of Selenium WebDriver, if you would like to read about it, you can find information [here](https://www.selenium.dev/documentation/legacy/selenium_1/). I am also skipping Selenium IDE which is a simple record and playback tool. Based on my experience it is only useful for people who are beginners in software development or in case you are not that familiar with the DOM. In case you are still interested have a look at [this page](https://www.selenium.dev/selenium-ide/).

### Selenium Webdriver
It is a collection of **language-specific bindings to drive a browser natively**, as a real user would do. The supported languages include  J**ava, C#, Kotlin, Python, Ruby, JavaScript, Perl, and PHP**. The WebDriver can run either locally or remotely (using Selenium Grid).

**Selenium can only automate webpages** but you cannot automate native apps, for that purpose you can use [Appium](https://appium.io/). In case you are interested in Appium, I highly recommend [Rahul Shetty](https://rahulshettyacademy.com/)'s Udemy [course](Lhttps://www.udemy.com/course/mobile-automation-using-appiumselenium-3on the topic. **Based on the course I have built a basic Appium framework** with which you can jumpstart Appium development. Check it on [GitHub](https://github.com/mszeles/appium-framework).

In case you are interested in Selenium WebDriver programming using Java language, **I highly recommend** [Rahul Shetty](https://www.linkedin.com/in/rahul-shetty-trainer/?lipi=urn%3Ali%3Apage%3Ad_flagship3_pulse_read%3BGBKXPwn2S3aSjYTTMdLkRw%3D%3D)'s course on [Udemy](https://www.udemy.com/course/selenium-real-time-examplesinterview-questions), I personally **learnt a lot from that**. I also **developed a Cucumber based Selenium framework** following the course, so you can start Selenium development in no time with it. It is available on [GitHub](https://github.com/mszeles/selenium-framework-template). For Selenide I cannot recommend a good course yet, but that is the main reason why I started to write this article series.

### Selenium Grid
Using Selenium Grid **you can run tests parallelly across multiple machines both virtual and physical ones**. The latest version is Selenium Grid 4 which has a completely new codebase compared to its previous versions.

Using Grid you can build your own infrastructure, but there are many sites that provide Selenium grid services. One of them is [Browserstack](https://www.browserstack.com/)which supports more than 3000 real devices and browsers.

## Selenide
Let's talk about [Selenide](https://selenide.org/index.html). So what is Selenide? Selenide is an [open-source](https://github.com/selenide/selenide) framework built on top of Selenium WebDriver whose main purpose is to **make test automation simple**. As it is** based on Selenium WebDriver** it also means we get the **full feature set of it** and lets' see what else we get in **addition**:

- It has a [fluent API](https://en.wikipedia.org/wiki/Fluent_interface) for tests, so you will have a **more concise and readable code**.
- It supports [Ajax](https://www.w3schools.com/xml/ajax_intro.asp), so you will have much less trouble with handling timeouts, so **you can write more stable tests**.
- In addition to the Selenium selectors, you have more **advanced selectors which make finding elements easy.**
- **Provides easy ways to download files.**
- Provides **methods to navigate between parent and child elements.**
- It is **very easy to configure** as it is using sensible defaults, so you don't have to mess with WebDriver, but of course, you can if you want.
- Selenide **automatically takes screenshots on failing tests** providing also the link, even during running on Jenkins, so you can identify the problem more easily.
- It has a **built-in Profiler**.
- Sending keys to elements is quite slow using Selenium, as it is sending keys one by one. **Selenide provides a javascript based method which is a much faster way to send keys**.
- Provides detailed error messages even logging the HTML source belonging to the element, so **it makes debugging much easier.**
- **Switching to Selenide from Selenium is easy**, even if you have hundreds of Selenium tests, as the Selenium tests are completely compatible with Selenide.

That is the basic information we need about the frameworks, so let's continue with comparing them.

## Evaluating the frameworks based on our requirements

### Skillset available in the company
Our team has a strong Java background so **Selenium **seems to be a reasonable choice as it **supports many programming languages including Java.**

**Selenide is limited to Java and other JVM based languages**, but as we have the Java background **Selenide is as good for us as Selenium.** For us, the standing is **Selenium:Selenide 1:1.**
### Learning curve
For Selenium, you can find tons of materials on the internet: video courses, tutorials, articles. In case you have a strong Java background and you are familiar with the DOM then **learning Selenium is quite easy**. As it is open-source you can also check the source code anytime.

Selenide has **quite short** [documentation](https://selenide.org/documentation.html), but it has many examples available on [GitHub](https://github.com/selenide/selenide/tree/master/src/test/java/com/codeborne/selenide). I have not found any video course on the topic, but of course, articles are available. Stackoverflow has a few hundred questions related to Selenide in comparison Selenium has almost 100000. Despite this, **learning Selenide is also** easy (especially in case you are already familiar with Selenium). It is also open-source, so you have the option to skim through the code if you want.

However many of the problems you encounter during Selenide development can be answered by the materials belonging to Selenium (as Selenide is based on Selenium WebDriver) it is still a **win for Selenium: 2:1.**

### Ease of use
In case you look back at the Selenide introduction section you can see the list of topics in which **Selenide excels in comparison to Selenium**. This is a **huge win for Selenide: 2:2.**

### Cross-browser and platform support
Both frameworks have the **same browser and platform support.** It is **equal: 3:3.**

### Integration with cloud testing services
Both Selenium and Selenide can **integrate with Browserstack**, so it is **equal again**. The standing is **4:4**.

### CI/CD integration
**Selenium integrates well with Jenkins** and the **same **can be told **about Selenide**. At our company, we use GitLab which has its own CI/CD tool and I can tell Selenide works well with it:** 5:5.**

### License cost
**Both of them are free software: 6:6.**

### Detailed reports
**Neither Selenium nor Selenide has built-in reporting**, but you can easily integrate them with testing frameworks like **JUnit or TestN**g. With those frameworks, you **can generate the needed reports**. In addition to this **Selenide has a profiler** with which you can generate reports which include the execution time of every action in milliseconds. Based on this you can better understand where your tests are spending their time and where can you improve your tests. With the profiler, it is **another point for Selenide.**

## Result
So the final result is **6:7** to Selenide. Of course, you **cannot decide just on the result**, as all of the **factors have a different weigh**t depending on your team's need. Taking into consideration the **extra features of Selenide** which makes development easier, **we decided to go with it** and we did not regret our decision. Selenide is quite an active project, having multiple releases per month, **I highly recommend giving it a try.**

## Final words
This is the first introduction article of a series I will write about test automation using Selenide. I am pretty sure you are eager to see some code, so **in the next article we will jumpstart Selenide development.**

In case you are interested in the management side of quality assurance in an agile environment, then I recommend reading [this article](https://www.linkedin.com/pulse/first-steps-quality-management-agile-projects-akos-piltmann?lipi=urn%3Ali%3Apage%3Ad_flagship3_pulse_read%3BGBKXPwn2S3aSjYTTMdLkRw%3D%3D) written by my colleagues [Ákos Piltmann](https://www.linkedin.com/in/akos-piltmann/?lipi=urn%3Ali%3Apage%3Ad_flagship3_pulse_read%3BGBKXPwn2S3aSjYTTMdLkRw%3D%3D) and [István Szarka](https://www.linkedin.com/in/istvan-szarka-656625114/?lipi=urn%3Ali%3Apage%3Ad_flagship3_pulse_read%3BGBKXPwn2S3aSjYTTMdLkRw%3D%3D).

To close the article, I leave you a question here:

**What is your number one UI automation framework? Please share your experiences in the comment section.**

In case you do **not want to miss my posts**, just **follow me** [here on Hashnode](https://mszeles.com/), on [LinkedIn](https://www.linkedin.com/in/miklos-szeles/), on [Twitter](https://twitter.com/mszeles) on [Medium.com](https://medium.com/@mszeles), on [dev.to](https://dev.to/mszeles) and even on [Instagram](https://www.instagram.com/szelesmiki/). 😊

P.S.: **Support me by sharing this article**. 👍

📚**Join the Selenide community** on [LinkedIn](https://www.linkedin.com/groups/9154550/)! ✌

[Buy me a coffee!](https://buymeacoffee.com/mikiszeles) ❤
