{"id":98468,"date":"2019-09-20T07:00:57","date_gmt":"2019-09-20T04:00:57","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=98468"},"modified":"2019-09-19T14:07:03","modified_gmt":"2019-09-19T11:07:03","slug":"junit-selenium-setup-project-gradle-jupiter-selenium","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html","title":{"rendered":"JUnit 5 and Selenium &#8211; Setup the project with Gradle, JUnit 5 and Jupiter Selenium"},"content":{"rendered":"<p>Selenium is a set of tools and libraries supporting browser automation and it is mainly used for web applications testing. One of the Selenium\u2019s components is a Selenium WebDriver that provides client library, the JSON wire protocol (protocol to communicate with the browser drivers) and browser drivers. One of the main advantages of Selenium WebDriver is that it supported by all major programming languages and it can run on all major operating systems.<\/p>\n<p>In this tutorial I will go through the setup of the test automation project for the popular <a href=\"http:\/\/todomvc.com\">TodoMVC<\/a> application using Gradle with Java, JUnit 5 and Selenium Jupiter. You will learn about Selenium\u2019s PageFactory to implement Page Object pattern. You will also learn about parallel test execution, test execution order, parameterized tests and much more.<\/p>\n<h2 class=\"wp-block-heading\">About this Tutorial<\/h2>\n<p>You are reading the first part of the <em>JUnit 5 with Selenium WebDriver &#8211; Tutorial<\/em>.<\/p>\n<p>All articles in this tutorial:<\/p>\n<ul class=\"wp-block-list\">\n<li>Setup the project from the ground up &#8211; Gradle with JUnit 5 and Jupiter Selenium<\/li>\n<\/ul>\n<p>Coming up next:<\/p>\n<ul class=\"wp-block-list\">\n<li>Using Selenium built-in <code>PageFactory<\/code> to implement Page Object Pattern<\/li>\n<li>Improving the project configuration &#8211; executing tests in parallel, tests execution order, parameterized tests, AssertJ and more<\/li>\n<\/ul>\n<p>The source code for this tutorial can be found on <a href=\"https:\/\/github.com\/kolorobot\/junit5-selenium-todomvc-demo\">Github<\/a><\/p>\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n<p>First of all, Java JDK is required and it must be installed in your system. I will be using Java 12 and I recommend installing <a href=\"https:\/\/openjdk.java.net\">OpenJDK<\/a> instead of the Oracle JDK due to licensing changes in Java 11. You will also need <a href=\"https:\/\/gradle.org\/install\/\">Gradle<\/a> to init a new project and your favourite Java IDE &#8211; I recommend <a href=\"https:\/\/www.jetbrains.com\/idea\/\">IntelliJ IDEA<\/a> Community or Professional. Optionally, you can also install <a href=\"https:\/\/git-scm.com\">Git<\/a> version control system.<\/p>\n<p>For managing (installing, updating, uninstalling) the tools I recommended using the package manager. If you are working on Windows, you can use <a href=\"https:\/\/chocolatey.org\">Chocolately<\/a>, if you are on macOS you should be using <a href=\"https:\/\/brew.sh\">Homebrew<\/a>.<\/p>\n<p>To sum up, make sure you have the following tools installed and available to you while working with the project in this article:<\/p>\n<ul class=\"wp-block-list\">\n<li>Java JDK &#8211; the newest Java JDK version is recommended<\/li>\n<li>Gradle &#8211; required <em>only<\/em> for setting up the project, Gradle 5.6+ is recommended<\/li>\n<li>Your favourite Java IDE &#8211; IntelliJ IDEA Community or Professional is recommended<\/li>\n<li>Chrome browser &#8211; for running Selenium tests<\/li>\n<li>Terminal Emulator &#8211; for executing shell commands with at least basic support for Unix commands. In Windows this can be <a href=\"https:\/\/cmder.net\">Cmder<\/a> (with Git), in macOS I recommend <a href=\"https:\/\/iterm2.com\">iTerm2<\/a><\/li>\n<li>Git &#8211; if you want to track your source code history<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Setup the project from the ground up<\/h2>\n<p>To create an empty Gradle based project, open you favourite terminal and type:<\/p>\n<div>\n<div id=\"highlighter_536364\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">mkdir junit5-selenium-todomvc-demo<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">cd junit5-selenium-todomvc-demo<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">gradle init --type basic --dsl groovy<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The generated project is an empty, <em>DIY<\/em> project &#8211; with no plugins and no dependencies. It comes with the redundant <code>settings.gradle<\/code> that can be removed:<\/p>\n<div>\n<div id=\"highlighter_32305\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">rm settings.gradle<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3 class=\"wp-block-heading\">Java and JUnit 5<\/h3>\n<p>For the basic Java project configuration with JUnit 5 add the following content to the <code>build.gradle<\/code>:<\/p>\n<div>\n<div id=\"highlighter_144785\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">plugins {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;<\/code><code class=\"java plain\">id <\/code><code class=\"java string\">'java'<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">repositories {<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java plain\">mavenCentral()<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number8 index7 alt1\">&nbsp;<\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java plain\">dependencies {<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;<\/code><code class=\"java plain\">testImplementation(<\/code><code class=\"java string\">'org.junit.jupiter:junit-jupiter:5.5.1'<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number12 index11 alt1\">&nbsp;<\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java plain\">test {<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;<\/code><code class=\"java plain\">useJUnitPlatform()<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;<\/code><code class=\"java plain\">testLogging {<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java plain\">events <\/code><code class=\"java string\">\"passed\"<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"skipped\"<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"failed\"<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The above DSL configures Gradle\u2019s Java plugin (<code>plugins<\/code>), that provides us capabilities for building Java based projects with Gradle. The project uses Maven repository (<code>repositories<\/code>) to download project dependencies (<code>dependencies<\/code>) that are declared in the project. Test implementation dependency for the project is set to JUnit 5 (<code>testImplementation<\/code>) and the task is adjusted (<code>test<\/code>) to make sure that JUnit 5 is used while executing the tests with Gradle.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>Configuration can be verified by executing the Gradle build in the terminal:<\/p>\n<div>\n<div id=\"highlighter_731906\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">.\/gradlew build<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The build is successful:<\/p>\n<div>\n<div id=\"highlighter_906106\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">BUILD SUCCESSFUL in 0s<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java value\">1<\/code> <code class=\"java plain\">actionable task: <\/code><code class=\"java value\">1<\/code> <code class=\"java plain\">executed<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><code>.\/gradlew<\/code> command run the Gradle Wrapper instead a global Gradle distribution. The project was generated with the Gradle Wrapper and therefore global Gradle distribution is not needed at all for executing the tasks and working with the project.<\/p>\n<p>Note: If you are looking for JUnit 5 project templates for Gradle or Maven checkout the official JUnit 5 Samples Github repository: <a href=\"https:\/\/github.com\/junit-team\/junit5-samples\">https:\/\/github.com\/junit-team\/junit5-samples<\/a><\/p>\n<h3 class=\"wp-block-heading\">JUnit Jupiter<\/h3>\n<p>To simplify the configuration of Selenium WebDriver in the project I am going to use Selenium Jupiter which is the JUnit 5 extension aimed to ease the use of Selenium (WebDriver and Grid) in JUnit 5 tests. It comes as a single dependency that needs to be added to dependencies list in <code>build.gradle<\/code>:<\/p>\n<div>\n<div id=\"highlighter_8557\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">dependencies {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;<\/code><code class=\"java plain\">testCompile(<\/code><code class=\"java string\">'io.github.bonigarcia:selenium-jupiter:3.3.0'<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><a href=\"https:\/\/bonigarcia.github.io\/selenium-jupiter\/\">Selenium Jupiter<\/a> library provides integration with Selenium and Appium. Selenium Jupiter supports local and remote browsers, browsers in Docker containers (Docker engine is required) but also <a href=\"https:\/\/selenide.org\">Selenide<\/a> based browser configuration. It uses <a href=\"https:\/\/github.com\/bonigarcia\/webdrivermanager\">WebDriverManager<\/a> internally to manage browser drivers.<\/p>\n<p>Note: Don\u2019t be suprised to see many libraries in your project. Selnium Jupiter has many dependencies. To see all the project dependencies (including transitive dependencies) execute the following command: <code>.\/gradlew dependencies<\/code>.<\/p>\n<h3 class=\"wp-block-heading\">Directories and project files<\/h3>\n<p>The project was created with no Java source files. To create the initial directory and the first test the following commands can be executed:<\/p>\n<div>\n<div id=\"highlighter_414380\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">mkdir -p src\/test\/java\/pl\/codeleak\/demos\/selenium\/todomvc<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">touch src\/test\/java\/pl\/codeleak\/demos\/selenium\/todomvc\/SeleniumTest.java<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The <code>SeleniumTest.java<\/code> file contains very basic test confirming the project is configured properly. The test uses JUnit 5 extension provided by Selenium Jupiter and it has a single test with no assertions:<\/p>\n<div>\n<div id=\"highlighter_326266\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">package<\/code> <code class=\"java plain\">pl.codeleak.demos.selenium.todomvc;<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">io.github.bonigarcia.seljup.SeleniumExtension;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.junit.jupiter.api.Test;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.junit.jupiter.api.extension.ExtendWith;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java keyword\">import<\/code> <code class=\"java plain\">org.openqa.selenium.chrome.ChromeDriver;<\/code><\/div>\n<div class=\"line number7 index6 alt2\">&nbsp;<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java color1\">@ExtendWith<\/code><code class=\"java plain\">(SeleniumExtension.<\/code><code class=\"java keyword\">class<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java keyword\">class<\/code> <code class=\"java plain\">SeleniumTest {<\/code><\/div>\n<div class=\"line number10 index9 alt1\">&nbsp;<\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java color1\">@Test<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">void<\/code> <code class=\"java plain\">projectIsConfigured(ChromeDriver driver) {}<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3 class=\"wp-block-heading\">Running the test<\/h3>\n<p>Executing the Gradle build should confirm the test is passing:<\/p>\n<div>\n<div id=\"highlighter_366542\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">.\/gradlew build<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">pl.codeleak.demos.selenium.todomvc.SeleniumTest &gt; projectIsConfigured() PASSED<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">BUILD SUCCESSFUL in 1s<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java value\">3<\/code> <code class=\"java plain\">actionable tasks: <\/code><code class=\"java value\">2<\/code> <code class=\"java plain\">executed, <\/code><code class=\"java value\">1<\/code> <code class=\"java plain\">up-to-date<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>You probably noted that during the execution of the task the Chrome browser was opened and than closed. This only confirms that all the driver configuration was done under the hood by Selenium Jupiter (with the use of WebDriverManager library). You also noticed that there is no setup and cleanup code for this test. Instead we are <em>injecting<\/em> the instance of the ChromeDriver directly to the test where it is needed. This is how the Selenium Jupiter uses JUnit 5 extension mechanism to inject parameters to test.<\/p>\n<h3 class=\"wp-block-heading\">Create Git repository<\/h3>\n<p>The initial setup of the project is done. Before the real work starts, the project setup can be now be stored in the Git repository. If you have Git installed, run the following command to create a new repository:<\/p>\n<div>\n<div id=\"highlighter_740685\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">git init<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Edit <code>.gitignore<\/code> file to exclude files and directories you want to skip from the repository:<\/p>\n<div>\n<div id=\"highlighter_889523\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">.gradle<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">.idea<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">*.iml<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">build<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">out<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Execute the following command to add and commit files to the repository:<\/p>\n<div>\n<div id=\"highlighter_677109\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">git add .<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">git commit -m <\/code><code class=\"java string\">'Initial project setup'<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3 class=\"wp-block-heading\">Importing project to IDE<\/h3>\n<p>Please note that all the job so far was done with no IDE whatsoever (not fully true &#8211; the test I created with the help of IDE). In general, this is very important aspect of the project configuration: always make your project IDE independent. Prove you can execute the build with single shell commands. This will pay off &#8211; especially when you are going to execute the build using continuous integration tool.<\/p>\n<p>Anyways, with IntelliJ the project will work with no problem. Just lunch it and open a directory with the project and import it as Gradle project.<\/p>\n<p>And now you are all set to start developing the tests and improving the project. But remember, if you are making any configuration changes it is advised that from time to time you test them with the terminal, outside the IDE.<\/p>\n<h2 class=\"wp-block-heading\">Next steps<\/h2>\n<p>In the next part of this tutorial you will learn some basics about Page Object Pattern and implementing it using Selenium\u2019s built-in <code>PageFactory<\/code>.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Rafal Borowiec, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/blog.codeleak.pl\/2019\/09\/junit-5-and-selenium-setup-project-with.html\" target=\"_blank\" rel=\"noopener noreferrer\">JUnit 5 and Selenium &#8211; Setup the project with Gradle, JUnit 5 and Jupiter Selenium<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Selenium is a set of tools and libraries supporting browser automation and it is mainly used for web applications testing. One of the Selenium\u2019s components is a Selenium WebDriver that provides client library, the JSON wire protocol (protocol to communicate with the browser drivers) and browser drivers. One of the main advantages of Selenium WebDriver &hellip;<\/p>\n","protected":false},"author":516,"featured_media":129,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[484,1936,287],"class_list":["post-98468","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-gradle","tag-junit-5","tag-selenium"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JUnit 5 and Selenium - Setup the project with Gradle, JUnit 5 and Jupiter Selenium - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about test automation? Check our article testing the popular TodoMVC application using Gradle with Java, JUnit 5 and Selenium Jupiter\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JUnit 5 and Selenium - Setup the project with Gradle, JUnit 5 and Jupiter Selenium - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about test automation? Check our article testing the popular TodoMVC application using Gradle with Java, JUnit 5 and Selenium Jupiter\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-20T04:00:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/gradle-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Rafal Borowiec\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/kolorobot\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rafal Borowiec\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html\"},\"author\":{\"name\":\"Rafal Borowiec\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/b1a0b2657d5dd2459806446ac66d2d52\"},\"headline\":\"JUnit 5 and Selenium &#8211; Setup the project with Gradle, JUnit 5 and Jupiter Selenium\",\"datePublished\":\"2019-09-20T04:00:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html\"},\"wordCount\":1188,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/gradle-logo.jpg\",\"keywords\":[\"Gradle\",\"JUnit 5\",\"Selenium\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html\",\"name\":\"JUnit 5 and Selenium - Setup the project with Gradle, JUnit 5 and Jupiter Selenium - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/gradle-logo.jpg\",\"datePublished\":\"2019-09-20T04:00:57+00:00\",\"description\":\"Interested to learn about test automation? Check our article testing the popular TodoMVC application using Gradle with Java, JUnit 5 and Selenium Jupiter\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/gradle-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/gradle-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/09\\\/junit-selenium-setup-project-gradle-jupiter-selenium.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"JUnit 5 and Selenium &#8211; Setup the project with Gradle, JUnit 5 and Jupiter Selenium\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/b1a0b2657d5dd2459806446ac66d2d52\",\"name\":\"Rafal Borowiec\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e24680b2ba3dfc13759acf6c1f125e54356bc533e0befe953fea365cadcdaffb?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e24680b2ba3dfc13759acf6c1f125e54356bc533e0befe953fea365cadcdaffb?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e24680b2ba3dfc13759acf6c1f125e54356bc533e0befe953fea365cadcdaffb?s=96&d=mm&r=g\",\"caption\":\"Rafal Borowiec\"},\"description\":\"Software developer, Team Leader, Agile practitioner, occasional blogger, lecturer. Open Source enthusiast, quality oriented and open-minded.\",\"sameAs\":[\"http:\\\/\\\/blog.codeleak.pl\\\/\",\"http:\\\/\\\/pl.linkedin.com\\\/in\\\/borowiec\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/kolorobot\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/rafal-borowiec\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JUnit 5 and Selenium - Setup the project with Gradle, JUnit 5 and Jupiter Selenium - Java Code Geeks","description":"Interested to learn about test automation? Check our article testing the popular TodoMVC application using Gradle with Java, JUnit 5 and Selenium Jupiter","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html","og_locale":"en_US","og_type":"article","og_title":"JUnit 5 and Selenium - Setup the project with Gradle, JUnit 5 and Jupiter Selenium - Java Code Geeks","og_description":"Interested to learn about test automation? Check our article testing the popular TodoMVC application using Gradle with Java, JUnit 5 and Selenium Jupiter","og_url":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2019-09-20T04:00:57+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/gradle-logo.jpg","type":"image\/jpeg"}],"author":"Rafal Borowiec","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/kolorobot","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Rafal Borowiec","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html"},"author":{"name":"Rafal Borowiec","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/b1a0b2657d5dd2459806446ac66d2d52"},"headline":"JUnit 5 and Selenium &#8211; Setup the project with Gradle, JUnit 5 and Jupiter Selenium","datePublished":"2019-09-20T04:00:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html"},"wordCount":1188,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/gradle-logo.jpg","keywords":["Gradle","JUnit 5","Selenium"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html","url":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html","name":"JUnit 5 and Selenium - Setup the project with Gradle, JUnit 5 and Jupiter Selenium - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/gradle-logo.jpg","datePublished":"2019-09-20T04:00:57+00:00","description":"Interested to learn about test automation? Check our article testing the popular TodoMVC application using Gradle with Java, JUnit 5 and Selenium Jupiter","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/gradle-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/gradle-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2019\/09\/junit-selenium-setup-project-gradle-jupiter-selenium.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"JUnit 5 and Selenium &#8211; Setup the project with Gradle, JUnit 5 and Jupiter Selenium"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/b1a0b2657d5dd2459806446ac66d2d52","name":"Rafal Borowiec","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e24680b2ba3dfc13759acf6c1f125e54356bc533e0befe953fea365cadcdaffb?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e24680b2ba3dfc13759acf6c1f125e54356bc533e0befe953fea365cadcdaffb?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e24680b2ba3dfc13759acf6c1f125e54356bc533e0befe953fea365cadcdaffb?s=96&d=mm&r=g","caption":"Rafal Borowiec"},"description":"Software developer, Team Leader, Agile practitioner, occasional blogger, lecturer. Open Source enthusiast, quality oriented and open-minded.","sameAs":["http:\/\/blog.codeleak.pl\/","http:\/\/pl.linkedin.com\/in\/borowiec\/","https:\/\/x.com\/https:\/\/twitter.com\/kolorobot"],"url":"https:\/\/www.javacodegeeks.com\/author\/rafal-borowiec"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/98468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/516"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=98468"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/98468\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/129"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=98468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=98468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=98468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}